This repository has been archived by the owner on Apr 16, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 247
/
numbersstation.dm
647 lines (582 loc) · 33.4 KB
/
numbersstation.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
var/global/shut_up_about_the_fucking_numbers_station = 1
/client/proc/toggle_numbers_station_messages()
set name = "Toggle Numbers Station Alerts"
set desc = "I DON'T CARE WHEN SPACE NUMBERS STATION LINCOLNSHIRE IS BROADCASTING SO SHUT UP ABOUT IT"
set category = "Toggles (Server)"
admin_only
shut_up_about_the_fucking_numbers_station = !(shut_up_about_the_fucking_numbers_station)
logTheThing("admin", usr, null, "toggled numbers station alerts [shut_up_about_the_fucking_numbers_station ? "off" : "on"].")
logTheThing("diary", usr, null, "toggled numbers station alerts [shut_up_about_the_fucking_numbers_station ? "off" : "on"].", "admin")
message_admins("[key_name(usr)] toggled numbers station alerts [shut_up_about_the_fucking_numbers_station ? "off" : "on"]")
/area/spyshack
name = "Space Shack"
icon_state = "yellow"
/obj/item/paper/mission_outline
name = "gibberish note"
info = {"YWTMBYVWZSVRWFWDZVHZRULFBDYCGEZOOPOLMKPFKHTMBHDAOICVXWQPMCLPWEIXKSQWJNCE<br>
ICWRAIWSWFTCAAIMFJOPRXIUPKKTPENMLHNVQCXLQXUYHAXQIUVVDXJNDQVJMWCOJITURUBN<br>
WUMGOFCDVYHPSZGJENGUXOYGEPEDQAOSUOUOKOSCSXNAMQXICOSCSHGIZBDFASSIDFSGNFAW<br>
UQFNBSOJJGKISGYIOGYOWUXRTROLAIEEOTNJCWSWTKXLNEHHUTLOBUZXVHMBPJECPUQECKNQ<br>
ITAYIULHQNCMUOKYBJVRGCPGZBMVIYCQVSOSGLUWVJFUPSEJRIJXQICSGIBCUQCRSBORGQWB<br>
MBNEEDWMKCEZRNYLTREWBFQKNRYJMYLCOFSDSXITAPZB<br><br>
<i><b>On the back of the note is a scribbling:</b> When Blaise says the name of the target, the key of the other unlocks the knowledge.</i>"}
/obj/item/paper/otp
name = "gibberish note"
info = {"<i>There are multiple pages of gibberish in this notepad. The first page says:</i>
SXSUZEUKQMUPBHFLFXKOVYKUMWTRPIPSZKHNFWXKBLKEJMTMSHMBCGXOOAOSEYVMTWYAYUPL<br>
HQDFGMEYYIUBTDETHNAMKMVDZMOAXIVQUBAMGMJCHSLTUOAYWFLBJAWWAIKNHZSVZCLGDTBU<br>
MTRYNJKJXBFAQXWESKASBIPKZSLXDTTFWJAYTBKHRQBBJJENYKLNLYYJUEHYIQAWXNJPGTDT<br>
NXRSOCZWETSNAGNIQYMBRMYUOFQFIUIDDAAEWVAKXOPNDDEINMUTLHVNGZZBVYZHXCJBKVGZ<br>
HJEBZAMNJBVKDMHNDRCMSQTLFCHABZQOUTGTWUGNINGYWWBNVZMDIRJAERFLGUJMECGPVBPI<br>
OJSSDONANBRYRWKZIITDCIZULMFCKZZGHLUHNQHPYEKU<br>
"}
/obj/item/paper/intelligence_report
name = "intelligence report"
info = {"<b>Clandestine Positronics intelligence report on possible threats regarding the facility</b><br><br>
<i>This information is for the eyes of the facility administrator. If you are not authorized to read this report, please report to your facility administrator for bloodline termination.</i><br><br>
Nanotrasen awareness regarding the facility is currently low. High command is mobilizing infiltrator teams, but military action is not expected for a while.<br>
Thanks to our agents inside the organization, we were able to identify two infiltrators working undercover as scientists. Their designation follows: <br>
- #94413, medium field training, medium value in research. Suggesting immediate elimination in field mission.<br>
- #84153, low field training, extremely high value researcher. Suggesting assignment as primary researcher until further notice."}
/obj/item/paper/numbers_note
name = "bloody piece of paper"
desc = "It seems to have some interesting scribblings."
icon_state = "paper_caution_bloody"
sizex = 400
sizey = 600
New()
..()
pixel_x = rand(-8, 8)
pixel_y = rand(-8, 8)
info = "<html><body style='margin:0px'><img src='[resource("images/bloody_numbers_note.png")]'></body></html>"
examine()
..()
attackby()
return
/obj/item/paper/empty_bloody
name = "bloody piece of paper"
desc = "It's blank. Well, other than the blood, anyway."
icon_state = "paper_caution_bloody"
info = "<i>The paper is full of eraser marks and scratches but there is nothing legible on here.</i>"
New()
..()
pixel_x = rand(-8, 8)
pixel_y = rand(-8, 8)
/obj/item/paper/diner_invoice
name = "bloody piece of paper"
desc = "It seems to have some interesting scribblings."
info = {"<html><head></head><body><b>Delivery invoice</b><br><br>
<b>Articles:</b><br>
<ul><li>4 key lime pies</li>
<li>4 lemon meringue pies</li>
<li>3 jumbo size human meat substitute burgers</li><br><br>
<b>Total:</b> 4134 space credits<br>
<b>Thank</b>... <i>the rest of the invoice is covered in blood and illegible</i>"}
icon_state = "paper_caution_bloody"
New()
..()
pixel_x = rand(-8, 8)
pixel_y = rand(-8, 8)
/datum/numbers_station // This is not a physical entity!
var/name = "Space Lincolnshire"
var/frequency = 1487
var/sound_channel = 174
var/login_signal = 'sound/misc/lincolnshire.ogg'
var/list/numbers = list(0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0)
var/list/listeners = list()
var/play_interval = 9000 // 15 minutes
var/next_warning = 0
var/next_play = 0
New()
if (!(src in processing_items))
processing_items.Add(src)
if (ticker)
while (next_play <= ticker.round_elapsed_ticks)
next_play += play_interval
else
next_play = play_interval
next_warning = next_play - 300
spawn (200)
queryAPI("numbers/get")
proc/gather_listeners()
listeners = list()
for (var/mob/living/carbon/human/H in world)
for (var/obj/item/device/radio/Hs in H)
if (Hs.frequency == frequency)
listeners += H
boutput(H, "<span style=\"color:blue\">A peculiar noise intrudes upon the radio frequency of your [Hs].</span>")
break
for (var/mob/living/silicon/robot/R in world)
if (istype(R.radio, /obj/item/device/radio))
var/obj/item/device/radio/Hs = R.radio
if (Hs.frequency == frequency)
listeners += R
boutput(R, "<span style=\"color:blue\">A peculiar noise intrudes upon your radio frequency.</span>")
proc/play_all_numbers()
var/batch = 0
var/period = get_vox_by_string(".")
for (var/number in numbers)
play_number(number)
broadcast_sound(period)
batch++
if (batch >= 3)
sleep(1)
proc/process()
if (ticker.round_elapsed_ticks >= next_warning)
next_warning += play_interval
if (!shut_up_about_the_fucking_numbers_station) // SHUT UP
message_coders("Numbers station [name] broadcasting in about 30 seconds.")
return
if (ticker.round_elapsed_ticks >= next_play)
next_play += play_interval
if (!shut_up_about_the_fucking_numbers_station)
message_coders("Numbers station [name] broadcasting now.")
logTheThing("debug", null, null, "<b>Numbers station</b>: [name] is broadcasting on frequency [frequency / 10].")
gather_listeners()
if (!listeners.len)
logTheThing("debug", null, null, "<b>Numbers station:</b> [name] broadcast aborted: no listeners.")
return
spawn (10)
broadcast_sound(login_signal)
play_all_numbers()
var/doop = get_vox_by_string("doop")
var/deeoo = get_vox_by_string("deeoo")
broadcast_sound(doop)
broadcast_sound(deeoo)
broadcast_sound(doop)
play_all_numbers()
proc/broadcast_sound(var/soundfile)
for (var/mob/M in listeners)
if (M.client)
M << sound(soundfile, volume = 100, channel = sound_channel, wait = 1)
proc/get_tens(var/n)
if (n >= 20)
var/tens = round(n / 10)
switch (tens)
if (2)
return "twenty"
if (3)
return "thirty"
if (4)
return "fourty"
if (5)
return "fifty"
if (6)
return "sixty"
if (7)
return "seventy"
if (8)
return "eighty"
if (9)
return "ninety"
return null
proc/get_ones(var/n)
if (n == 0)
return "zero"
if (n >= 10 && n < 20)
switch (n)
if (10)
return "ten"
if (11)
return "eleven"
if (12)
return "twelve"
if (13)
return "thirteen"
if (14)
return "fourteen"
if (15)
return "fifteen"
if (16)
return "sixteen"
if (17)
return "seventeen"
if (18)
return "eighteen"
if (19)
return "nineteen"
else
var/ones = n % 10
switch (ones)
if (1)
return "one"
if (2)
return "two"
if (3)
return "three"
if (4)
return "four"
if (5)
return "five"
if (6)
return "six"
if (7)
return "seven"
if (8)
return "eight"
if (9)
return "nine"
return null
proc/get_vox_by_string(var/vt)
if (!vt)
return null
var/datum/VOXsound/vs = voxsounds[vt]
if (!vs)
return null
return vs.ogg
proc/play_number(var/n)
var/stens = get_tens(n)
var/ogg = get_vox_by_string(stens)
if (ogg)
broadcast_sound(ogg)
var/sones = get_ones(n)
ogg = get_vox_by_string(sones)
if (ogg)
broadcast_sound(ogg)
var/global/datum/numbers_station/lincolnshire = new
/proc/debug_lincolnshire()
lincolnshire.next_warning = 0
lincolnshire.process()
lincolnshire.next_play = 0
lincolnshire.process()
/proc/lincolnshire_numbers(phase, data)
var/list/ldata = data
if (istype(ldata))
logTheThing("data", null, null, "<b>Numbers station</b>: numbers: [ldata["numbers"]]")
var/TP = ldata["numbers"]
if (TP == null)
return 1
var/list/nums = dd_text2list(TP, " ")
if (nums.len < 21)
logTheThing("debug", null, null, "<b>Numbers station</b> got too few numbers.")
return 2
for (var/i = 1, i <= 21, i++)
lincolnshire.numbers[i] = text2num(nums[i])
logTheThing("debug", null, null, "<b>Numbers station<b> woo success")
return 0
return 3
/area/terraeight
name = "Terra-8 Surface"
icon_state = "green"
/area/bunker
name = "Old Bunker"
icon_state = "yellow"
/obj/decal/fakeobjects/adaptable
adaptable = 1
/turf/unsimulated/wall/adaptive/concrete
name = "concrete wall"
icon = 'icons/misc/terra8.dmi'
base_name = "concrete"
RL_Ignore = 0
desc = "The last recorded incident of someone constructing something out of concrete was in 2017, and we all know how <b>that</b> ended."
/turf/unsimulated/wall/adaptive/bunker_window
name = "bunker window"
icon = 'icons/misc/terra8.dmi'
icon_state = "window"
RL_Ignore = 0
opacity = 0
desc = "It's an unusual steel alloy. It's virtually indestructable by anything short of diamond, but it transmits light almost as well as air."
adapt()
return
/turf/unsimulated/floor/concrete
name = "concrete floor"
icon = 'icons/misc/terra8.dmi'
icon_state = "floor"
/obj/machinery/door/poddoor/bunker
name = "bunker lock"
icon = 'icons/misc/terra8.dmi'
desc = "A very heavy steel door. "
adaptable = 1
mats = 0
attackby(var/obj/item/W, var/mob/user)
if (istype(W, /obj/item/crowbar))
return
emag_act()
return 0
/obj/machinery/door/airlock/bunker
name = "bunker bulkhead"
icon = 'icons/misc/terra8.dmi'
desc = "A very heavy steel door. This one seems to respond to Nanotrasen identification cards. Interesting."
adaptable = 1
mats = 0
emag_act()
return 0
attackby(var/obj/item/W, var/mob/user)
if (istype(W, /obj/item/screwdriver))
boutput(user, "<span style=\"color:red\">The heads of the screws are completely amortized. These doors were maintained one too many times.</span>")
return 0
. = ..()
/obj/item/onyxphoto
name = "photo of onyx key"
icon = 'icons/misc/terra8.dmi'
icon_state = "onyx_photo"
desc = "You can see the onyx key. It doesn't quite feel right to hold this photo."
var/used = 0
/mob/living/carbon/human/secret/crazed
real_name = "unhinged scientist"
gender = MALE
var/list/lines = list("We... we went too far...", "Help me...", "Save me...", "Get it away from me...", "We must keep experimenting...", "It spoke to me... It still speaks to me...", "Stop talking to me...")
New()
..()
spawn(0)
JobEquipSpawned("Scientist")
bioHolder.mobAppearance.customization_second = "Tramp"
bioHolder.mobAppearance.underwear = "briefs"
bioHolder.AddEffect("quiet_voice")
wear_suit = new /obj/item/clothing/suit/straight_jacket(src)
Life(datum/controller/process/mobs/parent)
if (..(parent))
return 1
if (prob(5))
say(pick(lines))
/obj/item/device/key/onyx
desc = "What does this go to?"
icon_state = "key_onyx"
name = "onyx key"
/obj/item/device/key/silver
desc = "What does this go to?"
name = "silver key"
/obj/item/device/key/hotiron
desc = "What does this go to?"
name = "hot iron key"
/obj/landmark/transition
name = "Transition"
invisibility = 101
var/dest_tag = null
var/atom/dest = null
New()
var/atom/A = locate(dest_tag)
if (A)
dest = A
Crossed(var/atom/movable/A)
if (A)
if (!dest)
dest = locate(dest_tag)
if (!dest)
return
if (istype(dest, /area))
return
var/turf/T = get_turf(dest)
if (!istype(T))
return
if (isturf(dest) || isobj(dest))
var/D = dest:dir
T = get_step(T, D)
if (T)
A.set_loc(T)
/obj/critter/shade/scientist
name = "faded scientist"
desc = "What has science done"
icon = 'icons/mob/human.dmi'
icon_state = "body_m"
alpha = 192
color = "#676767"
health = 100
var/animating = 0
New()
..()
overlays += image('icons/mob/jumpsuits/worn_js.dmi', "scientist")
process()
..()
if (!animating && prob(5))
animating = 1
animate(src, alpha = 64, time = 10, easing = SINE_EASING)
animate(alpha = 192, time = 10, easing = SINE_EASING)
spawn (25)
animating = 0
CritterDeath()
if (!alive)
return
src.alive = 0
src.anchored = 0
src.density = 0
walk_to(src,0)
report_death()
particleMaster.SpawnSystem(new /datum/particleSystem/localSmoke("#000000", 5, get_turf(src)))
qdel(src)
lost
desc = "Huh? What is this guy doing here?"
CritterDeath()
if (!alive)
return
new /obj/item/paper/otp(get_turf(src))
..()
// This particular edition of the handbook is used as the cipher for the numbers station.
/obj/item/paper/book/numbers_station_hydroguide
name = "The Helpful Hydroponics Handbook"
icon_state = "book3"
info = {"<html>
<head>
<style type="text/css">
div.code
{
padding:5px;
border:1px solid black;
margin:1px;
font-family:"courier";
font-size:12px;
background-color:lightgray;
}
div.tips
{
padding:10px;
border:5px solid gray;
margin:0px;
font-family:"Arial";
font-size:12px;
font-weight:bold;
}
body
{
color:black;
background-color:white;
}
h1
{
font-family:"Arial Black";
text-align:center;
font-size:24px;
font-weight:bold;
}
h2
{
font-family:"Arial Black";
text-align:left;
font-size:18px;
}
p
{
font-family:"Arial";
font-size:14px;
}
</style>
</head>
<body>
<h1>The Helpful Hydroponics Handbook</h1>
<p><i>Disclaimer: At the time of writing, all information in this book is correct. However, over time, the information may become out of date.<br>
<h2>Introduction</h2>
<p>Hello! Do you have QUESTIONS about PROBLEMS? Are those problems of a gardening and plants nature? Well boy howdy is this the book for you! It's time to put an end to those plant woes!</p>
<h2>The Target Demographic</h2>
<p>Obviously, this book is targeted mainly at Botanists, Gardeners and other plant-growing folks.<br>
Of course if you are not one of these people there's no reason you can't try your hand anyway!
Gardening is awesome, easy and fun! I hope you like the smell of dirt!</p>
<p>If you're already an experienced gardener, keep an eye out for advanced tips, which look like this:
<div class="tips">
<li>This is a tip! Get the hint?</div>
<br><br>
<h2>Chapter 1: Basic Gardening</h2>
<p>So, you've got an empty Hydroponics tray, some seeds and a burning desire to grow some goddamn plants. The next step should be obvious: Plant that seed in the tray!</p>
<p>If you're using one of the standard issue Hydroponics growing trays, the plant should begin to grow almost immediatley. Most issues with the plant will be taken care of automatically by the tray.</p>
<p>However, you will need to ensure that the tray is kept filled with water - but not too much! Apart from this, simply tend to the plant until it becomes ready to harvest, as will be indicated by a green light.</p>
<p>Now, I know what you're thinking. "It can't be that simple, surely!" Well you're wrong! If all you want to do is simply plant, grow and harvest, this is literally all you need to do. Even a prehistoric hunter-gatherer can do it!</p>
<p>However, there are other things you can do to ensure a much better harvest and gardening experience. For example, you can add compost and other nutrients to the plant's solution to ensure the plant becomes and stays very healthy.</p>
<p>A healthy plant is a happy plant, and a happy plant will grow more viable produce!</p>
<p>Also, consider regularly checking the plant by hand - this will alert you to any issues with the tray or the plant that require correction.</p>
<div class="tips">
<li> Keep an eye on the LED displays on your Hydroponics tray. Green means a harvest is ready, Red means the plant is in poor condition. The bar on the side shows you how much water you have - aim for green!
<li> If trays are kept empty, eventually strange weeds may start to grow in them. Even keeping a dead plant in a tray will prevent weeds! Some weeds can be rather bad to have around!
</div>
<br><br>
<h2>Chapter 2: Tools of the Trade</h2>
<p>Well, now you know how to grow a plant and harvest it all well and good. You may find yourself asking however, what do I use to go about doing this?! What is all the stuff in here!? Slow down junior. We'll get to that.</p>
<p>A good Botanist is provided with many different tools to perform their work. Most likely, you'll be able to find an assortment of these tools in either a supplied set of lockers, or in a hydroponics tool vending machine.</p>
<p>First of all, we have the humble and iconic Watering Can. A symbol for any gardener! Standard watering cans can hold quite a lot of reagents, but you'll mostly just want to keep water in it. Most often botanists will be supplied with a high-capacity water tank.</p>
<p>The water tank holds a LOT of water inside - just attach the Watering Can to the spigot, give it a turn, and you'll have a lot of water to feed your plants! The tank will automatically fill the can as full as it can get, so don't worry about spills.</p>
<p>Bags of Compost are another item that should be used often and well. These familiar old brown bags contain a lot of nutritious mulch that will make your plants healthy. Specifics will be covered later.</p>
<p>There is also the trusty green and brown Compost Bin! This device not only stores quite a lot of compost mulch for refilling your bags, but it can also convert any unwanted produce into more mulch! Just place the produce inside and the process is automatic.</p>
<p>A good Botanist is also advised to make a lot of use of Produce Satchels. These handy little bags can hold a lot of food, plants, and seeds. Anything that's related to hydroponics and/or cooking can go in one of these bags! They hold a lot of stuff!</p>
<p>Sometimes though, there's times where plants decide to be a pain. Getting annoyed at Creepers killing your plants? Radweed giving you a nasty case of poisoning? This is where you'll want to use your trusty Chainsaw! Just hack up the plant and it's as good as gone!</p>
<p>If the Chainsaw doesn't work, try Weedkiller. Weedkiller solution has an extremely toxic effect on undesirable weed-like plants, while being completely harmless to regular plants. This is especially good against pesky Lasher plants!</p>
<p>The Plant Analyzer isn't neccessary if you're just doing basic planting and harvesting, but it's a must-have if you want to get into botanical genetic engineering. This will be covered in a later chapter.</p>
<p>The Seed Fabricator is the large, vending machine-like object that you can't take with you (unless you want to be crushed I guess), but it's vital - without it, you wouldn't be able to get any plant seeds! Any seeds obtained from this will have a completely clean genetic slate, also.</p>
<p>The Reagent Extractor accepts various produce, and extracts valuable reagents from them. This is especially important if you want to farm herbs!</p>
<p>Finally, we have the PlantMaster Mk3 plant genetics manipulator, seed extractor and seed infuser! This is the piece de resistance if you want to engage in genetic engineering - but that's a complicated subject we'll tackle later!</p>
<div class="tips">
<li> Other common objects can come in handy, too. Beakers can be inserted in the Reagent Extractor and PlantMaster, and screwdrivers can be used to bolt down trays so they don't get knocked around.
</div>
<h2>Chapter 3: Nutrient Solutions</h2>
<p>So, now we know the basics of plant maintenance, growing, and harvesting. What can we do to become better at our craft?</p>
<p>As was mentioned before, adding nutrients and other additives to the soil is a good idea - they encourage growth and good health in your plants, which is better for your harvests.</p>
<p>However, there are many different kinds of additives, some good and some bad. Obviously adding bad things like toxins or chlorine to the soil won't do you much good at all!</p>
<p>So what can we add? Most Botanists are equipped by standard with compost bags and weedkiller bottles. Weedkiller is harmless to normal plants, but will destroy undesirable plants such as Creepers or Lashers.</p>
<p>Compost is a very basic additive which will slowly make a plant healthier as it absorbs the nutrients. There are no drawbacks - however, it is not very quick or efficient! Ammonia, if available, will have a similar effect to compost.</p>
<p>Phosphorus and Diethylamine, if available, will encourage the plant to grow quicker by offering more stimulating nutrients. Again however, they are not the most efficient of additives.</p>
<p>There exist other additive solutions - they are very efficient, but often come with drawbacks. Unfortunately, the recipes for these are closely guarded formulas. All we can tell you is that they all use plant nutrients as a base!</p>
<p>Due to the high availability of these additives however, Botanists are often supplied with one or two bottles of each. After that, it is up to the botanist to experiment with chemistry and see if they can find how to make more!</p>
<div class="tips">
<li> Mutagenic Formula encourages the plant to mutate wildly. However, it does cause some damage to the plant as well as stunted growth.
<li> Ammonia encourages very rapid plant growth, but will cause the tray to dry out much faster than usual.
<li> Potash encourages large harvests. However, it has been known to shorten the plant's lifespan.
<li> Saltpetre can help create much more potent produce, but it can result in smaller crop yields.
<li> Mutadone Formula is a healthy plant solution that aims to rectify genetic problems. Sadly, plant growth will be slowed to near-zero while it is present in the solution.
</div>
<h2>Chapter 4: Gladly Grow Genetically Great Goods</h2>
<p>So, you're finally rolling in the brassicas, huh? Growing large batches of well-tended and healthy crops, supplying everyone with more food and medicine than they can possibly eat. This is the life, huh?</p>
<p>What if I told you there's more. That's right! You've only glimpsed a tiny bit of the potential inherent in Hydroponics! Through manipulating the genes of plants, you can create new strains of plant that live longer, produce more, produce better, and ARE better for everyone!</p>
<p>I'm sure you're just jonesing to sign up for some mad science. Well you're in luck! Remember the Plant Analyzer and PlantMaster Mk3 mentioned back in chapter two of this handbook? This is where those two tools come in - your gateway to genetic engineering!</p>
<p>Plant Analyzers can be used on growing plants, fruit, and seeds. When used, the analyzer will give a readout of every useful gene in the plant's genetic structure, as well as detailing the plant's species and a few other things.</p>
<p>Maturation Rate is the gene that influences how long a plant takes to grow from a small sapling into an adult plant. With this gene, a lower readout is better as it means a quicker growth cycle.</p>
<p>Production Rate is the gene dealing with how long it takes an adult plant to produce viable crops. Again, lower is better. Essentially, every time a plant is harvested it is returned to the beginning of the adult stage of its growth cycle -
a plant could take a long time to grow but produce new batches of crop relatively quickly between harvests thanks to this gene.</p>
<p>The Lifespan gene differs somewhat in function between fruits and other plants. In fruits, it controls how many harvests a plant can produce before it will die. In other plants it is not quite as useful, but still important - the gene controls how healthy a plant will generally be
when it is first planted. A poor Lifespan gene in a non-fruit plant will result in a sickly plant that requires a lot of care to nurse it back to health. So keep this one high irregardless!</p>
<p>The Yield gene simply influences how much viable produce a plant can generate per harvest. If the yield gene falls too low, a plant may not produce anything at all!</p>
<p>Potency mainly comes into play when producing herbs, but it can also affect certain other crops. Generally speaking, the more potent a plant is, the more concentrated the reagent it produces will be within the leaves, fruits or what-have-you that you harvest. If you're growing
medicinal herbs, this is a very important gene as it allows you to squeeze more reagent out of each herb!</p>
<p>Endurance deals with the plant's ability to resist damage from various sources. Generally speaking, drought and poison are the most commonly resisted types of damage. Fire and physical damage usually are too much for a plant to resist, and thus this gene will do nothing against them.</p>
<p>The Analyzer will also display any genetic strains that are present - these are mutant strains that can affect various things about a plant. Known strains will be covered in an addendum. This section will also show if abnormal genetic strains are present - these are rare mutations that
drastically affect a plant's crop production. Most often these will also be directly visible by observing the plant itself - mutated plants often manifest strange alterations to their appearance!</p>
<p>Next to each gene (and the species) you will see either "D" or "r". This denotes whether that gene is Dominant or Recessive - this will be important later!</p>
<p>Several different things cause a plant's genes to mutate. Plants will mutate somewhat naturally whenever they are first planted in a tray. Exposure to mutagens or radiation will also cause mutations of varying severity - the stronger the source, the more drastic the mutation.</p>
<p>In addition to the nutrient tonics mentioned earlier, the PlantMaster Mk3 allows you much more control over this wild and wacky process they call genetic development! Firstly, the PlantMaster features a seed extractor - this simply maximises the amount of seeds you have to work with
by extracting as many as it can from a piece of produce. All seeds within a single piece of produce will share the same genetic makeup too, so you'll have a lot more room for error!</p>
<p>Secondly, the PlantMaster allows you to splice two seeds together to create a new hybrid seed. This is where dominance and recession comes into play! Select two seeds, and you'll be told their chances of successfully splicing - the chances will be much higher if you use two seeds
from species that are similar, such as two fruits, or two herbs. You can splice seeds between species lines, but it will be much more difficult.</p>
<p>When two seeds are successfully spliced, the genes will be mixed. Dominant genes will take precedence over recessive genes! If you have a seed with a bad dominant yield gene and one with a good recessive yield gene, think twice before you splice! The resultant hybrid seed will
take the bad gene, because it's dominant! If your two seeds are both dominant or recessive in one gene however, what will happen most often is that the hybrid's gene will be an average of the two genes. This does not apply to the species gene however - try as we might, we still can't
grow those sweet, sweet corn melon hybrids. So don't try and fuse two species together! It won't work!</p>
<p>Through splicing, you can potentially take a seed with good genes in one area, splice it with a seed that covers the weak genes or adds further advantages, and end up with a seed that has the benefits of both and drawbacks of neither! There are other benefits to splicing seeds, too -
genetic strains that normally only manifest in one species of plant will be shared in the new hybrid. That prized Immortality strain in your Cannabis plant can finally be a reality!</p>
<p>The PlantMaster is also capable of performing infusions. Infusion is a process whereby a reagent is injected into paticular parts of a seed, hopefully without killing it, in order to forcibly induce genetic changes. You will need at least ten units of a reagent to perform this process,
and a beaker of course! Also a seed. That's important too. Different species can react differently to different kinds of reagent, but some have a universal effect on all plants. For instance, infusing a seed with one of the plant nutrient tonics is most likely a great idea - they are designed
to stimulate genes, and what better way to do that than by injecting it directly into the seed's genes? You might not want to infuse a seed with acid, though. That tends to just dissolve it.</p>
<p>Of course, due to the physical damage involved in injecting a seed full of stuff, infusion will always damage the seed a little - certain reagents might cause a lot of damage in addition to this! In some cases, infusions can also trigger drastic mutations in a plant - try infusing a wheat
seed with iron and see what happens. We love that one! Don't be afraid to experiment - you don't have to use your best genetically engineered seeds for infusing, after all. That's what science is all about!</p>
<p>Now you've learned most of what we know. We hope this handbook has been of great use to you! Don't forget to check the addendums for further information!</p>
<div class="tips">
<li> Don't infuse a single seed too much - in addition to the risk of destroying it, damaged seeds tend to grow unhealthy plants. You'll have to nurse any plant growing from a damaged seed back to good health before it'll produce much in the way of crops.
</div>
<h2>Addendum 1: Common Weeds</h2>
<p><b>Spaceborne Fungus</b> (<i>metafungi</i>)</p>
<p>It is not known whether terrestrial mushroom spores were accidentally brought into space or smuggled deliberately, but they now propagate quite rapidly in many space stations, the ventilation systems helping their spores to get around most of the stations.
A subspecies of these mushrooms are often found as a mold growing in damp, dark and poorly travelled places aboard space stations. Mostly harmless.</p>
<p><b>Space Grass</b> (<i>metagraminoidae</i>)</p>
<p>Often humorously termed "Astro Turf", this spaceborne grass is of terrestrial origin and has adapted so well to space that it can grow harmlessly on nearly any surface if seeds of this plant are scattered upon it.</p>
<p><b>Lasher Brambles</b> (<i>metasalsola lividium</i>)</p>
<p>A strange, space-borne mutation of the terrestrial tumbleweed, Lashers are a thorny, bright cyan plant known to be sensitive to nearby motion. They often "lash out" at nearby lifeforms, cutting them with thorny vines. Extermination recommended.</p>
<p><b>Creeper Vine</b> (<i>metahedera pervasis</i>)</p>
<p>These fuschia roots and vines are known for their rapid growth and displacement of other plant species. If a tray is contaminated by Creepers and cannot be disinfected, keep it away from other nearby trays. The creeper vine has been known to actively seek other plants
to attack them and replace them with more instances of itself.</p>
<p><b>Radiator Weed</b> (<i>xenocuries nauseus</i>)</p>
<p>One of the first non-terrestrial plants discovered, spores of this fungus-like plant are often found floating dormantly in space. Unfortunately, it is rather dangerous - the main "bulb" of the plant has been known to emit dangerous levels of ionizing radiation.
The plant takes a while to reach this stage - when the green bulb begins glowing, the plant should be considered a health hazard. It can induce radiation poisoning in humans, and mutations and damage to nearby plants.</p>
<p><b>Toxic Slurry Pod</b> (<i>xenobulba putrescens</i>)</p>
<p>A more recently discovered alien plant, it is sadly no less dangerous or pervasive than the Radiator Weed. The main body of the plant is a green fleshy mass which contains a putrid sludge of unknown function - this sludge is known to be very toxic and can have significant
negative effects on human and plant health. The main body of the plant has been known to fill itself with this sludge to such a degree that it reaches an internal pressure it is no longer capable of withstanding and bursts, splattering the sludge across a large radius. Hardened
globules of this sludge can be harvested from the plant however - with proper processing to remove the toxins, the "slurryfruit" has caught on in some colonies as a delicacy.</p>
<h2>Addendum 2: Known Gene Strains</h2>
<p><b>Fast Metabolism</b>: This strain accelerates a plant's growth, but causes it to drain reagents from its environment more quickly.</p>
<p><b>Slow Metabolism</b>: This strain causes a plant to grow more slowly but also use less reagents.</p>
<p><b>Toxin Immunity</b>: Any kind of toxin or poison will not harm a plant carrying this strain.</p>
<p><b>Drought Resistance</b>: When no water is available, plants with this strain will deteriorate a lot slower.</p>
<p><b>Enhanced Yield</b>: Harvests from plants with this strain will be much more bountiful.</p>
<p><b>Stunted Yield</b>: The harvest yield from plants with this strain will be poor.</p>
<p><b>Immortal</b>: A highly desirable strain that ensures a fruiting plant will never die from being harvested.</p>
<p><b>Unstable</b>: Plants carrying this strain will continually mutate by themselves.</p>
<p><b>Rapid Growth</b>: A very desirable strain that causes the plant to grow far faster than usual.</p>
<p><b>Stunted Growth</b>: This strain will cause the plant to grow much more slowly.</p>
<p><b>Poor Health</b>: The condition of plants carrying this strain will deteriorate over time.</p>
<p><b>Seedless</b>: A very negative strain that prevents the host plant from reproducing at all.</p>
</body>
</html>
"}