-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathother_reagents.dm
343 lines (288 loc) · 12.4 KB
/
other_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
/datum/reagent/uranium
name = "Uranium"
description = "A jade-green metallic chemical element in the actinide series, weakly radioactive."
reagent_state = SOLID
color = "#5E9964" //this used to be silver, but liquid uranium can still be green and it's more easily noticeable as uranium like this so why bother?
taste_description = "the inside of a reactor"
/// How much tox damage to deal per tick
var/tox_damage = 0.5
material = /datum/material/uranium
/datum/reagent/uranium/affect_blood(mob/living/carbon/C, removed)
C.adjustToxLoss(tox_damage * removed, FALSE, cause_of_death = "Uranium poisoning")
return TRUE
/datum/reagent/uranium/expose_turf(turf/exposed_turf, reac_volume)
. = ..()
if((reac_volume < 3) || isspaceturf(exposed_turf))
return
var/obj/effect/decal/cleanable/greenglow/glow = locate() in exposed_turf.contents
if(!glow)
glow = new(exposed_turf)
if(!QDELETED(glow))
glow.reagents.add_reagent(type, reac_volume)
//Mutagenic chem side-effects.
/datum/reagent/uranium/on_hydroponics_apply(datum/plant_tick/plant_tick, datum/reagents/chems, volume, obj/machinery/hydroponics/mytray, mob/user)
if(volume >= 1)
plant_tick.radiation_damage += 2
plant_tick.mutation_power += 0.2
/datum/reagent/uranium/infuse_plant(datum/plant/plant_datum, datum/plant_gene_holder/plant_dna, list/damage_ref)
. = ..()
plant_dna.try_mutate_stats(1)
plant_dna.try_activate_latent_gene(2)
return plant_dna.try_mutate_type(1)
/datum/reagent/uranium/radium
name = "Radium"
description = "Radium is an alkaline earth metal. It is extremely radioactive."
reagent_state = SOLID
color = "#00CC00" // ditto
taste_description = "the colour blue and regret"
tox_damage = 1
material = null
/datum/reagent/uranium/radium/on_hydroponics_apply(datum/plant_tick/plant_tick, datum/reagents/chems, volume, obj/machinery/hydroponics/mytray, mob/user)
if(volume >= 1)
plant_tick.radiation_damage += 2
plant_tick.mutation_power += 0.2
/datum/reagent/fuel/oil
name = "Oil"
description = "Burns in a small smoky fire, can be used to get Ash."
reagent_state = LIQUID
color = "#2D2D2D"
taste_description = "oil"
burning_temperature = 1200//Oil is crude
burning_volume = 0.05 //but has a lot of hydrocarbons
addiction_types = null
/datum/reagent/stable_plasma
name = "Stable Plasma"
description = "Non-flammable plasma locked into a liquid form that cannot ignite or become gaseous/solid."
reagent_state = LIQUID
color = "#2D2D2D"
taste_description = "bitterness"
taste_mult = 1.5
/datum/reagent/stable_plasma/affect_blood(mob/living/carbon/C, removed)
C.adjustPlasma(10 * removed)
/datum/reagent/fuel
name = "Welding Fuel"
description = "Required for welders. Flammable."
color = "#660000" // rgb: 102, 0, 0
taste_description = "gross metal"
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption."
penetrates_skin = NONE
burning_temperature = 1725 //more refined than oil
burning_volume = 0.2
addiction_types = list(/datum/addiction/alcohol = 4)
/datum/reagent/fuel/expose_mob(mob/living/exposed_mob, reac_volume, exposed_temperature = T20C, datum/reagents/source, methods=TOUCH, show_message = TRUE, touch_protection = 0)//Splashing people with welding fuel to make them easy to ignite!
. = ..()
if(methods & (TOUCH|VAPOR))
exposed_mob.adjust_fire_stacks(reac_volume / 10)
/datum/reagent/fuel/affect_blood(mob/living/carbon/C, removed)
C.adjustToxLoss(0.5 * removed, 0, cause_of_death = "Ingesting fuel")
return TRUE
/datum/reagent/space_cleaner
name = "Space Cleaner"
description = "A compound used to clean things."
color = "#A5F0EE" // rgb: 165, 240, 238
taste_description = "sourness"
reagent_weight = 0.6 //so it sprays further
penetrates_skin = NONE
touch_met = 2
var/clean_types = CLEAN_WASH
chemical_flags = REAGENT_CLEANS
/datum/reagent/space_cleaner/expose_obj(obj/exposed_obj, reac_volume)
. = ..()
exposed_obj?.wash(clean_types)
/datum/reagent/space_cleaner/expose_turf(turf/exposed_turf, reac_volume)
. = ..()
if(reac_volume < 1)
return
exposed_turf.wash(clean_types)
for(var/am in exposed_turf)
var/atom/movable/movable_content = am
if(ismopable(movable_content)) // Mopables will be cleaned anyways by the turf wash
continue
movable_content.wash(clean_types)
for(var/mob/living/simple_animal/slime/exposed_slime in exposed_turf)
exposed_slime.adjustToxLoss(rand(5,10))
exposed_turf.AddComponent(/datum/component/smell, INTENSITY_STRONG, SCENT_ODOR, "bleach", 3, 5 MINUTES)
/datum/reagent/space_cleaner/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message=TRUE, touch_protection=0)
. = ..()
if(methods & (TOUCH|VAPOR))
exposed_mob.wash(clean_types)
/datum/reagent/space_cleaner/affect_touch(mob/living/carbon/C, removed)
C.adjustFireLoss(2 * removed, 0) // burns
return TRUE
/datum/reagent/space_cleaner/ez_clean
name = "EZ Clean"
description = "A powerful, acidic cleaner sold by Waffle Co. Affects organic matter while leaving other objects unaffected."
metabolization_rate = 0.5
taste_description = "acid"
penetrates_skin = VAPOR
/datum/reagent/space_cleaner/ez_clean/affect_blood(mob/living/carbon/C, removed)
C.adjustBruteLoss(1.665*removed, FALSE)
C.adjustFireLoss(1.665*removed, FALSE)
C.adjustToxLoss(1.665*removed, FALSE, cause_of_death = "Ingesting space cleaner")
return TRUE
/datum/reagent/space_cleaner/ez_clean/expose_mob(mob/living/exposed_mob, reac_volume, exposed_temperature = T20C, datum/reagents/source, methods=TOUCH, show_message = TRUE, touch_protection = 0)
. = ..()
if((methods & (TOUCH|VAPOR)) && !issilicon(exposed_mob))
exposed_mob.adjustBruteLoss(1.5)
exposed_mob.adjustFireLoss(1.5)
///Used for clownery
/datum/reagent/lube
name = "Space Lube"
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
color = "#009CA8" // rgb: 0, 156, 168
taste_description = "cherry" // by popular demand
var/lube_kind = TURF_WET_LUBE ///What kind of slipperiness gets added to turfs
/datum/reagent/lube/expose_turf(turf/open/exposed_turf, reac_volume)
. = ..()
if(!istype(exposed_turf))
return
if(reac_volume >= 1)
exposed_turf.MakeSlippery(lube_kind, 15 SECONDS, min(reac_volume * 2 SECONDS, 120))
///Stronger kind of lube. Applies TURF_WET_SUPERLUBE.
/datum/reagent/lube/superlube
name = "Super Duper Lube"
description = "This \[REDACTED\] has been outlawed after the incident on \[DATA EXPUNGED\]."
lube_kind = TURF_WET_SUPERLUBE
chemical_flags = REAGENT_NO_RANDOM_RECIPE
/datum/reagent/stimulants
name = "Stimulants"
description = "Increases stun resistance and movement speed in addition to restoring minor damage and weakness. Overdose causes weakness and toxin damage."
color = "#78008C"
metabolization_rate = 0.2
overdose_threshold = 60
chemical_flags = REAGENT_NO_RANDOM_RECIPE
addiction_types = list(/datum/addiction/stimulants = 4) //0.8 per 2 seconds
/datum/reagent/stimulants/on_mob_metabolize(mob/living/carbon/C, class)
if(class != CHEM_BLOOD)
return
ADD_TRAIT(C, TRAIT_STUNRESISTANCE, CHEM_TRAIT_SOURCE(class))
ADD_TRAIT(C, TRAIT_STIMULANTS, CHEM_TRAIT_SOURCE(class))
C.add_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
/datum/reagent/stimulants/affect_blood(mob/living/carbon/C, removed)
APPLY_CHEM_EFFECT(C, CE_STIMULANT, 10)
/datum/reagent/stimulants/on_mob_end_metabolize(mob/living/carbon/C, class)
if(class != CHEM_BLOOD)
return
REMOVE_TRAIT(C, TRAIT_STUNRESISTANCE, CHEM_TRAIT_SOURCE(class))
REMOVE_TRAIT(C, TRAIT_STIMULANTS, CHEM_TRAIT_SOURCE(class))
if(!HAS_TRAIT(C, TRAIT_STIMULANTS))
C.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
/datum/reagent/stimulants/affect_blood(mob/living/carbon/C, removed)
if(C.health < 50 && C.health > 0)
C.adjustOxyLoss(-1 * removed, 0)
C.adjustToxLoss(-1 * removed, 0)
C.adjustBruteLoss(-1 * removed, 0)
C.adjustFireLoss(-1 * removed, 0)
C.AdjustAllImmobility(-60 * removed)
C.stamina.adjust(30 * removed)
. = TRUE
/datum/reagent/stimulants/overdose_process(mob/living/carbon/C)
if(prob(25))
C.stamina.adjust(2.5)
C.adjustToxLoss(1, 0, cause_of_death = "Stimulant overdose")
C.losebreath++
. = TRUE
/datum/reagent/ash
name = "Ash"
description = "Supposedly phoenixes rise from these, but you've never seen it."
reagent_state = LIQUID
color = "#515151"
taste_description = "ash"
/datum/reagent/ash/on_hydroponics_apply(datum/plant_tick/plant_tick, datum/reagents/chems, volume, obj/machinery/hydroponics/mytray, mob/user)
if(volume >= 1)
plant_tick.plant_growth_delta += 0.4
plant_tick.plant_health_delta += 0.2
// [Original ants concept by Keelin on Goon]
/datum/reagent/ants
name = "Ants"
description = "A genetic crossbreed between ants and termites, their bites land at a 3 on the Schmidt Pain Scale."
reagent_state = SOLID
color = "#993333"
taste_mult = 1.3
taste_description = "tiny legs scuttling down the back of your throat"
metabolization_rate = 1 //1u per second
glass_name = "glass of ants"
glass_desc = "Bottoms up...?"
/// How much damage the ants are going to be doing (rises with each tick the ants are in someone's body)
var/ant_damage = 0
/// Tells the debuff how many ants we are being covered with.
var/amount_left = 0
/// List of possible common statements to scream when eating ants
var/static/list/ant_screams = list(
"THEY'RE UNDER MY SKIN!!",
"GET THEM OUT OF ME!!",
"HOLY HELL THEY BURN!!",
"MY GOD THEY'RE INSIDE ME!!",
"GET THEM OUT!!"
)
/datum/reagent/ants/affect_ingest(mob/living/carbon/C, removed)
C.adjustBruteLoss(max(0.1, round((ant_damage * 0.025),0.1)), FALSE) //Scales with time. Roughly 32 brute with 100u.
ant_damage++
if(ant_damage < 5) // Makes ant food a little more appetizing, since you won't be screaming as much.
return TRUE
if(prob(10))
spawn(-1)
C.say(pick(ant_screams), forced = /datum/reagent/ants)
if(prob(30))
spawn(-1)
C.emote("scream")
if(prob(5)) // Stuns, but purges ants.
C.vomit(rand(5,10), FALSE, TRUE, 1, TRUE, FALSE, purge_ratio = 1)
. = TRUE
..()
/datum/reagent/ants/affect_touch(mob/living/carbon/C, removed)
return affect_ingest(C, removed)
/datum/reagent/ants/on_mob_end_metabolize(mob/living/living_anthill)
ant_damage = 0
to_chat(living_anthill, "<span class='notice'>You feel like the last of the ants are out of your system.</span>")
return ..()
/datum/reagent/ants/affect_touch(mob/living/carbon/C, removed)
. = ..()
C.apply_status_effect(/datum/status_effect/ants, round(removed, 0.1))
/datum/reagent/ants/expose_obj(obj/exposed_obj, reac_volume)
. = ..()
var/turf/open/my_turf = exposed_obj.loc // No dumping ants on an object in a storage slot
if(!istype(my_turf)) //Are we actually in an open turf?
return
var/static/list/accepted_types = typecacheof(list(/obj/machinery/atmospherics, /obj/structure/cable, /obj/structure/disposalpipe))
if(!accepted_types[exposed_obj.type]) // Bypasses pipes, vents, and cables to let people create ant mounds on top easily.
return
expose_turf(my_turf, reac_volume)
/datum/reagent/ants/expose_turf(turf/exposed_turf, reac_volume)
. = ..()
if(!istype(exposed_turf) || isspaceturf(exposed_turf)) // Is the turf valid
return
if((reac_volume <= 10)) // Makes sure people don't duplicate ants.
return
var/obj/effect/decal/cleanable/ants/pests = locate() in exposed_turf.contents
if(!pests)
pests = new(exposed_turf)
var/spilled_ants = (round(reac_volume,1) - 5) // To account for ant decals giving 3-5 ants on initialize.
pests.reagents.add_reagent(/datum/reagent/ants, spilled_ants)
pests.update_ant_damage()
/datum/reagent/phenol
name = "Phenol"
description = "An aromatic ring of carbon with a hydroxyl group. A useful precursor to some medicines, but has no healing properties on its own."
reagent_state = LIQUID
color = "#E7EA91"
taste_description = "acid"
/datum/reagent/acetone
name = "Acetone"
description = "A colorless liquid solvent used in chemical synthesis."
taste_description = "acid"
reagent_state = LIQUID
color = "#808080"
metabolization_rate = 0.04
value = DISPENSER_REAGENT_VALUE
/datum/reagent/acetone/affect_blood(mob/living/carbon/C, removed)
C.adjustToxLoss(removed * 3, FALSE, cause_of_death = "Ingesting acetone")
return TRUE
/datum/reagent/acetone/expose_obj(obj/exposed_obj, reac_volume, exposed_temperature)
. = ..()
if(istype(exposed_obj, /obj/item/paper))
var/obj/item/paper/paperaffected = exposed_obj
paperaffected.clearpaper()
to_chat(usr, span_notice("The solution dissolves the ink on the paper."))
return