forked from yogstation13/Yogstation
/
toxin_reagents.dm
918 lines (800 loc) · 29.6 KB
/
toxin_reagents.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
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
//////////////////////////Poison stuff (Toxins & Acids)///////////////////////
/datum/reagent/toxin
name = "Toxin"
description = "A toxic chemical."
color = "#CF3600" // rgb: 207, 54, 0
taste_description = "bitterness"
taste_mult = 1.2
var/toxpwr = 1.5
var/silent_toxin = FALSE //won't produce a pain message when processed by liver/life() if there isn't another non-silent toxin present.
/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
if(toxpwr)
M.adjustToxLoss(toxpwr*REM, 0)
. = TRUE
..()
/datum/reagent/toxin/amatoxin
name = "Amatoxin"
description = "A powerful poison derived from certain species of mushroom."
color = "#792300" // rgb: 121, 35, 0
toxpwr = 2.5
taste_description = "mushroom"
/datum/reagent/toxin/mutagen
name = "Unstable mutagen"
description = "Might cause unpredictable mutations. Keep away from children."
color = "#00FF00"
toxpwr = 0
taste_description = "slime"
taste_mult = 0.9
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
if(!..())
return
if(!M.has_dna() || HAS_TRAIT(M, TRAIT_RADIMMUNE) || HAS_TRAIT(M, TRAIT_BADDNA))
return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
if((method==VAPOR && prob(min(33, reac_volume))) || method==INGEST || method==PATCH || method==INJECT)
M.randmuti()
if(prob(98))
M.easy_randmut(NEGATIVE+MINOR_NEGATIVE)
else
M.easy_randmut(POSITIVE)
M.updateappearance()
M.domutcheck()
..()
/datum/reagent/toxin/mutagen/on_mob_life(mob/living/carbon/C)
C.apply_effect(5,EFFECT_IRRADIATE,0)
return ..()
/datum/reagent/toxin/plasma
name = "Plasma"
description = "Plasma in its liquid form."
taste_description = "bitterness"
specific_heat = SPECIFIC_HEAT_PLASMA
taste_mult = 1.5
color = "#8228A0"
toxpwr = 3
/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
if(holder.has_reagent(/datum/reagent/medicine/epinephrine))
holder.remove_reagent(/datum/reagent/medicine/epinephrine, 2*REM)
C.adjustPlasma(20)
return ..()
/datum/reagent/toxin/plasma/reaction_obj(obj/O, reac_volume)
if((!O) || (!reac_volume))
return 0
var/temp = holder ? holder.chem_temp : T20C
O.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]")
/datum/reagent/toxin/plasma/reaction_turf(turf/open/T, reac_volume)
if(istype(T))
var/temp = holder ? holder.chem_temp : T20C
T.atmos_spawn_air("plasma=[reac_volume];TEMP=[temp]")
return
/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
if(method == TOUCH || method == VAPOR)
M.adjust_fire_stacks(reac_volume / 5)
return
..()
/datum/reagent/toxin/lexorin
name = "Lexorin"
description = "A powerful poison used to stop respiration."
color = "#7DC3A0"
toxpwr = 0
taste_description = "acid"
/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C)
. = TRUE
if(HAS_TRAIT(C, TRAIT_NOBREATH))
. = FALSE
if(.)
C.adjustOxyLoss(5, 0)
C.losebreath += 2
if(prob(20))
C.emote("gasp")
..()
/datum/reagent/toxin/slimejelly
name = "Slime Jelly"
description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
color = "#801E28" // rgb: 128, 30, 40
toxpwr = 0
taste_description = "slime"
taste_mult = 1.3
/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M)
if(prob(10))
to_chat(M, "<span class='danger'>Your insides are burning!</span>")
M.adjustToxLoss(rand(20,60)*REM, 0)
. = 1
else if(prob(40))
M.heal_bodypart_damage(5*REM)
. = 1
..()
/datum/reagent/toxin/minttoxin
name = "Mint Toxin"
description = "Useful for dealing with undesirable customers."
color = "#CF3600" // rgb: 207, 54, 0
toxpwr = 0
taste_description = "mint"
/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_FAT))
M.gib()
return ..()
/datum/reagent/toxin/carpotoxin
name = "Carpotoxin"
description = "A deadly neurotoxin produced by the dreaded spess carp."
silent_toxin = TRUE
color = "#003333" // rgb: 0, 51, 51
toxpwr = 2
taste_description = "fish"
/datum/reagent/toxin/zombiepowder
name = "Zombie Powder"
description = "A strong neurotoxin that puts the subject into a death-like state."
silent_toxin = TRUE
reagent_state = SOLID
color = "#669900" // rgb: 102, 153, 0
toxpwr = 0.5
taste_description = "death"
var/fakedeath_active = FALSE
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/L)
..()
ADD_TRAIT(L, TRAIT_FAKEDEATH, type)
if(fakedeath_active)
L.fakedeath(type)
/datum/reagent/toxin/zombiepowder/on_mob_end_metabolize(mob/living/L)
L.cure_fakedeath(type)
..()
/datum/reagent/toxin/zombiepowder/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
L.adjustOxyLoss(0.5*REM, 0)
if(method == INGEST)
var/datum/reagent/toxin/zombiepowder/Z = L.reagents.has_reagent(/datum/reagent/toxin/zombiepowder)
if(istype(Z))
Z.fakedeath_active = TRUE
/datum/reagent/toxin/zombiepowder/on_mob_life(mob/living/M)
..()
if(fakedeath_active)
return TRUE
switch(current_cycle)
if(1 to 5)
M.confused += 1
M.drowsyness += 1
M.slurring += 3
if(5 to 8)
M.adjustStaminaLoss(40, 0)
if(9 to INFINITY)
fakedeath_active = TRUE
M.fakedeath(type)
/datum/reagent/toxin/ghoulpowder
name = "Ghoul Powder"
description = "A strong neurotoxin that slows metabolism to a death-like state, while keeping the patient fully active. Causes toxin buildup if used too long."
reagent_state = SOLID
color = "#664700" // rgb: 102, 71, 0
toxpwr = 0.8
taste_description = "death"
/datum/reagent/toxin/ghoulpowder/on_mob_metabolize(mob/living/L)
..()
ADD_TRAIT(L, TRAIT_FAKEDEATH, type)
/datum/reagent/toxin/ghoulpowder/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_FAKEDEATH, type)
..()
/datum/reagent/toxin/ghoulpowder/on_mob_life(mob/living/carbon/M)
M.adjustOxyLoss(1*REM, 0)
..()
. = 1
/datum/reagent/toxin/mindbreaker
name = "Mindbreaker Toxin"
description = "A powerful hallucinogen. Not a thing to be messed with. For some mental patients. it counteracts their symptoms and anchors them to reality."
color = "#B31008" // rgb: 139, 166, 233
toxpwr = 0
taste_description = "sourness"
/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M)
M.hallucination += 5
return ..()
/datum/reagent/toxin/plantbgone
name = "Plant-B-Gone"
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
color = "#49002E" // rgb: 73, 0, 46
toxpwr = 1
taste_mult = 1
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
if(istype(O, /obj/structure/alien/weeds))
var/obj/structure/alien/weeds/alien_weeds = O
alien_weeds.take_damage(rand(15,35), BRUTE, 0) // Kills alien weeds pretty fast
else if(istype(O, /obj/structure/glowshroom)) //even a small amount is enough to kill it
qdel(O)
else if(istype(O, /obj/structure/spacevine))
var/obj/structure/spacevine/SV = O
SV.on_chem_effect(src)
/datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == VAPOR)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!C.wear_mask) // If not wearing a mask
var/damage = min(round(0.4*reac_volume, 0.1),10)
C.adjustToxLoss(damage)
/datum/reagent/toxin/plantbgone/weedkiller
name = "Weed Killer"
description = "A harmful toxic mixture to kill weeds. Do not ingest!"
color = "#4B004B" // rgb: 75, 0, 75
/datum/reagent/toxin/pestkiller
name = "Pest Killer"
description = "A harmful toxic mixture to kill pests. Do not ingest!"
color = "#4B004B" // rgb: 75, 0, 75
toxpwr = 1
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
..()
if(MOB_BUG in M.mob_biotypes)
var/damage = min(round(0.4*reac_volume, 0.1),10)
M.adjustToxLoss(damage)
/datum/reagent/toxin/spore
name = "Spore Toxin"
description = "A natural toxin produced by blob spores that inhibits vision when ingested."
color = "#9ACD32"
toxpwr = 1
/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C)
C.damageoverlaytemp = 60
C.update_damage_hud()
C.blur_eyes(3)
return ..()
/datum/reagent/toxin/spore_burning
name = "Burning Spore Toxin"
description = "A natural toxin produced by blob spores that induces combustion in its victim."
color = "#9ACD32"
toxpwr = 0.5
taste_description = "burning"
/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M)
M.adjust_fire_stacks(2)
M.IgniteMob()
return ..()
/datum/reagent/toxin/chloralhydrate
name = "Chloral Hydrate"
description = "A powerful sedative that induces confusion and drowsiness before putting its target to sleep."
silent_toxin = TRUE
reagent_state = SOLID
color = "#000067" // rgb: 0, 0, 103
toxpwr = 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
/datum/reagent/toxin/chloralhydrate/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(1 to 10)
M.confused += 2
M.drowsyness += 2
if(10 to 50)
M.Sleeping(40, 0)
. = 1
if(51 to INFINITY)
M.Sleeping(40, 0)
M.adjustToxLoss((current_cycle - 50)*REM, 0)
. = 1
..()
/datum/reagent/toxin/fakebeer //disguised as normal beer for use by emagged brobots
name = "Beer"
description = "A specially-engineered sedative disguised as beer. It induces instant sleep in its target."
color = "#664300" // rgb: 102, 67, 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "piss water"
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M)
switch(current_cycle)
if(1 to 50)
M.Sleeping(40, 0)
if(51 to INFINITY)
M.Sleeping(40, 0)
M.adjustToxLoss((current_cycle - 50)*REM, 0)
return ..()
/datum/reagent/toxin/coffeepowder
name = "Coffee Grounds"
description = "Finely ground coffee beans, used to make coffee."
reagent_state = SOLID
color = "#5B2E0D" // rgb: 91, 46, 13
toxpwr = 0.5
/datum/reagent/toxin/teapowder
name = "Ground Tea Leaves"
description = "Finely shredded tea leaves, used for making tea."
reagent_state = SOLID
color = "#7F8400" // rgb: 127, 132, 0
toxpwr = 0.5
/datum/reagent/toxin/mutetoxin //the new zombie powder.
name = "Mute Toxin"
description = "A nonlethal poison that inhibits speech in its victim."
silent_toxin = TRUE
color = "#F0F8FF" // rgb: 240, 248, 255
toxpwr = 0
taste_description = "silence"
/datum/reagent/toxin/mutetoxin/on_mob_life(mob/living/carbon/M)
M.silent = max(M.silent, 3)
..()
/datum/reagent/toxin/staminatoxin
name = "Tirizene"
description = "A nonlethal poison that causes extreme fatigue and weakness in its victim."
silent_toxin = TRUE
color = "#6E2828"
data = 13
toxpwr = 0
/datum/reagent/toxin/staminatoxin/on_mob_life(mob/living/carbon/M)
M.adjustStaminaLoss(REM * data, 0)
data = max(data - 1, 3)
..()
. = 1
/datum/reagent/toxin/polonium
name = "Polonium"
description = "An extremely radioactive material in liquid form. Ingestion results in fatal irradiation."
reagent_state = LIQUID
color = "#787878"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M)
M.radiation += 4
..()
/datum/reagent/toxin/histamine
name = "Histamine"
description = "Histamine's effects become more dangerous depending on the dosage amount. They range from mildly annoying to incredibly lethal."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#FA6464"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
overdose_threshold = 30
toxpwr = 0
/datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M)
if(prob(50))
switch(pick(1, 2, 3, 4))
if(1)
to_chat(M, "<span class='danger'>You can barely see!</span>")
M.blur_eyes(3)
if(2)
M.emote("cough")
if(3)
M.emote("sneeze")
if(4)
if(prob(75))
to_chat(M, "You scratch at an itch.")
M.adjustBruteLoss(2*REM, 0)
. = 1
..()
/datum/reagent/toxin/histamine/overdose_process(mob/living/M)
M.adjustOxyLoss(2*REM, 0)
M.adjustBruteLoss(2*REM, FALSE, FALSE, BODYPART_ORGANIC)
M.adjustToxLoss(2*REM, 0)
..()
. = 1
/datum/reagent/toxin/formaldehyde
name = "Formaldehyde"
description = "Formaldehyde, on its own, is a fairly weak toxin. It contains trace amounts of Histamine, very rarely making it decay into Histamine."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#B4004B"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 1
/datum/reagent/toxin/formaldehyde/on_mob_life(mob/living/carbon/M)
if(prob(5))
holder.add_reagent(/datum/reagent/toxin/histamine, pick(5,15))
holder.remove_reagent(/datum/reagent/toxin/formaldehyde, 1.2)
else
return ..()
/datum/reagent/toxin/venom
name = "Venom"
description = "An exotic poison extracted from highly toxic fauna. Causes scaling amounts of toxin damage and bruising depending and dosage. Often decays into Histamine."
reagent_state = LIQUID
color = "#F0FFF0"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M)
toxpwr = 0.2*volume
M.adjustBruteLoss((0.3*volume)*REM, 0)
. = 1
if(prob(15))
M.reagents.add_reagent(/datum/reagent/toxin/histamine, pick(5,10))
M.reagents.remove_reagent(/datum/reagent/toxin/venom, 1.1)
else
..()
/datum/reagent/toxin/fentanyl
name = "Fentanyl"
description = "Fentanyl will inhibit brain function and cause toxin damage before eventually knocking out its victim."
reagent_state = LIQUID
color = "#64916E"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/fentanyl/on_mob_life(mob/living/carbon/M)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3*REM, 150)
if(M.toxloss <= 60)
M.adjustToxLoss(1*REM, 0)
if(current_cycle >= 18)
M.Sleeping(40, 0)
..()
return TRUE
/datum/reagent/toxin/cyanide
name = "Cyanide"
description = "An infamous poison known for its use in assassination. Causes small amounts of toxin damage with a small chance of oxygen damage or a stun."
reagent_state = LIQUID
color = "#00B4FF"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1.25
/datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M)
if(prob(5))
M.losebreath += 1
if(prob(8))
to_chat(M, "You feel horrendously weak!")
M.Stun(40, 0)
M.adjustToxLoss(2*REM, 0)
return ..()
/datum/reagent/toxin/bad_food
name = "Bad Food"
description = "The result of some abomination of cookery, food so bad it's toxic."
reagent_state = LIQUID
color = "#d6d6d8"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0.5
taste_description = "bad cooking"
/datum/reagent/itching_powder
name = "Itching Powder"
description = "A powder that induces itching upon contact with the skin. Causes the victim to scratch at their itches and has a very low chance to decay into Histamine."
reagent_state = LIQUID
color = "#C8C8C8"
metabolization_rate = 0.4 * REAGENTS_METABOLISM
/datum/reagent/itching_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(method == TOUCH || method == VAPOR)
M.reagents.add_reagent(/datum/reagent/itching_powder, reac_volume)
/datum/reagent/itching_powder/on_mob_life(mob/living/carbon/M)
if(prob(15))
to_chat(M, "You scratch at your head.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(15))
to_chat(M, "You scratch at your leg.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(15))
to_chat(M, "You scratch at your arm.")
M.adjustBruteLoss(0.2*REM, 0)
. = 1
if(prob(3))
M.reagents.add_reagent(/datum/reagent/toxin/histamine,rand(1,3))
M.reagents.remove_reagent(/datum/reagent/itching_powder,1.2)
return
..()
/datum/reagent/toxin/initropidril
name = "Initropidril"
description = "A powerful poison with insidious effects. It can cause stuns, lethal breathing failure, and cardiac arrest."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#7F10C0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 2.5
/datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C)
if(prob(25))
var/picked_option = rand(1,3)
switch(picked_option)
if(1)
C.Paralyze(60, 0)
. = TRUE
if(2)
C.losebreath += 10
C.adjustOxyLoss(rand(5,25), 0)
. = TRUE
if(3)
if(!C.undergoing_cardiac_arrest() && C.can_heartattack())
C.set_heartattack(TRUE)
if(C.stat == CONSCIOUS)
C.visible_message("<span class='userdanger'>[C] clutches at [C.p_their()] chest as if [C.p_their()] heart stopped!</span>")
else
C.losebreath += 10
C.adjustOxyLoss(rand(5,25), 0)
. = TRUE
return ..() || .
/datum/reagent/toxin/pancuronium
name = "Pancuronium"
description = "An undetectable toxin that swiftly incapacitates its victim. May also cause breathing failure."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#195096"
metabolization_rate = 0.25 * REAGENTS_METABOLISM
toxpwr = 0
taste_mult = 0 // undetectable, I guess?
/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
M.Stun(40, 0)
. = TRUE
if(prob(20))
M.losebreath += 4
..()
/datum/reagent/toxin/sodium_thiopental
name = "Sodium Thiopental"
description = "Sodium Thiopental induces heavy weakness in its target as well as unconsciousness."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#6496FA"
metabolization_rate = 0.75 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 10)
M.Sleeping(40, 0)
M.adjustStaminaLoss(10*REM, 0)
..()
return TRUE
/datum/reagent/toxin/sulfonal
name = "Sulfonal"
description = "A stealthy poison that deals minor toxin damage and eventually puts the target to sleep."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#7DC3A0"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 0.5
/datum/reagent/toxin/sulfonal/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 22)
M.Sleeping(40, 0)
return ..()
/datum/reagent/toxin/amanitin
name = "Amanitin"
description = "A very powerful delayed toxin. Upon full metabolization, a massive amount of toxin damage will be dealt depending on how long it has been in the victim's bloodstream."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#FFFFFF"
toxpwr = 0
metabolization_rate = 0.5 * REAGENTS_METABOLISM
/datum/reagent/toxin/amanitin/on_mob_delete(mob/living/M)
var/toxdamage = current_cycle*3*REM
M.log_message("has taken [toxdamage] toxin damage from amanitin toxin", LOG_ATTACK)
M.adjustToxLoss(toxdamage)
..()
/datum/reagent/toxin/lipolicide
name = "Lipolicide"
description = "A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. Deadly to those without nutriment in their body."
silent_toxin = TRUE
taste_description = "mothballs"
reagent_state = LIQUID
color = "#F0FFF0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/carbon/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(1*REM, 0)
M.adjust_nutrition(-3) // making the chef more valuable, one meme trap at a time
M.overeatduration = 0
return ..()
/datum/reagent/toxin/coniine
name = "Coniine"
description = "Coniine metabolizes extremely slowly, but deals high amounts of toxin damage and stops breathing."
reagent_state = LIQUID
color = "#7DC3A0"
metabolization_rate = 0.06 * REAGENTS_METABOLISM
toxpwr = 1.75
/datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M)
M.losebreath += 5
return ..()
/datum/reagent/toxin/spewium
name = "Spewium"
description = "A powerful emetic, causes uncontrollable vomiting. May result in vomiting organs at high doses."
reagent_state = LIQUID
color = "#2f6617" //A sickly green color
metabolization_rate = REAGENTS_METABOLISM
overdose_threshold = 29
toxpwr = 0
taste_description = "vomit"
/datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C)
.=..()
if(current_cycle >=11 && prob(min(50,current_cycle)))
C.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30))
for(var/datum/reagent/toxin/R in C.reagents.reagent_list)
if(R != src)
C.reagents.remove_reagent(R.type,1)
/datum/reagent/toxin/spewium/overdose_process(mob/living/carbon/C)
. = ..()
if(current_cycle >=33 && prob(15))
C.spew_organ()
C.vomit(0, TRUE, TRUE, 4)
to_chat(C, "<span class='userdanger'>You feel something lumpy come up as you vomit.</span>")
/datum/reagent/toxin/curare
name = "Curare"
description = "Causes slight toxin damage followed by chain-stunning and oxygen damage."
reagent_state = LIQUID
color = "#191919"
metabolization_rate = 0.125 * REAGENTS_METABOLISM
toxpwr = 1
/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M)
if(current_cycle >= 11)
M.Paralyze(60, 0)
M.adjustOxyLoss(1*REM, 0)
. = 1
..()
/datum/reagent/toxin/heparin //Based on a real-life anticoagulant. I'm not a doctor, so this won't be realistic.
name = "Heparin"
description = "A powerful anticoagulant. Victims will bleed uncontrollably and suffer scaling bruising."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#C8C8C8" //RGB: 200, 200, 200
metabolization_rate = 0.2 * REAGENTS_METABOLISM
toxpwr = 0
/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.bleed_rate = min(H.bleed_rate + 2, 8)
H.adjustBruteLoss(1, 0) //Brute damage increases with the amount they're bleeding
. = 1
return ..() || .
/datum/reagent/toxin/rotatium //Rotatium. Fucks up your rotation and is hilarious
name = "Rotatium"
description = "A constantly swirling, oddly colourful fluid. Causes the consumer's sense of direction and hand-eye coordination to become wild."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#AC88CA" //RGB: 172, 136, 202
metabolization_rate = 0.6 * REAGENTS_METABOLISM
toxpwr = 0.5
taste_description = "spinning"
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
if(current_cycle >= 20 && current_cycle%20 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1)
animate(transform = matrix(-rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING)
return ..()
/datum/reagent/toxin/rotatium/on_mob_end_metabolize(mob/living/M)
if(M && M.hud_used)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()
/datum/reagent/toxin/skewium
name = "Skewium"
description = "A strange, dull coloured liquid that appears to warp back and forth inside its container. Causes any consumer to experience a visual phenomena similar to said warping."
silent_toxin = TRUE
reagent_state = LIQUID
color = "#ADBDCD"
metabolization_rate = 0.8 * REAGENTS_METABOLISM
toxpwr = 0.25
taste_description = "skewing"
/datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M)
if(M.hud_used)
if(current_cycle >= 5 && current_cycle % 3 == 0)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/matrix/skew = matrix()
var/intensity = 8
skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity))
var/matrix/newmatrix = skew
if(prob(33)) // 1/3rd of the time, let's make it stack with the previous matrix! Mwhahahaha!
var/obj/screen/plane_master/PM = M.hud_used.plane_masters["[GAME_PLANE]"]
newmatrix = skew * PM.transform
for(var/whole_screen in screens)
animate(whole_screen, transform = newmatrix, time = 5, easing = QUAD_EASING, loop = -1)
animate(transform = -newmatrix, time = 5, easing = QUAD_EASING)
return ..()
/datum/reagent/toxin/skewium/on_mob_end_metabolize(mob/living/M)
if(M && M.hud_used)
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()
/datum/reagent/toxin/anacea
name = "Anacea"
description = "A toxin that quickly purges medicines and metabolizes very slowly."
reagent_state = LIQUID
color = "#3C5133"
metabolization_rate = 0.08 * REAGENTS_METABOLISM
toxpwr = 0.15
/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M)
var/remove_amt = 5
if(holder.has_reagent(/datum/reagent/medicine/calomel) || holder.has_reagent(/datum/reagent/medicine/pen_acid))
remove_amt = 0.5
for(var/datum/reagent/medicine/R in M.reagents.reagent_list)
M.reagents.remove_reagent(R.type,remove_amt)
return ..()
//ACID
/datum/reagent/toxin/acid
name = "Sulphuric acid"
description = "A strong mineral acid with the molecular formula H2SO4."
color = "#00FF32"
toxpwr = 1
var/acidpwr = 10 //the amount of protection removed from the armour
taste_description = "acid"
self_consuming = TRUE
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
if(!istype(C))
return
reac_volume = round(reac_volume,0.1)
if(method == INGEST)
C.adjustBruteLoss(min(6*toxpwr, reac_volume * toxpwr))
return
if(method == INJECT)
C.adjustBruteLoss(1.5 * min(6*toxpwr, reac_volume * toxpwr))
return
C.acid_act(acidpwr, reac_volume)
/datum/reagent/toxin/acid/reaction_obj(obj/O, reac_volume)
if(ismob(O.loc)) //handled in human acid_act()
return
reac_volume = round(reac_volume,0.1)
O.acid_act(acidpwr, reac_volume)
/datum/reagent/toxin/acid/reaction_turf(turf/T, reac_volume)
if (!istype(T))
return
reac_volume = round(reac_volume,0.1)
T.acid_act(acidpwr, reac_volume)
/datum/reagent/toxin/acid/fluacid
name = "Fluorosulfuric acid"
description = "Fluorosulfuric acid is an extremely corrosive chemical substance."
color = "#5050FF"
toxpwr = 2
acidpwr = 42.0
/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
M.adjustFireLoss(current_cycle/10, 0)
. = 1
..()
/datum/reagent/toxin/delayed
name = "Toxin Microcapsules"
description = "Causes heavy toxin damage after a brief time of inactivity."
reagent_state = LIQUID
metabolization_rate = 0 //stays in the system until active.
var/actual_metaboliztion_rate = REAGENTS_METABOLISM
toxpwr = 0
var/actual_toxpwr = 5
var/delay = 30
/datum/reagent/toxin/delayed/on_mob_life(mob/living/carbon/M)
if(current_cycle > delay)
holder.remove_reagent(type, actual_metaboliztion_rate * M.metabolism_efficiency)
M.adjustToxLoss(actual_toxpwr*REM, 0)
if(prob(10))
M.Paralyze(20, 0)
. = 1
..()
/datum/reagent/toxin/mimesbane
name = "Mime's Bane"
description = "A nonlethal neurotoxin that interferes with the victim's ability to gesture."
silent_toxin = TRUE
color = "#F0F8FF" // rgb: 240, 248, 255
toxpwr = 0
taste_description = "stillness"
/datum/reagent/toxin/mimesbane/on_mob_metabolize(mob/living/L)
ADD_TRAIT(L, TRAIT_EMOTEMUTE, type)
/datum/reagent/toxin/mimesbane/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_EMOTEMUTE, type)
/datum/reagent/toxin/bonehurtingjuice //oof ouch
name = "Bone Hurting Juice"
description = "A strange substance that looks a lot like water. Drinking it is oddly tempting. Oof ouch."
silent_toxin = TRUE //no point spamming them even more.
color = "#AAAAAA77" //RGBA: 170, 170, 170, 77
toxpwr = 0
taste_description = "bone hurting"
overdose_threshold = 50
/datum/reagent/toxin/bonehurtingjuice/on_mob_metabolize(mob/living/carbon/M)
M.say("oof ouch my bones", forced = /datum/reagent/toxin/bonehurtingjuice)
/datum/reagent/toxin/bonehurtingjuice/on_mob_life(mob/living/carbon/M)
M.adjustStaminaLoss(7.5, 0)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
M.adjustBruteLoss(0.5, 0)
if(prob(20))
switch(rand(1, 3))
if(1)
var/list/possible_says = list("oof.", "ouch!", "my bones.", "oof ouch.", "oof ouch my bones.")
M.say(pick(possible_says), forced = /datum/reagent/toxin/bonehurtingjuice)
if(2)
var/list/possible_mes = list("oofs softly.", "looks like their bones hurt.", "grimaces, as though their bones hurt.")
M.say("*custom " + pick(possible_mes), forced = /datum/reagent/toxin/bonehurtingjuice)
if(3)
to_chat(M, "<span class='warning'>Your bones hurt!</span>")
return ..()
/datum/reagent/toxin/bonehurtingjuice/overdose_process(mob/living/carbon/M)
if(prob(4) && iscarbon(M)) //big oof
var/selected_part
switch(rand(1, 4)) //God help you if the same limb gets picked twice quickly.
if(1)
selected_part = BODY_ZONE_L_ARM
if(2)
selected_part = BODY_ZONE_R_ARM
if(3)
selected_part = BODY_ZONE_L_LEG
if(4)
selected_part = BODY_ZONE_R_LEG
var/obj/item/bodypart/bp = M.get_bodypart(selected_part)
if(M.dna.species.type != /datum/species/skeleton && M.dna.species.type != /datum/species/plasmaman) //We're so sorry skeletons, you're so misunderstood
if(bp)
bp.receive_damage(0, 0, 200)
playsound(M, get_sfx("desceration"), 50, TRUE, -1)
M.visible_message("<span class='warning'>[M]'s bones hurt too much!!</span>", "<span class='danger'>Your bones hurt too much!!</span>")
M.say("OOF!!", forced = /datum/reagent/toxin/bonehurtingjuice)
else //SUCH A LUST FOR REVENGE!!!
to_chat(M, "<span class='warning'>A phantom limb hurts!</span>")
M.say("Why are we still here, just to suffer?", forced = /datum/reagent/toxin/bonehurtingjuice)
else //you just want to socialize
if(bp)
playsound(M, get_sfx("desceration"), 50, TRUE, -1)
M.visible_message("<span class='warning'>[M] rattles loudly and flails around!!</span>", "<span class='danger'>Your bones hurt so much that your missing muscles spasm!!</span>")
M.say("OOF!!", forced=/datum/reagent/toxin/bonehurtingjuice)
bp.receive_damage(200, 0, 0) //But I don't think we should
else
to_chat(M, "<span class='warning'>Your missing arm aches from wherever you left it.</span>")
M.emote("sigh")
return ..()