Revert "12/21 modernizations from TG live"
This commit is contained in:
@@ -5,8 +5,8 @@
|
||||
// Extra heat affects the temperature of the mixture, and may cause it to react in different ways.
|
||||
|
||||
|
||||
/proc/chem_splash(turf/epicenter, affected_range = 3, list/datum/reagents/reactants = list(), extra_heat = 0, threatscale = 1, adminlog = 1)
|
||||
if(!isturf(epicenter) || !reactants.len || threatscale <= 0)
|
||||
proc/chem_splash(turf/epicenter, affected_range = 3, list/datum/reagents/reactants = list(), extra_heat = 0, threatscale = 1, adminlog = 1)
|
||||
if(!istype(epicenter, /turf) || !reactants.len || threatscale <= 0)
|
||||
return
|
||||
var/has_reagents
|
||||
var/total_reagents
|
||||
@@ -46,12 +46,12 @@
|
||||
turflist.Remove(T)
|
||||
turflist.Add(T) // we move the purely diagonal turfs to the end of the list.
|
||||
for(var/turf/T in turflist)
|
||||
if(accessible[T]) continue
|
||||
for(var/thing in T.GetAtmosAdjacentTurfs(alldir = TRUE))
|
||||
var/turf/NT = thing
|
||||
if(T in accessible) continue
|
||||
for(var/turf/NT in orange(1, T))
|
||||
if(!(NT in accessible)) continue
|
||||
if(!(get_dir(T,NT) in cardinal)) continue
|
||||
accessible[T] = 1
|
||||
if(!NT.CanAtmosPass(T)) continue
|
||||
accessible |= T
|
||||
break
|
||||
var/list/reactable = accessible
|
||||
for(var/turf/T in accessible)
|
||||
@@ -63,8 +63,7 @@
|
||||
if(!reactable.len) //Nothing to react with. Probably means we're in nullspace.
|
||||
return
|
||||
var/fraction = 0.5/accessible.len // In a 100u mix. A small grenade spreads ~1.5u units per affected tile. A large grenade spreads ~0.75u, and a bomb spreads ~0.4u
|
||||
for(var/thing in reactable)
|
||||
var/atom/A = thing
|
||||
for(var/atom/A in reactable)
|
||||
splash_holder.reaction(A, TOUCH, fraction)
|
||||
|
||||
qdel(splash_holder)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
if(!istype(reagent_list))
|
||||
return
|
||||
|
||||
var/mixcolor
|
||||
var/color
|
||||
var/vol_counter = 0
|
||||
var/vol_temp
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
vol_temp = R.volume
|
||||
vol_counter += vol_temp
|
||||
|
||||
if(!mixcolor)
|
||||
mixcolor = R.color
|
||||
if(!color)
|
||||
color = R.color
|
||||
|
||||
else if (length(mixcolor) >= length(R.color))
|
||||
mixcolor = BlendRGB(mixcolor, R.color, vol_temp/vol_counter)
|
||||
else if (length(color) >= length(R.color))
|
||||
color = BlendRGB(color, R.color, vol_temp/vol_counter)
|
||||
else
|
||||
mixcolor = BlendRGB(R.color, mixcolor, vol_temp/vol_counter)
|
||||
color = BlendRGB(R.color, color, vol_temp/vol_counter)
|
||||
|
||||
return mixcolor
|
||||
return color
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
var/const/TOUCH = 1 //splashing
|
||||
var/const/INGEST = 2 //ingestion
|
||||
@@ -12,7 +12,7 @@ var/const/INJECT = 5 //injection
|
||||
var/list/datum/reagent/reagent_list = new/list()
|
||||
var/total_volume = 0
|
||||
var/maximum_volume = 100
|
||||
var/datum/my_atom = null
|
||||
var/atom/my_atom = null
|
||||
var/chem_temp = 150
|
||||
var/last_tick = 1
|
||||
var/addiction_tick = 1
|
||||
@@ -61,32 +61,30 @@ var/const/INJECT = 5 //injection
|
||||
/datum/reagents/Destroy()
|
||||
. = ..()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
qdel(R)
|
||||
cached_reagents.Cut()
|
||||
cached_reagents = null
|
||||
reagent_list.Cut()
|
||||
reagent_list = null
|
||||
if(my_atom && my_atom.reagents == src)
|
||||
my_atom.reagents = null
|
||||
|
||||
/datum/reagents/proc/remove_any(amount = 1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/total_transfered = 0
|
||||
var/current_list_element = 1
|
||||
|
||||
current_list_element = rand(1, cached_reagents.len)
|
||||
current_list_element = rand(1, reagent_list.len)
|
||||
|
||||
while(total_transfered != amount)
|
||||
if(total_transfered >= amount)
|
||||
break
|
||||
if(total_volume <= 0 || !cached_reagents.len)
|
||||
if(total_volume <= 0 || !reagent_list.len)
|
||||
break
|
||||
|
||||
if(current_list_element > cached_reagents.len)
|
||||
if(current_list_element > reagent_list.len)
|
||||
current_list_element = 1
|
||||
|
||||
var/datum/reagent/R = cached_reagents[current_list_element]
|
||||
var/datum/reagent/R = reagent_list[current_list_element]
|
||||
remove_reagent(R.id, 1)
|
||||
|
||||
current_list_element++
|
||||
@@ -97,10 +95,9 @@ var/const/INJECT = 5 //injection
|
||||
return total_transfered
|
||||
|
||||
/datum/reagents/proc/remove_all(amount = 1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
if(total_volume > 0)
|
||||
var/part = amount / total_volume
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
remove_reagent(R.id, R.volume * part)
|
||||
|
||||
@@ -109,10 +106,9 @@ var/const/INJECT = 5 //injection
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/get_master_reagent_name()
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/name
|
||||
var/max_volume = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume > max_volume)
|
||||
max_volume = R.volume
|
||||
@@ -121,10 +117,9 @@ var/const/INJECT = 5 //injection
|
||||
return name
|
||||
|
||||
/datum/reagents/proc/get_master_reagent_id()
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/id
|
||||
var/max_volume = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume > max_volume)
|
||||
max_volume = R.volume
|
||||
@@ -133,12 +128,8 @@ var/const/INJECT = 5 //injection
|
||||
return id
|
||||
|
||||
/datum/reagents/proc/trans_to(obj/target, amount=1, multiplier=1, preserve_data=1, no_react = 0)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
|
||||
var/list/cached_reagents = reagent_list
|
||||
if(!target || !total_volume)
|
||||
return
|
||||
if(amount < 0)
|
||||
return
|
||||
|
||||
var/datum/reagents/R
|
||||
if(istype(target, /datum/reagents))
|
||||
R = target
|
||||
@@ -149,7 +140,7 @@ var/const/INJECT = 5 //injection
|
||||
amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
|
||||
var/part = amount / src.total_volume
|
||||
var/trans_data = null
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/T = reagent
|
||||
var/transfer_amount = T.volume * part
|
||||
if(preserve_data)
|
||||
@@ -165,18 +156,15 @@ var/const/INJECT = 5 //injection
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/copy_to(obj/target, amount=1, multiplier=1, preserve_data=1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
if(!target)
|
||||
return
|
||||
if(!target.reagents || src.total_volume<=0)
|
||||
return
|
||||
if(amount < 0)
|
||||
return
|
||||
var/datum/reagents/R = target.reagents
|
||||
amount = min(min(amount, total_volume), R.maximum_volume-R.total_volume)
|
||||
var/part = amount / total_volume
|
||||
var/trans_data = null
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/T = reagent
|
||||
var/copy_amount = T.volume * part
|
||||
if(preserve_data)
|
||||
@@ -190,41 +178,68 @@ var/const/INJECT = 5 //injection
|
||||
return amount
|
||||
|
||||
/datum/reagents/proc/trans_id_to(obj/target, reagent, amount=1, preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
|
||||
var/list/cached_reagents = reagent_list
|
||||
if (!target)
|
||||
return
|
||||
if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
|
||||
return
|
||||
if(amount < 0)
|
||||
return
|
||||
|
||||
var/datum/reagents/R = target.reagents
|
||||
if(src.get_reagent_amount(reagent)<amount)
|
||||
amount = src.get_reagent_amount(reagent)
|
||||
amount = min(amount, R.maximum_volume-R.total_volume)
|
||||
var/trans_data = null
|
||||
for (var/CR in cached_reagents)
|
||||
var/datum/reagent/current_reagent = CR
|
||||
for (var/datum/reagent/current_reagent in src.reagent_list)
|
||||
if(current_reagent.id == reagent)
|
||||
if(preserve_data)
|
||||
trans_data = current_reagent.data
|
||||
R.add_reagent(current_reagent.id, amount, trans_data, src.chem_temp)
|
||||
remove_reagent(current_reagent.id, amount, 1)
|
||||
src.remove_reagent(current_reagent.id, amount, 1)
|
||||
break
|
||||
|
||||
src.update_total()
|
||||
R.update_total()
|
||||
R.handle_reactions()
|
||||
//src.handle_reactions() Don't need to handle reactions on the source since you're (presumably isolating and) transferring a specific reagent.
|
||||
return amount
|
||||
|
||||
/*
|
||||
if (!target) return
|
||||
var/total_transfered = 0
|
||||
var/current_list_element = 1
|
||||
var/datum/reagents/R = target.reagents
|
||||
var/trans_data = null
|
||||
//if(R.total_volume + amount > R.maximum_volume) return 0
|
||||
|
||||
current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
|
||||
|
||||
while(total_transfered != amount)
|
||||
if(total_transfered >= amount) break //Better safe than sorry.
|
||||
if(total_volume <= 0 || !reagent_list.len) break
|
||||
if(R.total_volume >= R.maximum_volume) break
|
||||
|
||||
if(current_list_element > reagent_list.len) current_list_element = 1
|
||||
var/datum/reagent/current_reagent = reagent_list[current_list_element]
|
||||
if(preserve_data)
|
||||
trans_data = current_reagent.data
|
||||
R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
|
||||
src.remove_reagent(current_reagent.id, 1)
|
||||
|
||||
current_list_element++
|
||||
total_transfered++
|
||||
src.update_total()
|
||||
R.update_total()
|
||||
R.handle_reactions()
|
||||
handle_reactions()
|
||||
|
||||
return total_transfered
|
||||
*/
|
||||
|
||||
/datum/reagents/proc/metabolize(mob/living/carbon/C, can_overdose = 0)
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/list/cached_addictions = addiction_list
|
||||
if(C)
|
||||
chem_temp = C.bodytemperature
|
||||
handle_reactions()
|
||||
var/need_mob_update = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(!R.holder)
|
||||
continue
|
||||
@@ -238,13 +253,13 @@ var/const/INJECT = 5 //injection
|
||||
R.overdosed = 1
|
||||
need_mob_update += R.overdose_start(C)
|
||||
if(R.addiction_threshold)
|
||||
if(R.volume >= R.addiction_threshold && !is_type_in_list(R, cached_addictions))
|
||||
if(R.volume >= R.addiction_threshold && !is_type_in_list(R, addiction_list))
|
||||
var/datum/reagent/new_reagent = new R.type()
|
||||
cached_addictions.Add(new_reagent)
|
||||
addiction_list.Add(new_reagent)
|
||||
if(R.overdosed)
|
||||
need_mob_update += R.overdose_process(C)
|
||||
if(is_type_in_list(R,cached_addictions))
|
||||
for(var/addiction in cached_addictions)
|
||||
if(is_type_in_list(R,addiction_list))
|
||||
for(var/addiction in addiction_list)
|
||||
var/datum/reagent/A = addiction
|
||||
if(istype(R, A))
|
||||
A.addiction_stage = -15 // you're satisfied for a good while.
|
||||
@@ -253,7 +268,7 @@ var/const/INJECT = 5 //injection
|
||||
if(can_overdose)
|
||||
if(addiction_tick == 6)
|
||||
addiction_tick = 1
|
||||
for(var/addiction in cached_addictions)
|
||||
for(var/addiction in addiction_list)
|
||||
var/datum/reagent/R = addiction
|
||||
if(C && R)
|
||||
R.addiction_stage++
|
||||
@@ -268,7 +283,7 @@ var/const/INJECT = 5 //injection
|
||||
need_mob_update += R.addiction_act_stage4(C)
|
||||
if(40 to INFINITY)
|
||||
C << "<span class='notice'>You feel like you've gotten over your need for [R.name].</span>"
|
||||
cached_addictions.Remove(R)
|
||||
addiction_list.Remove(R)
|
||||
addiction_tick++
|
||||
if(C && need_mob_update) //some of the metabolized reagents had effects on the mob that requires some updates.
|
||||
C.updatehealth()
|
||||
@@ -277,12 +292,11 @@ var/const/INJECT = 5 //injection
|
||||
update_total()
|
||||
|
||||
/datum/reagents/process()
|
||||
var/list/cached_reagents = reagent_list
|
||||
if(flags & REAGENT_NOREACT)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.on_tick()
|
||||
|
||||
@@ -297,146 +311,129 @@ var/const/INJECT = 5 //injection
|
||||
flags |= REAGENT_NOREACT
|
||||
|
||||
/datum/reagents/proc/conditional_update_move(atom/A, Running = 0)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.on_move (A, Running)
|
||||
update_total()
|
||||
|
||||
/datum/reagents/proc/conditional_update(atom/A)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.on_update (A)
|
||||
update_total()
|
||||
|
||||
/datum/reagents/proc/handle_reactions()
|
||||
var/list/cached_reagents = reagent_list
|
||||
var/list/cached_reactions = chemical_reactions_list
|
||||
var/datum/cached_my_atom = my_atom
|
||||
if(flags & REAGENT_NOREACT)
|
||||
return //Yup, no reactions here. No siree.
|
||||
|
||||
var/reaction_occurred = 0
|
||||
var/reaction_occured = 0
|
||||
do
|
||||
reaction_occurred = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
reaction_occured = 0
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
for(var/reaction in cached_reactions[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
|
||||
for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
|
||||
if(!reaction)
|
||||
continue
|
||||
|
||||
var/datum/chemical_reaction/C = reaction
|
||||
var/list/cached_required_reagents = C.required_reagents
|
||||
var/total_required_reagents = cached_required_reagents.len
|
||||
var/total_required_reagents = C.required_reagents.len
|
||||
var/total_matching_reagents = 0
|
||||
var/list/cached_required_catalysts = C.required_catalysts
|
||||
var/total_required_catalysts = cached_required_catalysts.len
|
||||
var/total_required_catalysts = C.required_catalysts.len
|
||||
var/total_matching_catalysts= 0
|
||||
var/matching_container = 0
|
||||
var/matching_other = 0
|
||||
var/list/multipliers = new/list()
|
||||
var/required_temp = C.required_temp
|
||||
var/is_cold_recipe = C.is_cold_recipe
|
||||
var/meets_temp_requirement = 0
|
||||
|
||||
var/list/cached_results = C.results
|
||||
|
||||
for(var/B in cached_required_reagents)
|
||||
if(!has_reagent(B, cached_required_reagents[B]))
|
||||
for(var/B in C.required_reagents)
|
||||
if(!has_reagent(B, C.required_reagents[B]))
|
||||
break
|
||||
total_matching_reagents++
|
||||
multipliers += round(get_reagent_amount(B) / cached_required_reagents[B])
|
||||
for(var/B in cached_required_catalysts)
|
||||
if(!has_reagent(B, cached_required_catalysts[B]))
|
||||
multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
|
||||
for(var/B in C.required_catalysts)
|
||||
if(!has_reagent(B, C.required_catalysts[B]))
|
||||
break
|
||||
total_matching_catalysts++
|
||||
if(cached_my_atom)
|
||||
if(!C.required_container)
|
||||
matching_container = 1
|
||||
|
||||
else
|
||||
if(cached_my_atom.type == C.required_container)
|
||||
matching_container = 1
|
||||
if (isliving(cached_my_atom)) //Makes it so certain chemical reactions don't occur in mobs
|
||||
if (C.mob_react)
|
||||
return
|
||||
if(!C.required_other)
|
||||
matching_other = 1
|
||||
if(!C.required_container)
|
||||
matching_container = 1
|
||||
|
||||
else if(istype(cached_my_atom, /obj/item/slime_extract))
|
||||
var/obj/item/slime_extract/M = cached_my_atom
|
||||
|
||||
if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
|
||||
matching_other = 1
|
||||
else
|
||||
if(!C.required_container)
|
||||
if(my_atom.type == C.required_container)
|
||||
matching_container = 1
|
||||
if(!C.required_other)
|
||||
if (isliving(my_atom)) //Makes it so certain chemical reactions don't occur in mobs
|
||||
if (C.mob_react)
|
||||
return
|
||||
if(!C.required_other)
|
||||
matching_other = 1
|
||||
|
||||
else if(istype(my_atom, /obj/item/slime_extract))
|
||||
var/obj/item/slime_extract/M = my_atom
|
||||
|
||||
if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
|
||||
matching_other = 1
|
||||
|
||||
if(required_temp == 0 || (is_cold_recipe && chem_temp <= required_temp) || (!is_cold_recipe && chem_temp >= required_temp))
|
||||
meets_temp_requirement = 1
|
||||
if(required_temp == 0)
|
||||
required_temp = chem_temp
|
||||
|
||||
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && meets_temp_requirement)
|
||||
|
||||
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp >= required_temp)
|
||||
var/multiplier = min(multipliers)
|
||||
for(var/B in cached_required_reagents)
|
||||
remove_reagent(B, (multiplier * cached_required_reagents[B]), safety = 1)
|
||||
for(var/B in C.required_reagents)
|
||||
remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
|
||||
|
||||
for(var/P in C.results)
|
||||
feedback_add_details("chemical_reaction", "[P]|[cached_results[P]*multiplier]")
|
||||
var/created_volume = C.result_amount*multiplier
|
||||
if(C.result)
|
||||
feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
|
||||
multiplier = max(multiplier, 1) //this shouldnt happen ...
|
||||
add_reagent(P, cached_results[P]*multiplier, null, chem_temp)
|
||||
add_reagent(C.result, C.result_amount*multiplier, null, chem_temp)
|
||||
|
||||
var/list/seen = viewers(4, get_turf(my_atom))
|
||||
if(cached_my_atom)
|
||||
if(!ismob(cached_my_atom)) // No bubbling mobs
|
||||
if(C.mix_sound)
|
||||
playsound(get_turf(cached_my_atom), C.mix_sound, 80, 1)
|
||||
|
||||
if(!istype(my_atom, /mob)) // No bubbling mobs
|
||||
if(C.mix_sound)
|
||||
playsound(get_turf(my_atom), C.mix_sound, 80, 1)
|
||||
for(var/mob/M in seen)
|
||||
M << "<span class='notice'>\icon[my_atom] [C.mix_message]</span>"
|
||||
|
||||
if(istype(my_atom, /obj/item/slime_extract))
|
||||
var/obj/item/slime_extract/ME2 = my_atom
|
||||
ME2.Uses--
|
||||
if(ME2.Uses <= 0) // give the notification that the slime core is dead
|
||||
for(var/mob/M in seen)
|
||||
M << "<span class='notice'>\icon[my_atom] [C.mix_message]</span>"
|
||||
M << "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>"
|
||||
ME2.name = "used slime extract"
|
||||
ME2.desc = "This extract has been used up."
|
||||
|
||||
if(istype(cached_my_atom, /obj/item/slime_extract))
|
||||
var/obj/item/slime_extract/ME2 = my_atom
|
||||
ME2.Uses--
|
||||
if(ME2.Uses <= 0) // give the notification that the slime core is dead
|
||||
for(var/mob/M in seen)
|
||||
M << "<span class='notice'>\icon[my_atom] \The [my_atom]'s power is consumed in the reaction.</span>"
|
||||
ME2.name = "used slime extract"
|
||||
ME2.desc = "This extract has been used up."
|
||||
|
||||
C.on_reaction(src, multiplier)
|
||||
reaction_occurred = 1
|
||||
C.on_reaction(src, created_volume)
|
||||
reaction_occured = 1
|
||||
break
|
||||
|
||||
while(reaction_occurred)
|
||||
while(reaction_occured)
|
||||
update_total()
|
||||
return 0
|
||||
|
||||
/datum/reagents/proc/isolate_reagent(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
for(var/_reagent in reagent_list)
|
||||
var/datum/reagent/R = _reagent
|
||||
if(R.id != reagent)
|
||||
del_reagent(R.id)
|
||||
update_total()
|
||||
|
||||
/datum/reagents/proc/del_reagent(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
for(var/_reagent in reagent_list)
|
||||
var/datum/reagent/R = _reagent
|
||||
if(R.id == reagent)
|
||||
if(my_atom && isliving(my_atom))
|
||||
if(istype(my_atom, /mob/living))
|
||||
var/mob/living/M = my_atom
|
||||
R.on_mob_delete(M)
|
||||
qdel(R)
|
||||
reagent_list -= R
|
||||
update_total()
|
||||
if(my_atom)
|
||||
my_atom.on_reagent_change()
|
||||
check_ignoreslow(my_atom)
|
||||
check_gofast(my_atom)
|
||||
check_goreallyfast(my_atom)
|
||||
my_atom.on_reagent_change()
|
||||
check_ignoreslow(my_atom)
|
||||
check_gofast(my_atom)
|
||||
check_goreallyfast(my_atom)
|
||||
return 1
|
||||
|
||||
/datum/reagents/proc/check_ignoreslow(mob/M)
|
||||
@@ -461,9 +458,8 @@ var/const/INJECT = 5 //injection
|
||||
M.status_flags &= ~GOTTAGOREALLYFAST
|
||||
|
||||
/datum/reagents/proc/update_total()
|
||||
var/list/cached_reagents = reagent_list
|
||||
total_volume = 0
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.volume < 0.1)
|
||||
del_reagent(R.id)
|
||||
@@ -473,68 +469,54 @@ var/const/INJECT = 5 //injection
|
||||
return 0
|
||||
|
||||
/datum/reagents/proc/clear_reagents()
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
del_reagent(R.id)
|
||||
return 0
|
||||
|
||||
/datum/reagents/proc/reaction(atom/A, method = TOUCH, volume_modifier = 1, show_message = 1)
|
||||
var/react_type
|
||||
if(isliving(A))
|
||||
react_type = "LIVING"
|
||||
var/touch_protection = 0
|
||||
if(method == VAPOR)
|
||||
var/mob/living/L = A
|
||||
touch_protection = L.get_permeability_protection()
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.reaction_mob(A, method, R.volume * volume_modifier, show_message, touch_protection)
|
||||
else if(isturf(A))
|
||||
react_type = "TURF"
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.reaction_turf(A, R.volume * volume_modifier, show_message)
|
||||
else if(isobj(A))
|
||||
react_type = "OBJ"
|
||||
else
|
||||
return
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
var/datum/reagent/R = reagent
|
||||
switch(react_type)
|
||||
if("LIVING")
|
||||
var/touch_protection = 0
|
||||
if(method == VAPOR)
|
||||
var/mob/living/L = A
|
||||
touch_protection = L.get_permeability_protection()
|
||||
R.reaction_mob(A, method, R.volume * volume_modifier, show_message, touch_protection)
|
||||
if("TURF")
|
||||
R.reaction_turf(A, R.volume * volume_modifier, show_message)
|
||||
if("OBJ")
|
||||
R.reaction_obj(A, R.volume * volume_modifier, show_message)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
R.reaction_obj(A, R.volume * volume_modifier, show_message)
|
||||
|
||||
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, no_react = 0)
|
||||
if(!isnum(amount) || !amount)
|
||||
return FALSE
|
||||
|
||||
if(amount < 0)
|
||||
return FALSE
|
||||
|
||||
var/list/cached_reagents = reagent_list
|
||||
return 1
|
||||
update_total()
|
||||
if(total_volume + amount > maximum_volume)
|
||||
amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
|
||||
chem_temp = round(((amount * reagtemp) + (total_volume * chem_temp)) / (total_volume + amount)) //equalize with new chems
|
||||
|
||||
for(var/A in cached_reagents)
|
||||
for(var/A in reagent_list)
|
||||
|
||||
var/datum/reagent/R = A
|
||||
if (R.id == reagent)
|
||||
R.volume += amount
|
||||
update_total()
|
||||
if(my_atom)
|
||||
my_atom.on_reagent_change()
|
||||
my_atom.on_reagent_change()
|
||||
R.on_merge(data)
|
||||
if(!no_react)
|
||||
handle_reactions()
|
||||
return TRUE
|
||||
return 0
|
||||
|
||||
var/datum/reagent/D = chemical_reagents_list[reagent]
|
||||
if(D)
|
||||
|
||||
var/datum/reagent/R = new D.type(data)
|
||||
cached_reagents += R
|
||||
reagent_list += R
|
||||
R.holder = src
|
||||
R.volume = amount
|
||||
if(data)
|
||||
@@ -542,15 +524,17 @@ var/const/INJECT = 5 //injection
|
||||
R.on_new(data)
|
||||
|
||||
update_total()
|
||||
if(my_atom)
|
||||
my_atom.on_reagent_change()
|
||||
my_atom.on_reagent_change()
|
||||
if(!no_react)
|
||||
handle_reactions()
|
||||
return TRUE
|
||||
|
||||
return 0
|
||||
else
|
||||
WARNING("[my_atom] attempted to add a reagent called ' [reagent] ' which doesn't exist. ([usr])")
|
||||
return FALSE
|
||||
|
||||
if(!no_react)
|
||||
handle_reactions()
|
||||
|
||||
return 1
|
||||
|
||||
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15)
|
||||
for(var/r_id in list_reagents)
|
||||
@@ -558,39 +542,27 @@ var/const/INJECT = 5 //injection
|
||||
add_reagent(r_id, amt, data)
|
||||
|
||||
/datum/reagents/proc/remove_reagent(reagent, amount, safety)//Added a safety check for the trans_id_to
|
||||
|
||||
|
||||
if(isnull(amount))
|
||||
amount = 0
|
||||
throw EXCEPTION("null amount passed to reagent code")
|
||||
return FALSE
|
||||
|
||||
amount = INFINITY
|
||||
|
||||
if(!isnum(amount))
|
||||
return FALSE
|
||||
return 1
|
||||
|
||||
if(amount < 0)
|
||||
return FALSE
|
||||
|
||||
var/list/cached_reagents = reagent_list
|
||||
|
||||
for(var/A in cached_reagents)
|
||||
for(var/A in reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if (R.id == reagent)
|
||||
//clamp the removal amount to be between current reagent amount
|
||||
//and zero, to prevent removing more than the holder has stored
|
||||
amount = Clamp(amount, 0, R.volume)
|
||||
R.volume -= amount
|
||||
update_total()
|
||||
if(!safety)//So it does not handle reactions when it need not to
|
||||
handle_reactions()
|
||||
if(my_atom)
|
||||
my_atom.on_reagent_change()
|
||||
return TRUE
|
||||
my_atom.on_reagent_change()
|
||||
return 0
|
||||
|
||||
return FALSE
|
||||
return 1
|
||||
|
||||
/datum/reagents/proc/has_reagent(reagent, amount = -1)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
for(var/_reagent in reagent_list)
|
||||
var/datum/reagent/R = _reagent
|
||||
if (R.id == reagent)
|
||||
if(!amount)
|
||||
@@ -604,8 +576,7 @@ var/const/INJECT = 5 //injection
|
||||
return 0
|
||||
|
||||
/datum/reagents/proc/get_reagent_amount(reagent)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/_reagent in cached_reagents)
|
||||
for(var/_reagent in reagent_list)
|
||||
var/datum/reagent/R = _reagent
|
||||
if (R.id == reagent)
|
||||
return R.volume
|
||||
@@ -614,8 +585,7 @@ var/const/INJECT = 5 //injection
|
||||
|
||||
/datum/reagents/proc/get_reagents()
|
||||
var/list/names = list()
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
names += R.name
|
||||
|
||||
@@ -623,10 +593,10 @@ var/const/INJECT = 5 //injection
|
||||
|
||||
/datum/reagents/proc/remove_all_type(reagent_type, amount, strict = 0, safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
|
||||
if(!isnum(amount)) return 1
|
||||
var/list/cached_reagents = reagent_list
|
||||
|
||||
var/has_removed_reagent = 0
|
||||
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
var/matches = 0
|
||||
// Switch between how we check the reagent type
|
||||
@@ -645,16 +615,14 @@ var/const/INJECT = 5 //injection
|
||||
|
||||
//two helper functions to preserve data across reactions (needed for xenoarch)
|
||||
/datum/reagents/proc/get_data(reagent_id)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.id == reagent_id)
|
||||
//world << "proffering a data-carrying reagent ([reagent_id])"
|
||||
return R.data
|
||||
|
||||
/datum/reagents/proc/set_data(reagent_id, new_data)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/reagent in cached_reagents)
|
||||
for(var/reagent in reagent_list)
|
||||
var/datum/reagent/R = reagent
|
||||
if(R.id == reagent_id)
|
||||
//world << "reagent data set ([reagent_id])"
|
||||
@@ -682,8 +650,7 @@ var/const/INJECT = 5 //injection
|
||||
return trans_data
|
||||
|
||||
/datum/reagents/proc/get_reagent(type)
|
||||
var/list/cached_reagents = reagent_list
|
||||
. = locate(type) in cached_reagents
|
||||
. = locate(type) in reagent_list
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -691,18 +658,8 @@ var/const/INJECT = 5 //injection
|
||||
|
||||
// Convenience proc to create a reagents holder for an atom
|
||||
// Max vol is maximum volume of holder
|
||||
/datum/proc/create_reagents(max_vol)
|
||||
/atom/proc/create_reagents(max_vol)
|
||||
if(reagents)
|
||||
qdel(reagents)
|
||||
reagents = new/datum/reagents(max_vol)
|
||||
reagents.my_atom = src
|
||||
|
||||
/proc/get_random_reagent_id() // Returns a random reagent ID minus blacklisted reagents
|
||||
var/static/list/random_reagents = list()
|
||||
if(!random_reagents.len)
|
||||
for(var/thing in subtypesof(/datum/reagent))
|
||||
var/datum/reagent/R = thing
|
||||
if(initial(R.can_synth))
|
||||
random_reagents += initial(R.id)
|
||||
var/picked_reagent = pick(random_reagents)
|
||||
return picked_reagent
|
||||
@@ -8,7 +8,6 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 40
|
||||
interact_offline = 1
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/energy = 100
|
||||
var/max_energy = 100
|
||||
var/amount = 30
|
||||
@@ -85,16 +84,9 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_dispenser/contents_explosion(severity, target)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
|
||||
/obj/machinery/chem_dispenser/handle_atom_del(atom/A)
|
||||
..()
|
||||
if(A == beaker)
|
||||
beaker = null
|
||||
cut_overlays()
|
||||
/obj/machinery/chem_dispenser/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = default_state)
|
||||
@@ -161,7 +153,7 @@
|
||||
. = TRUE
|
||||
if("eject")
|
||||
if(beaker)
|
||||
beaker.forceMove(loc)
|
||||
beaker.loc = loc
|
||||
beaker = null
|
||||
cut_overlays()
|
||||
. = TRUE
|
||||
@@ -188,7 +180,7 @@
|
||||
icon_beaker = image('icons/obj/chemical.dmi', src, "disp_beaker") //randomize beaker overlay position.
|
||||
icon_beaker.pixel_x = rand(-10,5)
|
||||
add_overlay(icon_beaker)
|
||||
else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag))
|
||||
else if(user.a_intent != "harm" && !istype(I, /obj/item/weapon/card/emag))
|
||||
user << "<span class='warning'>You can't load \the [I] into the machine!</span>"
|
||||
else
|
||||
return ..()
|
||||
@@ -292,7 +284,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_dispenser/constructable/on_deconstruction()
|
||||
/obj/machinery/chem_dispenser/constructable/deconstruction()
|
||||
if(beaker)
|
||||
beaker.loc = loc
|
||||
beaker = null
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
icon_state = "mixer0b"
|
||||
use_power = 1
|
||||
idle_power_usage = 40
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/target_temperature = 300
|
||||
var/heater_coefficient = 0.10
|
||||
@@ -69,7 +68,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_heater/on_deconstruction()
|
||||
/obj/machinery/chem_heater/deconstruction()
|
||||
eject_beaker()
|
||||
|
||||
/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
icon_state = "mixer0"
|
||||
use_power = 1
|
||||
idle_power_usage = 20
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/obj/item/weapon/storage/pill_bottle/bottle = null
|
||||
var/mode = 1
|
||||
@@ -15,13 +14,16 @@
|
||||
var/screen = "home"
|
||||
var/analyzeVars[0]
|
||||
var/useramount = 30 // Last used amount
|
||||
use_auto_lights = 1
|
||||
light_power_on = 1
|
||||
light_range_on = 2
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/machinery/chem_master/New()
|
||||
create_reagents(100)
|
||||
add_overlay("waitlight")
|
||||
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_master(null)
|
||||
B.apply_default_parts(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/circuitboard/machine/chem_master
|
||||
name = "circuit board (ChemMaster 3000)"
|
||||
@@ -56,24 +58,7 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_master/contents_explosion(severity, target)
|
||||
..()
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
if(bottle)
|
||||
bottle.ex_act(severity, target)
|
||||
|
||||
/obj/machinery/chem_master/handle_atom_del(atom/A)
|
||||
..()
|
||||
if(A == beaker)
|
||||
beaker = null
|
||||
reagents.clear_reagents()
|
||||
icon_state = "mixer0"
|
||||
else if(A == bottle)
|
||||
bottle = null
|
||||
|
||||
|
||||
/obj/machinery/chem_master/blob_act(obj/structure/blob/B)
|
||||
/obj/machinery/chem_master/blob_act(obj/effect/blob/B)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
@@ -201,9 +186,8 @@
|
||||
. = TRUE
|
||||
else if (amount == -1) // -1 means custom amount
|
||||
useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null
|
||||
if (useramount > 0)
|
||||
beaker.reagents.trans_id_to(src, id, useramount)
|
||||
. = TRUE
|
||||
beaker.reagents.trans_id_to(src, id, useramount)
|
||||
. = TRUE
|
||||
|
||||
if("transferFromBuffer")
|
||||
var/id = params["id"]
|
||||
@@ -222,18 +206,17 @@
|
||||
|
||||
if("createPill")
|
||||
var/many = params["many"]
|
||||
if(reagents.total_volume == 0)
|
||||
return
|
||||
if(reagents.total_volume == 0) return
|
||||
if(!condi)
|
||||
var/amount = 1
|
||||
var/vol_each = min(reagents.total_volume, 50)
|
||||
if(text2num(many))
|
||||
amount = Clamp(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many pills?", amount) as num|null), 0, 10)
|
||||
amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many pills?", amount) as num|null), 0), 10)
|
||||
if(!amount)
|
||||
return
|
||||
vol_each = min(reagents.total_volume / amount, 50)
|
||||
var/name = stripped_input(usr,"Name:","Name your pill!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || qdeleted(src) || !usr.canUseTopic(src, be_close=TRUE))
|
||||
if(!name || !reagents.total_volume)
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/pill/P
|
||||
|
||||
@@ -248,7 +231,7 @@
|
||||
reagents.trans_to(P,vol_each)
|
||||
else
|
||||
var/name = stripped_input(usr, "Name:", "Name your pack!", reagents.get_master_reagent_name(), MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || qdeleted(src) || !usr.canUseTopic(src, be_close=TRUE))
|
||||
if(!name || !reagents.total_volume)
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/pack/P = new/obj/item/weapon/reagent_containers/food/condiment/pack(src.loc)
|
||||
|
||||
@@ -260,17 +243,16 @@
|
||||
|
||||
if("createPatch")
|
||||
var/many = params["many"]
|
||||
if(reagents.total_volume == 0)
|
||||
return
|
||||
if(reagents.total_volume == 0) return
|
||||
var/amount = 1
|
||||
var/vol_each = min(reagents.total_volume, 40)
|
||||
if(text2num(many))
|
||||
amount = Clamp(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many patches?", amount) as num|null), 0, 10)
|
||||
amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many patches?", amount) as num|null), 0), 10)
|
||||
if(!amount)
|
||||
return
|
||||
vol_each = min(reagents.total_volume / amount, 40)
|
||||
var/name = stripped_input(usr,"Name:","Name your patch!", "[reagents.get_master_reagent_name()] ([vol_each]u)", MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || qdeleted(src) || !usr.canUseTopic(src, be_close=TRUE))
|
||||
if(!name || !reagents.total_volume)
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/pill/P
|
||||
|
||||
@@ -283,40 +265,21 @@
|
||||
. = TRUE
|
||||
|
||||
if("createBottle")
|
||||
var/many = params["many"]
|
||||
if(reagents.total_volume == 0)
|
||||
var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
|
||||
if(!name)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/reagent_containers/P
|
||||
if(condi)
|
||||
var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || qdeleted(src) || !usr.canUseTopic(src, be_close=TRUE))
|
||||
return
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/P = new(src.loc)
|
||||
P.originalname = name
|
||||
P.name = trim("[name] bottle")
|
||||
reagents.trans_to(P, P.volume)
|
||||
var/obj/item/weapon/reagent_containers/food/condiment/C = new(src.loc)
|
||||
C.originalname = name
|
||||
P = C
|
||||
else
|
||||
var/amount_full = 0
|
||||
var/vol_part = min(reagents.total_volume, 30)
|
||||
if(text2num(many))
|
||||
amount_full = round(reagents.total_volume / 30)
|
||||
vol_part = reagents.total_volume % 30
|
||||
var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN)
|
||||
if(!name || !reagents.total_volume || !src || qdeleted(src) || !usr.canUseTopic(src, be_close=TRUE))
|
||||
return
|
||||
P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
|
||||
|
||||
var/obj/item/weapon/reagent_containers/glass/bottle/P
|
||||
for(var/i = 0; i < amount_full; i++)
|
||||
P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
|
||||
P.pixel_x = rand(-7, 7) //random position
|
||||
P.pixel_y = rand(-7, 7)
|
||||
P.name = trim("[name] bottle")
|
||||
reagents.trans_to(P, 30)
|
||||
|
||||
if(vol_part)
|
||||
P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
|
||||
P.name = trim("[name] bottle")
|
||||
reagents.trans_to(P, vol_part)
|
||||
P.pixel_x = rand(-7, 7) //random position
|
||||
P.pixel_y = rand(-7, 7)
|
||||
P.name = trim("[name] bottle")
|
||||
reagents.trans_to(P, P.volume)
|
||||
. = TRUE
|
||||
|
||||
if("analyze")
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
circuit = /obj/item/weapon/circuitboard/computer/pandemic
|
||||
use_power = 1
|
||||
idle_power_usage = 20
|
||||
resistance_flags = ACID_PROOF
|
||||
var/temp_html = ""
|
||||
var/wait = null
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
@@ -47,7 +46,7 @@
|
||||
wait = 1
|
||||
update_icon()
|
||||
spawn(waittime)
|
||||
wait = null
|
||||
src.wait = null
|
||||
update_icon()
|
||||
playsound(src.loc, 'sound/machines/ping.ogg', 30, 1)
|
||||
|
||||
@@ -97,8 +96,8 @@
|
||||
B.reagents.add_reagent("vaccine", 15, list(vaccine_type))
|
||||
replicator_cooldown(200)
|
||||
else
|
||||
temp_html = "The replicator is not ready yet."
|
||||
updateUsrDialog()
|
||||
src.temp_html = "The replicator is not ready yet."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else if (href_list["create_virus_culture"])
|
||||
if(!wait)
|
||||
@@ -126,31 +125,24 @@
|
||||
B.name = "[name] culture bottle"
|
||||
B.desc = "A small bottle. Contains [D.agent] culture in synthblood medium."
|
||||
B.reagents.add_reagent("blood",20,data)
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
temp_html = "The replicator is not ready yet."
|
||||
updateUsrDialog()
|
||||
src.temp_html = "The replicator is not ready yet."
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else if (href_list["empty_beaker"])
|
||||
beaker.reagents.clear_reagents()
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else if (href_list["eject"])
|
||||
beaker.forceMove(get_turf(loc))
|
||||
beaker:loc = src.loc
|
||||
beaker = null
|
||||
icon_state = "mixer0"
|
||||
updateUsrDialog()
|
||||
return
|
||||
else if (href_list["emptyeject_beaker"])
|
||||
beaker.reagents.clear_reagents()
|
||||
beaker.forceMove(get_turf(loc))
|
||||
beaker = null
|
||||
icon_state = "mixer0"
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else if(href_list["clear"])
|
||||
temp_html = ""
|
||||
updateUsrDialog()
|
||||
src.temp_html = ""
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
else if(href_list["name_disease"])
|
||||
var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN)
|
||||
@@ -164,15 +156,15 @@
|
||||
A.AssignName(new_name)
|
||||
for(var/datum/disease/advance/AD in SSdisease.processing)
|
||||
AD.Refresh()
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
else
|
||||
usr << browse(null, "window=pandemic")
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
add_fingerprint(usr)
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/pandemic/attack_hand(mob/user)
|
||||
@@ -180,7 +172,7 @@
|
||||
return
|
||||
user.set_machine(src)
|
||||
var/dat = ""
|
||||
if(temp_html)
|
||||
if(src.temp_html)
|
||||
dat = "[src.temp_html]<BR><BR><A href='?src=\ref[src];clear=1'>Main Menu</A>"
|
||||
else if(!beaker)
|
||||
dat += "Please insert beaker.<BR>"
|
||||
@@ -227,12 +219,9 @@
|
||||
dat += "<b>Description: </b> [(D.desc||"none")]<BR>"
|
||||
dat += "<b>Spread:</b> [(D.spread_text||"none")]<BR>"
|
||||
dat += "<b>Possible cure:</b> [(D.cure_text||"none")]<BR><BR>"
|
||||
|
||||
if(istype(D, /datum/disease/advance))
|
||||
var/datum/disease/advance/A = D
|
||||
dat += "<b>Stealth:</b> [(A.totalStealth())]<BR>"
|
||||
dat += "<b>Resistance:</b> [(A.totalResistance())]<BR>"
|
||||
dat += "<b>Stage Speed:</b> [(A.totalStageSpeed())]<BR>"
|
||||
dat += "<b>Transmission:</b> [(A.totalTransmittable())]<BR><BR>"
|
||||
dat += "<b>Symptoms:</b> "
|
||||
var/english_symptoms = list()
|
||||
for(var/datum/symptom/S in A.symptoms)
|
||||
@@ -268,8 +257,7 @@
|
||||
dat += "nothing<BR>"
|
||||
else
|
||||
dat += "nothing<BR>"
|
||||
dat += "<BR><A href='?src=\ref[src];eject=1'>Eject beaker</A>[((R.total_volume&&R.reagent_list.len) ? "-- <A href='?src=\ref[src];empty_beaker=1'>Empty beaker</A>":"")]"
|
||||
dat += "[((R.total_volume&&R.reagent_list.len) ? "-- <A href='?src=\ref[src];emptyeject_beaker=1'>Empty and Eject beaker</A>":"")]<BR>"
|
||||
dat += "<BR><A href='?src=\ref[src];eject=1'>Eject beaker</A>[((R.total_volume&&R.reagent_list.len) ? "-- <A href='?src=\ref[src];empty_beaker=1'>Empty beaker</A>":"")]<BR>"
|
||||
dat += "<A href='?src=\ref[user];mach_close=pandemic'>Close</A>"
|
||||
|
||||
user << browse("<TITLE>[src.name]</TITLE><BR>[dat]", "window=pandemic;size=575x400")
|
||||
@@ -291,12 +279,12 @@
|
||||
beaker = I
|
||||
beaker.loc = src
|
||||
user << "<span class='notice'>You add the beaker to the machine.</span>"
|
||||
updateUsrDialog()
|
||||
src.updateUsrDialog()
|
||||
icon_state = "mixer1"
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/pandemic/on_deconstruction()
|
||||
/obj/machinery/computer/pandemic/deconstruction()
|
||||
if(beaker)
|
||||
beaker.loc = get_turf(src)
|
||||
..()
|
||||
@@ -9,7 +9,6 @@
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
pass_flags = PASSTABLE
|
||||
resistance_flags = ACID_PROOF
|
||||
var/operating = 0
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/limit = 10
|
||||
@@ -27,7 +26,7 @@
|
||||
/obj/item/stack/sheet/mineral/silver = list("silver" = 20),
|
||||
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
|
||||
/obj/item/weapon/grown/nettle/basic = list("sacid" = 0),
|
||||
/obj/item/weapon/grown/nettle/death = list("facid" = 0, "sacid" = 0),
|
||||
/obj/item/weapon/grown/nettle/death = list("facid" = 0),
|
||||
/obj/item/weapon/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0),
|
||||
|
||||
//Blender Stuff
|
||||
@@ -47,7 +46,6 @@
|
||||
|
||||
|
||||
//All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.!
|
||||
/obj/item/slime_extract = list(),
|
||||
/obj/item/weapon/reagent_containers/pill = list(),
|
||||
/obj/item/weapon/reagent_containers/food = list(),
|
||||
/obj/item/weapon/reagent_containers/honeycomb = list()
|
||||
@@ -70,9 +68,6 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0),
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0),
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0),
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0),
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0),
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0),
|
||||
)
|
||||
|
||||
var/list/dried_items = list(
|
||||
@@ -86,36 +81,14 @@
|
||||
var/list/holdingitems = list()
|
||||
|
||||
/obj/machinery/reagentgrinder/New()
|
||||
..()
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
return
|
||||
|
||||
/obj/machinery/reagentgrinder/Destroy()
|
||||
if(beaker)
|
||||
qdel(beaker)
|
||||
beaker = null
|
||||
return ..()
|
||||
|
||||
/obj/machinery/reagentgrinder/contents_explosion(severity, target)
|
||||
if(beaker)
|
||||
beaker.ex_act(severity, target)
|
||||
|
||||
/obj/machinery/reagentgrinder/handle_atom_del(atom/A)
|
||||
..()
|
||||
if(A == beaker)
|
||||
beaker = null
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/reagentgrinder/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/metal (loc, 3)
|
||||
qdel(src)
|
||||
..()
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
return
|
||||
|
||||
/obj/machinery/reagentgrinder/update_icon()
|
||||
if(beaker)
|
||||
icon_state = "juicer1"
|
||||
else
|
||||
icon_state = "juicer0"
|
||||
icon_state = "juicer"+num2text(!isnull(beaker))
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/reagentgrinder/attackby(obj/item/I, mob/user, params)
|
||||
if(default_unfasten_wrench(user, I))
|
||||
@@ -161,7 +134,7 @@
|
||||
return 1
|
||||
|
||||
if (!is_type_in_list(I, blend_items) && !is_type_in_list(I, juice_items))
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.a_intent == "harm")
|
||||
return ..()
|
||||
else
|
||||
user << "<span class='warning'>Cannot refine into a reagent!</span>"
|
||||
@@ -432,18 +405,6 @@
|
||||
break
|
||||
remove_object(O)
|
||||
|
||||
//Slime Extractis
|
||||
for (var/obj/item/slime_extract/O in holdingitems)
|
||||
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
|
||||
break
|
||||
var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume
|
||||
if (O.reagents != null)
|
||||
var/amount = O.reagents.total_volume
|
||||
O.reagents.trans_to(beaker, min(amount, space))
|
||||
if (O.Uses > 0)
|
||||
beaker.reagents.add_reagent("slimejelly",min(20, space))
|
||||
remove_object(O)
|
||||
|
||||
//Everything else - Transfers reagents from it into beaker
|
||||
for (var/obj/item/weapon/reagent_containers/O in holdingitems)
|
||||
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
|
||||
|
||||
@@ -193,9 +193,8 @@ About Recipes:
|
||||
name & id
|
||||
Should be pretty obvious.
|
||||
|
||||
results
|
||||
This var contains a list of the id(s) of the resulting reagents and their result amounts.
|
||||
I recommend you set this to the total volume of all required reagent.
|
||||
result
|
||||
This var contains the id of the resulting reagent.
|
||||
|
||||
required_reagents
|
||||
This is a list of ids of the required reagents.
|
||||
@@ -209,6 +208,10 @@ About Recipes:
|
||||
for the reaction. However, unlike required_reagents, catalysts are NOT consumed.
|
||||
They mearly have to be present in the container.
|
||||
|
||||
result_amount
|
||||
This is the amount of the resulting reagent this recipe will produce.
|
||||
I recommend you set this to the total volume of all required reagent.
|
||||
|
||||
required_container
|
||||
The container the recipe has to take place in in order to happen. Leave this blank/null
|
||||
if you want the reaction to happen anywhere.
|
||||
|
||||
@@ -54,20 +54,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
return
|
||||
|
||||
/datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel.
|
||||
if(!isliving(M))
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
|
||||
if(method in list(TOUCH, VAPOR, PATCH))
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 15)
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/power_multiplier = boozepwr / 65 // Weak alcohol has less sterilizing power
|
||||
|
||||
for(var/s in C.surgeries)
|
||||
var/datum/surgery/S = s
|
||||
S.success_multiplier = max(0.10*power_multiplier, S.success_multiplier)
|
||||
// +10% success propability on each step, useful while operating in less-than-perfect conditions
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer
|
||||
@@ -86,11 +76,11 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M)
|
||||
if(M.color != color)
|
||||
M.add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY)
|
||||
M.color = color
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green/on_mob_delete(mob/living/M)
|
||||
M.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, color)
|
||||
M.color = initial(M.color)
|
||||
|
||||
/datum/reagent/consumable/ethanol/kahlua
|
||||
name = "Kahlua"
|
||||
@@ -150,7 +140,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
|
||||
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/M)
|
||||
if(M.getBruteLoss() && prob(10))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
return ..() || .
|
||||
|
||||
@@ -196,7 +186,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/wine
|
||||
name = "Wine"
|
||||
id = "wine"
|
||||
description = "A premium alcoholic beverage made from distilled grape juice."
|
||||
description = "An premium alcoholic beverage made from distilled grape juice."
|
||||
color = "#7E4043" // rgb: 126, 64, 67
|
||||
boozepwr = 35
|
||||
|
||||
@@ -217,7 +207,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/cognac
|
||||
name = "Cognac"
|
||||
id = "cognac"
|
||||
description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
||||
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
||||
color = "#AB3C05" // rgb: 171, 60, 5
|
||||
boozepwr = 75
|
||||
|
||||
@@ -236,14 +226,14 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/hooch
|
||||
name = "Hooch"
|
||||
id = "hooch"
|
||||
description = "Either someone's failure at cocktail making or attempt in alcohol production. In any case, do you really want to drink that?"
|
||||
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 100
|
||||
|
||||
/datum/reagent/consumable/ethanol/ale
|
||||
name = "Ale"
|
||||
id = "ale"
|
||||
description = "A dark alcoholic beverage made with malted barley and yeast."
|
||||
description = "A dark alchoholic beverage made by malted barley and yeast."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 65
|
||||
|
||||
@@ -341,7 +331,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/brave_bull
|
||||
name = "Brave Bull"
|
||||
id = "bravebull"
|
||||
description = "It's just as effective as Dutch-Courage!"
|
||||
description = "It's just as effective as Dutch-Courage!."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 80
|
||||
|
||||
@@ -599,7 +589,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
id = "andalusia"
|
||||
description = "A nice, strangely named drink."
|
||||
description = "A nice, strange named drink."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 40
|
||||
|
||||
@@ -680,8 +670,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
boozepwr = 60
|
||||
|
||||
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/M)
|
||||
if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
if( ( istype(M, /mob/living/carbon/human) && M.job in list("Clown") ) || istype(M, /mob/living/carbon/monkey) )
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
. = 1
|
||||
return ..() || .
|
||||
|
||||
@@ -694,8 +684,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
boozepwr = 59 //Proof that clowns are better than mimes right here
|
||||
|
||||
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/M)
|
||||
if(ishuman(M) && M.job in list("Mime"))
|
||||
M.heal_bodypart_damage(1,1)
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
|
||||
M.heal_organ_damage(1,1)
|
||||
. = 1
|
||||
return ..() || .
|
||||
|
||||
@@ -725,7 +715,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber!
|
||||
name = "Fetching Fizz"
|
||||
id = "fetching_fizz"
|
||||
description = "Whiskey sour/iron/uranium mixture resulting in a highly magnetic slurry. Mild alcohol content." //Requires no alcohol to make but has alcohol anyway because ~magic~
|
||||
description = "Whiskey sour/iron/uranium mixture resulting in highly magnetic slurry. Mild alcohol content." //Requires no alcohol to make but has alcohol anyway because ~magic~
|
||||
color = rgb(255, 91, 15)
|
||||
boozepwr = 10
|
||||
metabolization_rate = 0.1 * REAGENTS_METABOLISM
|
||||
@@ -760,126 +750,3 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
description = "Unidentifiable mixture. Unmeasurably high alcohol content."
|
||||
color = rgb(51, 19, 3) //Sickly brown
|
||||
boozepwr = 300 //I warned you
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb
|
||||
name = "Atomic Bomb"
|
||||
id = "atomicbomb"
|
||||
description = "Nuclear proliferation never tasted so good."
|
||||
color = "#666300" // rgb: 102, 99, 0
|
||||
boozepwr = 0 //custom drunk effect
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/M)
|
||||
M.set_drugginess(50)
|
||||
M.confused = max(M.confused+2,0)
|
||||
M.Dizzy(10)
|
||||
if (!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
switch(current_cycle)
|
||||
if(51 to 200)
|
||||
M.Sleeping(5, 0)
|
||||
. = 1
|
||||
if(201 to INFINITY)
|
||||
M.AdjustSleeping(2, 0)
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/gargle_blaster
|
||||
name = "Pan-Galactic Gargle Blaster"
|
||||
id = "gargleblaster"
|
||||
description = "Whoah, this stuff looks volatile!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
boozepwr = 0 //custom drunk effect
|
||||
|
||||
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M)
|
||||
M.dizziness +=6
|
||||
switch(current_cycle)
|
||||
if(15 to 45)
|
||||
if(!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
if(45 to 55)
|
||||
if(prob(50))
|
||||
M.confused = max(M.confused+3,0)
|
||||
if(55 to 200)
|
||||
M.set_drugginess(55)
|
||||
if(200 to INFINITY)
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/neurotoxin
|
||||
name = "Neurotoxin"
|
||||
id = "neurotoxin"
|
||||
description = "A strong neurotoxin that puts the subject into a death-like state."
|
||||
color = "#2E2E61" // rgb: 46, 46, 97
|
||||
boozepwr = 0 //custom drunk effect
|
||||
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.Weaken(3, 1, 0)
|
||||
M.dizziness +=6
|
||||
switch(current_cycle)
|
||||
if(15 to 45)
|
||||
if(!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
if(45 to 55)
|
||||
if(prob(50))
|
||||
M.confused = max(M.confused+3,0)
|
||||
if(55 to 200)
|
||||
M.set_drugginess(55)
|
||||
if(200 to INFINITY)
|
||||
M.adjustToxLoss(2, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/hippies_delight
|
||||
name = "Hippie's Delight"
|
||||
id = "hippiesdelight"
|
||||
description = "You just don't get it maaaan."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
nutriment_factor = 0
|
||||
boozepwr = 0 //custom drunk effect
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M)
|
||||
if (!M.slurring)
|
||||
M.slurring = 1
|
||||
switch(current_cycle)
|
||||
if(1 to 5)
|
||||
M.Dizzy(10)
|
||||
M.set_drugginess(30)
|
||||
if(prob(10))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(5 to 10)
|
||||
M.Jitter(20)
|
||||
M.Dizzy(20)
|
||||
M.set_drugginess(45)
|
||||
if(prob(20))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if (10 to 200)
|
||||
M.Jitter(40)
|
||||
M.Dizzy(40)
|
||||
M.set_drugginess(60)
|
||||
if(prob(30))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(200 to INFINITY)
|
||||
M.Jitter(60)
|
||||
M.Dizzy(60)
|
||||
M.set_drugginess(75)
|
||||
if(prob(40))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(prob(30))
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/eggnog
|
||||
name = "Eggnog"
|
||||
id = "eggnog"
|
||||
description = "For enjoying the most wonderful time of the year."
|
||||
color = "#fcfdc6" // rgb: 252, 253, 198
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
boozepwr = 1
|
||||
@@ -5,51 +5,73 @@
|
||||
color = "#FFFFFF"
|
||||
var/complementary_color = "#000000" //a color that's complementary to the normal blob color
|
||||
var/shortdesc = null //just damage and on_mob effects, doesn't include special, blob-tile only effects
|
||||
var/effectdesc = null //any long, blob-tile specific effects
|
||||
var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp."
|
||||
var/analyzerdesceffect = "N/A"
|
||||
var/blobbernaut_message = "slams" //blobbernaut attack verb
|
||||
var/message = "The blob strikes you" //message sent to any mob hit by the blob
|
||||
var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/blob/proc/send_message(mob/living/M)
|
||||
var/totalmessage = message
|
||||
if(message_living && !issilicon(M))
|
||||
totalmessage += message_living
|
||||
totalmessage += "!"
|
||||
M << "<span class='userdanger'>[totalmessage]</span>"
|
||||
|
||||
/datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob))
|
||||
return 0 //the dead, and blob mobs, don't cause reactions
|
||||
return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume.
|
||||
|
||||
/datum/reagent/blob/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) //when the blob takes damage, do this
|
||||
/datum/reagent/blob/proc/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) //when the blob takes damage, do this
|
||||
return damage
|
||||
|
||||
/datum/reagent/blob/proc/death_reaction(obj/structure/blob/B, damage_flag) //when a blob dies, do this
|
||||
/datum/reagent/blob/proc/death_reaction(obj/effect/blob/B, cause) //when a blob dies, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) //when the blob expands, do this
|
||||
/datum/reagent/blob/proc/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T) //when the blob expands, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/tesla_reaction(obj/structure/blob/B, power) //when the blob is hit by a tesla bolt, do this
|
||||
/datum/reagent/blob/proc/tesla_reaction(obj/effect/blob/B, power) //when the blob is hit by a tesla bolt, do this
|
||||
return 1 //return 0 to ignore damage
|
||||
|
||||
/datum/reagent/blob/proc/extinguish_reaction(obj/structure/blob/B) //when the blob is hit with water, do this
|
||||
/datum/reagent/blob/proc/extinguish_reaction(obj/effect/blob/B) //when the blob is hit with water, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/emp_reaction(obj/structure/blob/B, severity) //when the blob is hit with an emp, do this
|
||||
/datum/reagent/blob/proc/emp_reaction(obj/effect/blob/B, severity) //when the blob is hit with an emp, do this
|
||||
return
|
||||
|
||||
//does low toxin damage, but creates fragile spores when expanding or killed by weak attacks
|
||||
/datum/reagent/blob/sporing_pods
|
||||
name = "Sporing Pods"
|
||||
id = "sporing_pods"
|
||||
description = "will do very low toxin damage and produce fragile spores when killed or on expanding."
|
||||
shortdesc = "will do very low toxin damage."
|
||||
analyzerdescdamage = "Does very low toxin damage."
|
||||
analyzerdesceffect = "Produces spores when expanding and when killed."
|
||||
color = "#E88D5D"
|
||||
complementary_color = "#5DB8E8"
|
||||
message_living = ", and you feel sick"
|
||||
|
||||
/datum/reagent/blob/sporing_pods/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.2*reac_volume, TOX)
|
||||
|
||||
/datum/reagent/blob/sporing_pods/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(!isnull(cause) && damage <= 20 && original_health - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 30% chance of a shitty spore.
|
||||
B.visible_message("<span class='warning'><b>A spore floats free of the blob!</b></span>")
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc)
|
||||
BS.overmind = B.overmind
|
||||
BS.update_icons()
|
||||
B.overmind.blob_mobs.Add(BS)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/sporing_pods/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
if(prob(12))
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(T)
|
||||
BS.overmind = B.overmind
|
||||
BS.update_icons()
|
||||
newB.overmind.blob_mobs.Add(BS)
|
||||
|
||||
//does brute damage but can replicate when damaged and has a chance of expanding again
|
||||
/datum/reagent/blob/replicating_foam
|
||||
name = "Replicating Foam"
|
||||
id = "replicating_foam"
|
||||
description = "will do medium brute damage and occasionally expand again when expanding."
|
||||
description = "will do medium brute damage, take increased brute damage, and expand when burned."
|
||||
shortdesc = "will do medium brute damage."
|
||||
effectdesc = "will also expand when attacked with burn damage, but takes more brute damage."
|
||||
analyzerdescdamage = "Does medium brute damage."
|
||||
analyzerdesceffect = "Expands when attacked with burn damage, will occasionally expand again when expanding, and is fragile to brute damage."
|
||||
color = "#7B5A57"
|
||||
@@ -57,61 +79,30 @@
|
||||
|
||||
/datum/reagent/blob/replicating_foam/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.7*reac_volume, BRUTE)
|
||||
M.apply_damage(0.5*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/replicating_foam/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
/datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
var/effectivedamage = damage
|
||||
if(damage_type == BRUTE)
|
||||
damage = damage * 2
|
||||
else if(damage_type == BURN && damage > 0 && B.obj_integrity - damage > 0 && prob(60))
|
||||
var/obj/structure/blob/newB = B.expand(null, null, 0)
|
||||
effectivedamage = damage * 2
|
||||
if(damage_type == BURN && effectivedamage > 0 && original_health - effectivedamage > 0 && prob(75))
|
||||
var/obj/effect/blob/newB = B.expand(null, null, 0)
|
||||
if(newB)
|
||||
newB.obj_integrity = B.obj_integrity - damage
|
||||
newB.health = original_health - effectivedamage
|
||||
newB.check_health(cause)
|
||||
newB.update_icon()
|
||||
return ..()
|
||||
return effectivedamage
|
||||
|
||||
/datum/reagent/blob/replicating_foam/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O)
|
||||
/datum/reagent/blob/replicating_foam/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
if(prob(30))
|
||||
newB.expand(null, null, 0) //do it again!
|
||||
|
||||
//does massive brute and burn damage, but can only expand manually
|
||||
/datum/reagent/blob/networked_fibers
|
||||
name = "Networked Fibers"
|
||||
id = "networked_fibers"
|
||||
description = "will do high brute and burn damage but non-manual expansion will only generate resources."
|
||||
shortdesc = "will do high brute and burn damage."
|
||||
effectdesc = "will move your core when manually expanding near it."
|
||||
analyzerdescdamage = "Does high brute and burn damage."
|
||||
analyzerdesceffect = "Is highly mobile and generates resources rapidly."
|
||||
color = "#CDC0B0"
|
||||
complementary_color = "#FFF68F"
|
||||
|
||||
/datum/reagent/blob/networked_fibers/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
if(M)
|
||||
M.apply_damage(0.6*reac_volume, BURN)
|
||||
|
||||
/datum/reagent/blob/networked_fibers/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O)
|
||||
if(!O && newB.overmind)
|
||||
if(!istype(B, /obj/structure/blob/node))
|
||||
newB.overmind.add_points(1)
|
||||
qdel(newB)
|
||||
else
|
||||
var/area/A = get_area(T)
|
||||
if(!isspaceturf(T) && !istype(A, /area/shuttle))
|
||||
for(var/obj/structure/blob/core/C in range(1, newB))
|
||||
if(C.overmind == O)
|
||||
newB.forceMove(get_turf(C))
|
||||
C.forceMove(T)
|
||||
C.setDir(get_dir(newB, C))
|
||||
O.add_points(1)
|
||||
newB.expand() //do it again!
|
||||
|
||||
//does brute damage, shifts away when damaged
|
||||
/datum/reagent/blob/shifting_fragments
|
||||
name = "Shifting Fragments"
|
||||
id = "shifting_fragments"
|
||||
description = "will do medium brute damage."
|
||||
effectdesc = "will also cause blob parts to shift away when attacked."
|
||||
description = "will do medium brute damage and shift away from damage."
|
||||
shortdesc = "will do medium brute damage."
|
||||
analyzerdescdamage = "Does medium brute damage."
|
||||
analyzerdesceffect = "When attacked, may shift away from the attacker."
|
||||
color = "#C8963C"
|
||||
@@ -119,79 +110,123 @@
|
||||
|
||||
/datum/reagent/blob/shifting_fragments/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.7*reac_volume, BRUTE)
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/shifting_fragments/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O)
|
||||
if(istype(B, /obj/structure/blob/normal) || (istype(B, /obj/structure/blob/shield) && prob(25)))
|
||||
/datum/reagent/blob/shifting_fragments/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
if(istype(B, /obj/effect/blob/normal) || (istype(B, /obj/effect/blob/shield) && prob(20)))
|
||||
newB.forceMove(get_turf(B))
|
||||
B.forceMove(T)
|
||||
|
||||
/datum/reagent/blob/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage))
|
||||
/datum/reagent/blob/shifting_fragments/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(cause && damage > 0 && original_health - damage > 0 && prob(40))
|
||||
var/list/blobstopick = list()
|
||||
for(var/obj/structure/blob/OB in orange(1, B))
|
||||
if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id)
|
||||
for(var/obj/effect/blob/OB in orange(1, B))
|
||||
if((istype(OB, /obj/effect/blob/normal) || istype(OB, /obj/effect/blob/shield)) && OB.overmind && OB.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id)
|
||||
blobstopick += OB //as long as the blob picked is valid; ie, a normal or shield blob that has the same chemical as we do, we can swap with it
|
||||
if(blobstopick.len)
|
||||
var/obj/structure/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left
|
||||
var/obj/effect/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left
|
||||
var/turf/T = get_turf(targeted)
|
||||
targeted.forceMove(get_turf(B))
|
||||
B.forceMove(T) //swap the blobs
|
||||
return ..()
|
||||
|
||||
//sets you on fire, does burn damage, explodes into flame when burnt, weak to water
|
||||
/datum/reagent/blob/blazing_oil
|
||||
name = "Blazing Oil"
|
||||
id = "blazing_oil"
|
||||
description = "will do medium burn damage and set targets on fire."
|
||||
effectdesc = "will also release bursts of flame when burnt, but takes damage from water."
|
||||
//does low burn and a lot of stamina damage, immune to tesla bolts, weak to EMP
|
||||
/datum/reagent/blob/energized_fibers
|
||||
name = "Energized Fibers"
|
||||
id = "energized_fibers"
|
||||
description = "will do low burn and high stamina damage and conduct electricity, but is weak to EMPs."
|
||||
shortdesc = "will do low burn and high stamina damage."
|
||||
analyzerdescdamage = "Does low burn damage and massively drains stamina."
|
||||
analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs."
|
||||
color = "#EFD65A"
|
||||
complementary_color = "#5A73EF"
|
||||
blobbernaut_message = "shocks"
|
||||
message_living = ", and you feel a strong tingling sensation"
|
||||
|
||||
/datum/reagent/blob/energized_fibers/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, BURN)
|
||||
if(M)
|
||||
M.adjustStaminaLoss(0.6*reac_volume)
|
||||
|
||||
/datum/reagent/blob/energized_fibers/tesla_reaction(obj/effect/blob/B, power)
|
||||
return 0
|
||||
|
||||
/datum/reagent/blob/energized_fibers/emp_reaction(obj/effect/blob/B, severity)
|
||||
var/damage = rand(30, 50) - severity * rand(10, 15)
|
||||
B.take_damage(damage, BURN)
|
||||
|
||||
//sets you on fire, does burn damage, weak to water
|
||||
/datum/reagent/blob/boiling_oil
|
||||
name = "Boiling Oil"
|
||||
id = "boiling_oil"
|
||||
description = "will do medium burn damage and set targets on fire, but is weak to water."
|
||||
shortdesc = "will do medium burn damage and set targets on fire."
|
||||
analyzerdescdamage = "Does medium burn damage and sets targets on fire."
|
||||
analyzerdesceffect = "Releases fire when burnt, but takes damage from water and other extinguishing liquids."
|
||||
analyzerdesceffect = "Takes damage from water and other extinguishing liquids."
|
||||
color = "#B68D00"
|
||||
complementary_color = "#BE5532"
|
||||
complementary_color = "#0029B6"
|
||||
blobbernaut_message = "splashes"
|
||||
message = "The blob splashes you with burning oil"
|
||||
message_living = ", and you feel your skin char and melt"
|
||||
|
||||
/datum/reagent/blob/blazing_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
/datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.adjust_fire_stacks(round(reac_volume/10))
|
||||
M.IgniteMob()
|
||||
if(M)
|
||||
M.apply_damage(0.8*reac_volume, BURN)
|
||||
M.apply_damage(0.6*reac_volume, BURN)
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/blazing_oil/extinguish_reaction(obj/structure/blob/B)
|
||||
B.take_damage(rand(1, 3), BURN, "energy")
|
||||
/datum/reagent/blob/boiling_oil/extinguish_reaction(obj/effect/blob/B)
|
||||
B.take_damage(rand(1, 3), BURN)
|
||||
|
||||
/datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if(damage_type == BURN && damage_flag != "energy")
|
||||
//does burn and toxin damage, explodes into flame when hit with burn damage
|
||||
/datum/reagent/blob/flammable_goo
|
||||
name = "Flammable Goo"
|
||||
id = "flammable_goo"
|
||||
description = "will do medium burn and toxin damage, make targets flammable, and ignite when burned."
|
||||
shortdesc = "will do medium burn and toxin damage, and make targets flammable."
|
||||
analyzerdescdamage = "Does medium burn damage, medium toxin damage, and makes targets flammable."
|
||||
analyzerdesceffect = "Releases bursts of flame when attacked with burn damage, but takes additional burn damage."
|
||||
color = "#BE5532"
|
||||
complementary_color = "#329BBE"
|
||||
blobbernaut_message = "splashes"
|
||||
message = "The blob splashes you with a thin goo"
|
||||
message_living = ", and you smell a faint, sweet scent"
|
||||
|
||||
/datum/reagent/blob/flammable_goo/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.adjust_fire_stacks(round(reac_volume/8)) //apply, but don't ignite
|
||||
M.apply_damage(0.4*reac_volume, TOX)
|
||||
if(M)
|
||||
M.apply_damage(0.4*reac_volume, BURN)
|
||||
|
||||
/datum/reagent/blob/flammable_goo/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(cause && damage_type == BURN)
|
||||
for(var/turf/open/T in range(1, B))
|
||||
var/obj/structure/blob/C = locate() in T
|
||||
var/obj/effect/blob/C = locate() in T
|
||||
if(!(C && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) && prob(80))
|
||||
PoolOrNew(/obj/effect/hotspot, T)
|
||||
if(damage_flag == "fire")
|
||||
return 0
|
||||
return damage * 1.5
|
||||
return ..()
|
||||
|
||||
//does toxin damage, hallucination, targets think they're not hurt at all
|
||||
//does toxin damage, targets think they're not hurt at all
|
||||
/datum/reagent/blob/regenerative_materia
|
||||
name = "Regenerative Materia"
|
||||
id = "regenerative_materia"
|
||||
description = "will do toxin damage and cause targets to believe they are fully healed."
|
||||
analyzerdescdamage = "Does toxin damage and injects a toxin that causes the target to believe they are fully healed."
|
||||
description = "will do low toxin damage and cause targets to believe they are fully healed."
|
||||
analyzerdescdamage = "Does low toxin damage and injects a toxin that causes the target to believe they are fully healed."
|
||||
color = "#C8A5DC"
|
||||
complementary_color = "#CD7794"
|
||||
complementary_color = "#B9DCA5"
|
||||
message_living = ", and you feel <i>alive</i>"
|
||||
|
||||
/datum/reagent/blob/regenerative_materia/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.adjust_drugginess(reac_volume)
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("regenerative_materia", 0.2*reac_volume)
|
||||
M.reagents.add_reagent("spore", 0.2*reac_volume)
|
||||
M.apply_damage(0.7*reac_volume, TOX)
|
||||
M.apply_damage(0.5*reac_volume, TOX)
|
||||
|
||||
/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/M)
|
||||
M.adjustToxLoss(1*REM)
|
||||
@@ -206,151 +241,211 @@
|
||||
N.hal_screwyhud = 0
|
||||
..()
|
||||
|
||||
//kills sleeping targets and turns them into blob zombies, produces fragile spores when killed or on expanding
|
||||
/datum/reagent/blob/zombifying_pods
|
||||
name = "Zombifying Pods"
|
||||
id = "zombifying_pods"
|
||||
description = "will do very low toxin damage and harvest sleeping targets for additional resources and a blob zombie."
|
||||
effectdesc = "will also produce fragile spores when killed and on expanding."
|
||||
shortdesc = "will do very low toxin damage and harvest sleeping targets for additional resources(for your overmind) and a blob zombie."
|
||||
analyzerdescdamage = "Does very low toxin damage and kills unconscious humans, turning them into blob zombies."
|
||||
analyzerdesceffect = "Produces spores when expanding and when killed."
|
||||
color = "#E88D5D"
|
||||
complementary_color = "#823ABB"
|
||||
//toxin, hallucination, and some bonus spore toxin
|
||||
/datum/reagent/blob/hallucinogenic_nectar
|
||||
name = "Hallucinogenic Nectar"
|
||||
id = "hallucinogenic_nectar"
|
||||
description = "will do low toxin damage, vivid hallucinations, and inject targets with toxins."
|
||||
analyzerdescdamage = "Does low toxin damage and injects a toxin that causes vivid hallucinations and blurried vision."
|
||||
color = "#CD7794"
|
||||
complementary_color = "#77CDB0"
|
||||
blobbernaut_message = "splashes"
|
||||
message = "The blob splashes you with sticky nectar"
|
||||
message_living = ", and you feel really good"
|
||||
|
||||
/datum/reagent/blob/hallucinogenic_nectar/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.hallucination += reac_volume
|
||||
M.adjust_drugginess(reac_volume)
|
||||
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("spore", 0.2*reac_volume)
|
||||
M.apply_damage(0.5*reac_volume, TOX)
|
||||
|
||||
//kills sleeping targets and turns them into blob zombies
|
||||
/datum/reagent/blob/zombifying_feelers
|
||||
name = "Zombifying Feelers"
|
||||
id = "zombifying_feelers"
|
||||
description = "will do low toxin damage and turn sleeping targets into blob zombies."
|
||||
analyzerdescdamage = "Does low toxin damage and kills unconscious humans, turning them into blob zombies."
|
||||
color = "#828264"
|
||||
complementary_color = "#646482"
|
||||
message_living = ", and you feel tired"
|
||||
|
||||
/datum/reagent/blob/zombifying_pods/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
/datum/reagent/blob/zombifying_feelers/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.6*reac_volume, TOX)
|
||||
if(O && ishuman(M) && M.stat == UNCONSCIOUS)
|
||||
M.death() //sleeping in a fight? bad plan.
|
||||
var/points = rand(5, 10)
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(get_turf(M))
|
||||
BS.overmind = O
|
||||
BS.update_icons()
|
||||
O.blob_mobs.Add(BS)
|
||||
BS.Zombify(M)
|
||||
O.add_points(points)
|
||||
O << "<span class='notice'>Gained [points] resources from the zombification of [M].</span>"
|
||||
if(M)
|
||||
M.apply_damage(0.4*reac_volume, TOX)
|
||||
|
||||
/datum/reagent/blob/zombifying_pods/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage <= 20 && B.obj_integrity - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore.
|
||||
B.visible_message("<span class='warning'><b>A spore floats free of the blob!</b></span>")
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc)
|
||||
BS.overmind = B.overmind
|
||||
BS.update_icons()
|
||||
B.overmind.blob_mobs.Add(BS)
|
||||
return ..()
|
||||
//toxin, stamina, and some bonus spore toxin
|
||||
/datum/reagent/blob/envenomed_filaments
|
||||
name = "Envenomed Filaments"
|
||||
id = "envenomed_filaments"
|
||||
description = "will do medium toxin and stamina damage, and inject targets with toxins."
|
||||
analyzerdescdamage = "Does medium toxin damage, drains stamina, and injects a weak toxin."
|
||||
color = "#9ACD32"
|
||||
complementary_color = "#6532CD"
|
||||
message_living = ", and you feel sick and nauseated"
|
||||
|
||||
/datum/reagent/blob/zombifying_pods/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O)
|
||||
if(prob(10))
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(T)
|
||||
BS.overmind = B.overmind
|
||||
BS.update_icons()
|
||||
newB.overmind.blob_mobs.Add(BS)
|
||||
/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("spore", 0.2*reac_volume)
|
||||
M.apply_damage(0.4*reac_volume, TOX)
|
||||
if(M)
|
||||
M.adjustStaminaLoss(0.4*reac_volume)
|
||||
|
||||
//does tons of oxygen damage and a little stamina, immune to tesla bolts, weak to EMP
|
||||
/datum/reagent/blob/energized_jelly
|
||||
name = "Energized Jelly"
|
||||
id = "energized_jelly"
|
||||
description = "will cause low stamina and high oxygen damage, and cause targets to be unable to breathe."
|
||||
effectdesc = "will also conduct electricity, but takes damage from EMPs."
|
||||
analyzerdescdamage = "Does low stamina damage, high oxygen damage, and prevents targets from breathing."
|
||||
analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs."
|
||||
color = "#EFD65A"
|
||||
complementary_color = "#00E5B1"
|
||||
message_living = ", and you feel a horrible tingling sensation"
|
||||
var/datum/effect_system/spark_spread/spark_system = new/datum/effect_system/spark_spread()
|
||||
//does brute, fire, and toxin over a few seconds
|
||||
/datum/reagent/blob/poisonous_strands
|
||||
name = "Poisonous Strands"
|
||||
id = "poisonous_strands"
|
||||
description = "will inject targets with poison."
|
||||
analyzerdescdamage = "Injects a highly lethal poison that will gradually liquify the target's internal organs."
|
||||
color = "#7D6EB4"
|
||||
complementary_color = "#A5B46E"
|
||||
blobbernaut_message = "injects"
|
||||
message_living = ", and you feel like your insides are melting"
|
||||
|
||||
/datum/reagent/blob/energized_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
/datum/reagent/blob/poisonous_strands/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("poisonous_strands", 0.12*reac_volume)
|
||||
|
||||
/datum/reagent/blob/poisonous_strands/on_mob_life(mob/living/M)
|
||||
M.adjustBruteLoss(1.5*REM)
|
||||
M.adjustFireLoss(1.5*REM)
|
||||
M.adjustToxLoss(1.5*REM)
|
||||
..()
|
||||
|
||||
//does oxygen damage, randomly pushes or pulls targets
|
||||
/datum/reagent/blob/cyclonic_grid
|
||||
name = "Cyclonic Grid"
|
||||
id = "cyclonic_grid"
|
||||
description = "will cause high oxygen damage and randomly throw targets to or from it."
|
||||
analyzerdescdamage = "Does high oxygen damage and randomly throws targets at or away from it."
|
||||
color = "#9BCD9B"
|
||||
complementary_color = "#CD9BCD"
|
||||
message = "The blob blasts you with a gust of air"
|
||||
message_living = ", and you can't catch your breath"
|
||||
|
||||
/datum/reagent/blob/cyclonic_grid/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
reagent_vortex(M, rand(0, 1), reac_volume)
|
||||
M.losebreath += round(0.05*reac_volume)
|
||||
M.apply_damage(0.6*reac_volume, OXY)
|
||||
|
||||
//does tons of oxygen damage and a little brute
|
||||
/datum/reagent/blob/lexorin_jelly
|
||||
name = "Lexorin Jelly"
|
||||
id = "lexorin_jelly"
|
||||
description = "will cause low brute and high oxygen damage, and cause targets to be unable to breathe."
|
||||
analyzerdescdamage = "Does low brute damage, high oxygen damage, and prevents targets from breathing."
|
||||
color = "#00E5B1"
|
||||
complementary_color = "#E50034"
|
||||
message_living = ", and your lungs feel heavy and weak"
|
||||
|
||||
/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.losebreath += round(0.2*reac_volume)
|
||||
M.adjustStaminaLoss(0.4*reac_volume)
|
||||
M.apply_damage(0.2*reac_volume, BRUTE)
|
||||
if(M)
|
||||
M.apply_damage(0.6*reac_volume, OXY)
|
||||
|
||||
/datum/reagent/blob/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && B.obj_integrity - damage <= 0 && prob(10))
|
||||
spark_system.set_up(rand(2, 4), 0, B)
|
||||
spark_system.start()
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/energized_jelly/tesla_reaction(obj/structure/blob/B, power)
|
||||
return 0
|
||||
|
||||
/datum/reagent/blob/energized_jelly/emp_reaction(obj/structure/blob/B, severity)
|
||||
var/damage = rand(30, 50) - severity * rand(10, 15)
|
||||
B.take_damage(damage, BURN, "energy")
|
||||
|
||||
//does aoe brute damage when hitting targets, is immune to explosions
|
||||
/datum/reagent/blob/explosive_lattice
|
||||
name = "Explosive Lattice"
|
||||
id = "explosive_lattice"
|
||||
description = "will do brute damage in an area around targets."
|
||||
effectdesc = "will also resist explosions, but takes increased damage from fire and other energy sources."
|
||||
description = "will do brute damage in an area around targets and is resistant to explosions."
|
||||
shortdesc = "will do brute damage in an area around targets."
|
||||
analyzerdescdamage = "Does medium brute damage and causes damage to everyone near its targets."
|
||||
analyzerdesceffect = "Is highly resistant to explosions, but takes increased damage from fire and other energy sources."
|
||||
analyzerdesceffect = "Is highly resistant to explosions."
|
||||
color = "#8B2500"
|
||||
complementary_color = "#00668B"
|
||||
blobbernaut_message = "blasts"
|
||||
message = "The blob blasts you"
|
||||
|
||||
/datum/reagent/blob/explosive_lattice/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
var/initial_volume = reac_volume
|
||||
reac_volume = ..()
|
||||
if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming
|
||||
var/obj/effect/overlay/temp/explosion/fast/E = PoolOrNew(/obj/effect/overlay/temp/explosion/fast, get_turf(M))
|
||||
var/obj/effect/overlay/temp/explosion/E = PoolOrNew(/obj/effect/overlay/temp/explosion, get_turf(M))
|
||||
E.alpha = 150
|
||||
for(var/mob/living/L in orange(get_turf(M), 1))
|
||||
for(var/mob/living/L in orange(M, 1))
|
||||
if("blob" in L.faction) //no friendly fire
|
||||
continue
|
||||
var/aoe_volume = ..(L, TOUCH, initial_volume, 0, L.get_permeability_protection(), O)
|
||||
L.apply_damage(0.4*aoe_volume, BRUTE)
|
||||
L.apply_damage(0.6*reac_volume, BRUTE)
|
||||
if(M)
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
else
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
M.apply_damage(0.8*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if(damage_flag == "bomb")
|
||||
return 0
|
||||
else if(damage_flag != "melee" || damage_flag != "bullet" || damage_flag != "laser")
|
||||
return damage * 1.5
|
||||
/datum/reagent/blob/explosive_lattice/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(isnull(cause))
|
||||
if(damage_type == BRUTE)
|
||||
return 0 //no-sell the explosion we do not take damage
|
||||
if(damage_type == BURN)
|
||||
return damage * 1.5 //take more from fire, tesla, and flashbangs
|
||||
return ..()
|
||||
|
||||
//does brute, burn, and toxin damage, and cools targets down
|
||||
/datum/reagent/blob/cryogenic_poison
|
||||
name = "Cryogenic Poison"
|
||||
id = "cryogenic_poison"
|
||||
description = "will inject targets with a freezing poison that does high damage over time."
|
||||
analyzerdescdamage = "Injects targets with a freezing poison that will gradually solidify the target's internal organs."
|
||||
color = "#8BA6E9"
|
||||
complementary_color = "#7D6EB4"
|
||||
blobbernaut_message = "injects"
|
||||
message = "The blob stabs you"
|
||||
message_living = ", and you feel like your insides are solidifying"
|
||||
//does semi-random brute damage and reacts to brute damage
|
||||
/datum/reagent/blob/reactive_gelatin
|
||||
name = "Reactive Gelatin"
|
||||
id = "reactive_gelatin"
|
||||
description = "will do random brute damage and react to brute damage."
|
||||
shortdesc = "will do random brute damage."
|
||||
analyzerdescdamage = "Does random brute damage."
|
||||
analyzerdesceffect = "When attacked with brute damage, will lash out, attacking everything near it."
|
||||
color = "#FFA500"
|
||||
complementary_color = "#005AFF"
|
||||
blobbernaut_message = "pummels"
|
||||
message = "The blob pummels you"
|
||||
|
||||
/datum/reagent/blob/cryogenic_poison/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
/datum/reagent/blob/reactive_gelatin/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
var/damage = rand(5, 35)/25
|
||||
M.apply_damage(damage*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/reactive_gelatin/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(damage && damage_type == BRUTE && original_health - damage > 0) //is there any damage, is it brute, and will we be alive
|
||||
if(isliving(cause))
|
||||
B.visible_message("<span class='warning'><b>The blob retaliates, lashing out!</b></span>")
|
||||
for(var/atom/A in range(1, B))
|
||||
A.blob_act(B)
|
||||
return ..()
|
||||
|
||||
//does low burn damage and stamina damage and cools targets down
|
||||
/datum/reagent/blob/cryogenic_liquid
|
||||
name = "Cryogenic Liquid"
|
||||
id = "cryogenic_liquid"
|
||||
description = "will do low burn and stamina damage, and cause targets to freeze."
|
||||
analyzerdescdamage = "Does low burn damage, drains stamina, and injects targets with a freezing liquid."
|
||||
color = "#8BA6E9"
|
||||
complementary_color = "#E9CE8B"
|
||||
blobbernaut_message = "splashes"
|
||||
message = "The blob splashes you with an icy liquid"
|
||||
message_living = ", and you feel cold and tired"
|
||||
|
||||
/datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
if(M.reagents)
|
||||
M.reagents.add_reagent("frostoil", 0.3*reac_volume)
|
||||
M.reagents.add_reagent("ice", 0.3*reac_volume)
|
||||
M.reagents.add_reagent("cryogenic_poison", 0.3*reac_volume)
|
||||
M.apply_damage(0.2*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/M)
|
||||
M.adjustBruteLoss(0.3*REM, 0)
|
||||
M.adjustFireLoss(0.3*REM, 0)
|
||||
M.adjustToxLoss(0.3*REM, 0)
|
||||
. = 1
|
||||
..()
|
||||
M.apply_damage(0.4*reac_volume, BURN)
|
||||
if(M)
|
||||
M.adjustStaminaLoss(0.3*reac_volume)
|
||||
|
||||
//does burn damage and EMPs, slightly fragile
|
||||
/datum/reagent/blob/electromagnetic_web
|
||||
name = "Electromagnetic Web"
|
||||
id = "electromagnetic_web"
|
||||
description = "will do high burn damage and EMP targets."
|
||||
effectdesc = "will also take massively increased damage and release an EMP when killed."
|
||||
description = "will do low burn damage and EMP targets, but is very fragile."
|
||||
shortdesc = "will do low burn damage and EMP targets."
|
||||
analyzerdescdamage = "Does low burn damage and EMPs targets."
|
||||
analyzerdesceffect = "Is fragile to all types of damage, but takes massive damage from brute. In addition, releases a small EMP when killed."
|
||||
color = "#83ECEC"
|
||||
@@ -364,9 +459,9 @@
|
||||
if(prob(reac_volume*2))
|
||||
M.emp_act(2)
|
||||
if(M)
|
||||
M.apply_damage(reac_volume, BURN)
|
||||
M.apply_damage(0.6*reac_volume, BURN)
|
||||
|
||||
/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(damage_type == BRUTE) //take full brute
|
||||
switch(B.brute_resist)
|
||||
if(0.5)
|
||||
@@ -377,16 +472,16 @@
|
||||
return damage * 10
|
||||
return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob
|
||||
|
||||
/datum/reagent/blob/electromagnetic_web/death_reaction(obj/structure/blob/B, damage_flag)
|
||||
if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser")
|
||||
/datum/reagent/blob/electromagnetic_web/death_reaction(obj/effect/blob/B, cause)
|
||||
if(cause)
|
||||
empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it
|
||||
|
||||
//does brute damage, bonus damage for each nearby blob, and spreads damage out
|
||||
/datum/reagent/blob/synchronous_mesh
|
||||
name = "Synchronous Mesh"
|
||||
id = "synchronous_mesh"
|
||||
description = "will do massively increased brute damage for each blob near the target."
|
||||
effectdesc = "will also spread damage between each blob near the attacked blob."
|
||||
description = "will do brute damage for each nearby blob and spread damage between nearby blobs."
|
||||
shortdesc = "will do brute damage for each nearby blob."
|
||||
analyzerdescdamage = "Does brute damage, increasing for each blob near the target."
|
||||
analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob."
|
||||
color = "#65ADA2"
|
||||
@@ -396,58 +491,68 @@
|
||||
|
||||
/datum/reagent/blob/synchronous_mesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.2*reac_volume, BRUTE)
|
||||
M.apply_damage(0.1*reac_volume, BRUTE)
|
||||
if(M && reac_volume)
|
||||
for(var/obj/structure/blob/B in range(1, M)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume
|
||||
for(var/obj/effect/blob/B in range(1, M)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.5*reac_volume
|
||||
if(M)
|
||||
B.blob_attack_animation(M) //show them they're getting a bad time
|
||||
M.apply_damage(0.3*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") //the cause isn't fire or bombs, so split the damage
|
||||
/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
if(!isnull(cause)) //the cause isn't fire or bombs, so split the damage
|
||||
var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs
|
||||
for(var/obj/structure/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //if it doesn't have the same chemical or is a core or node, don't split damage to it
|
||||
for(var/obj/effect/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/effect/blob/core) && !istype(C, /obj/effect/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //if it doesn't have the same chemical or is a core or node, don't split damage to it
|
||||
damagesplit += 1
|
||||
for(var/obj/structure/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //only hurt blobs that have the same overmind chemical and aren't cores or nodes
|
||||
C.take_damage(damage/damagesplit, CLONE, 0, 0)
|
||||
for(var/obj/effect/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/effect/blob/core) && !istype(C, /obj/effect/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //only hurt blobs that have the same overmind chemical and aren't cores or nodes
|
||||
C.take_damage(damage/damagesplit, CLONE, B, 0)
|
||||
return damage / damagesplit
|
||||
else
|
||||
return damage * 1.25
|
||||
|
||||
//does brute damage through armor and bio resistance
|
||||
/datum/reagent/blob/reactive_spines
|
||||
name = "Reactive Spines"
|
||||
id = "reactive_spines"
|
||||
/datum/reagent/blob/penetrating_spines
|
||||
name = "Penetrating Spines"
|
||||
id = "penetrating_spines"
|
||||
description = "will do medium brute damage through armor and bio resistance."
|
||||
effectdesc = "will also react when attacked with brute damage, attacking all near the attacked blob."
|
||||
analyzerdescdamage = "Does medium brute damage, ignoring armor and bio resistance."
|
||||
analyzerdesceffect = "When attacked with brute damage, will lash out, attacking everything near it."
|
||||
color = "#9ACD32"
|
||||
complementary_color = "#FFA500"
|
||||
color = "#6E4664"
|
||||
complementary_color = "#466E50"
|
||||
blobbernaut_message = "stabs"
|
||||
message = "The blob stabs you"
|
||||
|
||||
/datum/reagent/blob/reactive_spines/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
/datum/reagent/blob/penetrating_spines/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob))
|
||||
return 0 //the dead, and blob mobs, don't cause reactions
|
||||
M.adjustBruteLoss(0.8*reac_volume)
|
||||
M.adjustBruteLoss(0.7*reac_volume)
|
||||
|
||||
/datum/reagent/blob/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if(damage && damage_type == BRUTE && B.obj_integrity - damage > 0) //is there any damage, is it brute, and will we be alive
|
||||
if(damage_flag == "melee")
|
||||
B.visible_message("<span class='boldwarning'>The blob retaliates, lashing out!</span>")
|
||||
for(var/atom/A in range(1, B))
|
||||
A.blob_act(B)
|
||||
return ..()
|
||||
/datum/reagent/blob/adaptive_nexuses
|
||||
name = "Adaptive Nexuses"
|
||||
id = "adaptive_nexuses"
|
||||
description = "will do medium brute damage and kill unconscious targets, giving you bonus resources."
|
||||
shortdesc = "will do medium brute damage and kill unconscious targets, giving your overmind bonus resources."
|
||||
analyzerdescdamage = "Does medium brute damage and kills unconscious humans, reaping resources from them."
|
||||
color = "#4A64C0"
|
||||
complementary_color = "#823ABB"
|
||||
|
||||
/datum/reagent/blob/adaptive_nexuses/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
if(O && ishuman(M) && M.stat == UNCONSCIOUS)
|
||||
PoolOrNew(/obj/effect/overlay/temp/revenant, get_turf(M))
|
||||
var/points = rand(5, 10)
|
||||
O.add_points(points)
|
||||
O << "<span class='notice'>Gained [points] resources from the death of [M].</span>"
|
||||
M.death()
|
||||
if(M)
|
||||
M.apply_damage(0.5*reac_volume, BRUTE)
|
||||
|
||||
//does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged
|
||||
/datum/reagent/blob/pressurized_slime
|
||||
name = "Pressurized Slime"
|
||||
id = "pressurized_slime"
|
||||
description = "will do low brute, oxygen, and stamina damage, and wet tiles under targets."
|
||||
effectdesc = "will also wet tiles near blobs that are attacked or killed."
|
||||
description = "will do low brute, oxygen, and stamina damage, and wet tiles when damaged or killed."
|
||||
shortdesc = "will do low brute, oxygen, and stamina damage, and wet tiles under targets."
|
||||
analyzerdescdamage = "Does low brute damage, low oxygen damage, drains stamina, and wets tiles under targets, extinguishing them."
|
||||
analyzerdesceffect = "When attacked or killed, wets nearby tiles, extinguishing anything on them."
|
||||
color = "#AAAABB"
|
||||
@@ -463,23 +568,22 @@
|
||||
T.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||
M.adjust_fire_stacks(-(reac_volume / 10))
|
||||
M.ExtinguishMob()
|
||||
M.apply_damage(0.4*reac_volume, BRUTE)
|
||||
M.apply_damage(0.1*reac_volume, BRUTE)
|
||||
if(M)
|
||||
M.apply_damage(0.4*reac_volume, OXY)
|
||||
M.apply_damage(0.3*reac_volume, OXY)
|
||||
if(M)
|
||||
M.adjustStaminaLoss(0.2*reac_volume)
|
||||
M.adjustStaminaLoss(0.3*reac_volume)
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
|
||||
if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") || damage_type != BURN)
|
||||
extinguisharea(B, damage)
|
||||
/datum/reagent/blob/pressurized_slime/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
extinguisharea(B, damage)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag)
|
||||
if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser")
|
||||
B.visible_message("<span class='boldwarning'>The blob ruptures, spraying the area with liquid!</span>")
|
||||
extinguisharea(B, 50)
|
||||
/datum/reagent/blob/pressurized_slime/death_reaction(obj/effect/blob/B, cause)
|
||||
if(!isnull(cause))
|
||||
B.visible_message("<span class='warning'><b>The blob ruptures, spraying the area with liquid!</b></span>")
|
||||
extinguisharea(B, 50)
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance)
|
||||
/datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/effect/blob/B, probchance)
|
||||
for(var/turf/open/T in range(1, B))
|
||||
if(prob(probchance))
|
||||
T.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||
@@ -488,3 +592,75 @@
|
||||
for(var/mob/living/L in T)
|
||||
L.adjust_fire_stacks(-2.5)
|
||||
L.ExtinguishMob()
|
||||
|
||||
//does brute damage and throws or pulls nearby objects at the target
|
||||
/datum/reagent/blob/dark_matter
|
||||
name = "Dark Matter"
|
||||
id = "dark_matter"
|
||||
description = "will do medium brute damage and pull nearby objects and enemies at the target."
|
||||
analyzerdescdamage = "Does medium brute damage and pulls nearby objects and creatures at the target."
|
||||
color = "#61407E"
|
||||
complementary_color = "#5D7E40"
|
||||
message = "You feel a thrum as the blob strikes you, and everything flies at you"
|
||||
|
||||
/datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
reagent_vortex(M, 0, reac_volume)
|
||||
M.apply_damage(0.3*reac_volume, BRUTE)
|
||||
|
||||
//does brute damage and throws or pushes nearby objects away from the target
|
||||
/datum/reagent/blob/b_sorium
|
||||
name = "Sorium"
|
||||
id = "b_sorium"
|
||||
description = "will do medium brute damage and throw nearby objects and enemies away from the target."
|
||||
analyzerdescdamage = "Does medium brute damage and pushes nearby objects and creatures away from the target."
|
||||
color = "#808000"
|
||||
complementary_color = "#000080"
|
||||
message = "The blob slams into you and sends you flying"
|
||||
|
||||
/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O)
|
||||
reac_volume = ..()
|
||||
reagent_vortex(M, 1, reac_volume)
|
||||
M.apply_damage(0.3*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, reac_volume)
|
||||
if(M && reac_volume)
|
||||
var/turf/pull = get_turf(M)
|
||||
var/range_power = Clamp(round(reac_volume/5, 1), 1, 5)
|
||||
for(var/atom/movable/X in range(range_power,pull))
|
||||
if(istype(X, /obj/effect))
|
||||
continue
|
||||
if(isliving(X))
|
||||
var/mob/living/L = X
|
||||
if("blob" in L.faction) //no friendly throwpulling
|
||||
continue
|
||||
if(!X.anchored)
|
||||
var/distance = get_dist(X, pull)
|
||||
var/moving_power = max(range_power - distance, 1)
|
||||
if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown
|
||||
if(setting_type)
|
||||
var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull)))
|
||||
var/throw_range = 5 - distance
|
||||
X.throw_at_fast(throw_target, throw_range, 1)
|
||||
else
|
||||
X.throw_at_fast(pull, distance, 1)
|
||||
else
|
||||
spawn(0)
|
||||
if(setting_type)
|
||||
for(var/i in 0 to moving_power-1)
|
||||
sleep(2)
|
||||
if(!step_away(X, pull))
|
||||
break
|
||||
else
|
||||
for(var/i in 0 to moving_power-1)
|
||||
sleep(2)
|
||||
if(!step_towards(X, pull))
|
||||
break
|
||||
|
||||
|
||||
/datum/reagent/blob/proc/send_message(mob/living/M)
|
||||
var/totalmessage = message
|
||||
if(message_living && !issilicon(M))
|
||||
totalmessage += message_living
|
||||
totalmessage += "!"
|
||||
M << "<span class='userdanger'>[totalmessage]</span>"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/reagent/consumable/orangejuice
|
||||
name = "Orange Juice"
|
||||
name = "Orange juice"
|
||||
id = "orangejuice"
|
||||
description = "Both delicious AND rich in Vitamin C, what more do you need?"
|
||||
color = "#E78108" // rgb: 231, 129, 8
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/M)
|
||||
if(M.getFireLoss() && prob(20))
|
||||
M.heal_bodypart_damage(0,1, 0)
|
||||
M.heal_organ_damage(0,1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/carrotjuice
|
||||
name = "Carrot Juice"
|
||||
name = "Carrot juice"
|
||||
id = "carrotjuice"
|
||||
description = "It is just like a carrot but without crunching."
|
||||
color = "#973800" // rgb: 151, 56, 0
|
||||
@@ -64,12 +64,6 @@
|
||||
description = "A delicious blend of several different kinds of berries."
|
||||
color = "#863333" // rgb: 134, 51, 51
|
||||
|
||||
/datum/reagent/consumable/applejuice
|
||||
name = "Apple Juice"
|
||||
id = "applejuice"
|
||||
description = "The sweet juice of an apple, fit for all ages."
|
||||
color = "#ECFF56" // rgb: 236, 255, 86
|
||||
|
||||
/datum/reagent/consumable/poisonberryjuice
|
||||
name = "Poison Berry Juice"
|
||||
id = "poisonberryjuice"
|
||||
@@ -100,8 +94,8 @@
|
||||
color = "#863333" // rgb: 175, 175, 0
|
||||
|
||||
/datum/reagent/consumable/banana/on_mob_life(mob/living/M)
|
||||
if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
if( ( istype(M, /mob/living/carbon/human) && M.job in list("Clown") ) || istype(M, /mob/living/carbon/monkey) )
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -111,35 +105,11 @@
|
||||
description = "Absolutely nothing."
|
||||
|
||||
/datum/reagent/consumable/nothing/on_mob_life(mob/living/M)
|
||||
if(ishuman(M) && M.job in list("Mime"))
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Mime"))
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/laughter
|
||||
name = "Laughter"
|
||||
id = "laughter"
|
||||
description = "Some say that this is the best medicine, but recent studies have proven that to be untrue."
|
||||
metabolization_rate = INFINITY
|
||||
color = "#FF4DD2"
|
||||
|
||||
/datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M)
|
||||
if(!iscarbon(M))
|
||||
return
|
||||
if(!M.silent)//cant laugh if you're mute
|
||||
M.emote("laugh")
|
||||
var/laughnum = rand(1,2)
|
||||
if(M.gender == MALE)
|
||||
if(laughnum == 1)
|
||||
playsound(get_turf(M), 'sound/voice/human/manlaugh1.ogg', 50, 1)
|
||||
if(laughnum == 2)
|
||||
playsound(get_turf(M), 'sound/voice/human/manlaugh2.ogg', 50, 1)
|
||||
else if(M.gender == FEMALE)
|
||||
playsound(get_turf(M), 'sound/voice/human/womanlaugh.ogg', 65, 1)
|
||||
else//non-binary gender just sounds like a man
|
||||
playsound(get_turf(M), 'sound/voice/human/manlaugh1.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/potato_juice
|
||||
name = "Potato Juice"
|
||||
id = "potato"
|
||||
@@ -148,7 +118,7 @@
|
||||
color = "#302000" // rgb: 48, 32, 0
|
||||
|
||||
/datum/reagent/consumable/grapejuice
|
||||
name = "Grape Juice"
|
||||
name = "Grape juice"
|
||||
id = "grapejuice"
|
||||
description = "The juice of a bunch of grapes. Guaranteed non-alcoholic."
|
||||
color = "#290029" // dark purple
|
||||
@@ -161,13 +131,13 @@
|
||||
|
||||
/datum/reagent/consumable/milk/on_mob_life(mob/living/M)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
if(holder.has_reagent("capsaicin"))
|
||||
holder.remove_reagent("capsaicin", 2)
|
||||
var/datum/dna/Mdna = M.has_dna()
|
||||
if(Mdna && Mdna.species && (Mdna.species.id == "plasmaman" || Mdna.species.id == "skeleton"))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -179,7 +149,7 @@
|
||||
|
||||
/datum/reagent/consumable/soymilk/on_mob_life(mob/living/M)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -191,7 +161,7 @@
|
||||
|
||||
/datum/reagent/consumable/cream/on_mob_life(mob/living/M)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -270,7 +240,7 @@
|
||||
/datum/reagent/consumable/icetea
|
||||
name = "Iced Tea"
|
||||
id = "icetea"
|
||||
description = "No relation to a certain rap artist/actor."
|
||||
description = "No relation to a certain rap artist/ actor."
|
||||
color = "#104038" // rgb: 16, 64, 56
|
||||
nutriment_factor = 0
|
||||
|
||||
@@ -417,7 +387,7 @@
|
||||
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
||||
M.Jitter(5)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -435,7 +405,7 @@
|
||||
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
||||
M.Jitter(5)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -522,8 +492,115 @@
|
||||
description = "Beloved of children and teetotalers."
|
||||
color = "#E6CDFF"
|
||||
|
||||
/datum/reagent/consumable/milk/chocolate_milk
|
||||
name = "Chocolate Milk"
|
||||
id = "chocolate_milk"
|
||||
description = "Milk for cool kids."
|
||||
color = "#7D4E29"
|
||||
//////////////////////////////////////////////The ten friggen million reagents that get you drunk//////////////////////////////////////////////
|
||||
|
||||
/datum/reagent/consumable/atomicbomb
|
||||
name = "Atomic Bomb"
|
||||
id = "atomicbomb"
|
||||
description = "Nuclear proliferation never tasted so good."
|
||||
color = "#666300" // rgb: 102, 99, 0
|
||||
|
||||
/datum/reagent/consumable/atomicbomb/on_mob_life(mob/living/M)
|
||||
M.set_drugginess(50)
|
||||
M.confused = max(M.confused+2,0)
|
||||
M.Dizzy(10)
|
||||
if (!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
switch(current_cycle)
|
||||
if(51 to 200)
|
||||
M.Sleeping(5, 0)
|
||||
. = 1
|
||||
if(201 to INFINITY)
|
||||
M.AdjustSleeping(2, 0)
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/gargle_blaster
|
||||
name = "Pan-Galactic Gargle Blaster"
|
||||
id = "gargleblaster"
|
||||
description = "Whoah, this stuff looks volatile!"
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
/datum/reagent/consumable/gargle_blaster/on_mob_life(mob/living/M)
|
||||
M.dizziness +=6
|
||||
switch(current_cycle)
|
||||
if(15 to 45)
|
||||
if(!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
if(45 to 55)
|
||||
if(prob(50))
|
||||
M.confused = max(M.confused+3,0)
|
||||
if(55 to 200)
|
||||
M.set_drugginess(55)
|
||||
if(200 to INFINITY)
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/neurotoxin
|
||||
name = "Neurotoxin"
|
||||
id = "neurotoxin"
|
||||
description = "A strong neurotoxin that puts the subject into a death-like state."
|
||||
color = "#2E2E61" // rgb: 46, 46, 97
|
||||
|
||||
/datum/reagent/consumable/neurotoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.Weaken(3, 1, 0)
|
||||
M.dizziness +=6
|
||||
switch(current_cycle)
|
||||
if(15 to 45)
|
||||
if(!M.slurring)
|
||||
M.slurring = 1
|
||||
M.slurring += 3
|
||||
if(45 to 55)
|
||||
if(prob(50))
|
||||
M.confused = max(M.confused+3,0)
|
||||
if(55 to 200)
|
||||
M.set_drugginess(55)
|
||||
if(200 to INFINITY)
|
||||
M.adjustToxLoss(2, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/consumable/hippies_delight
|
||||
name = "Hippie's Delight"
|
||||
id = "hippiesdelight"
|
||||
description = "You just don't get it maaaan."
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
nutriment_factor = 0
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/consumable/hippies_delight/on_mob_life(mob/living/M)
|
||||
if (!M.slurring)
|
||||
M.slurring = 1
|
||||
switch(current_cycle)
|
||||
if(1 to 5)
|
||||
M.Dizzy(10)
|
||||
M.set_drugginess(30)
|
||||
if(prob(10))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(5 to 10)
|
||||
M.Jitter(20)
|
||||
M.Dizzy(20)
|
||||
M.set_drugginess(45)
|
||||
if(prob(20))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if (10 to 200)
|
||||
M.Jitter(40)
|
||||
M.Dizzy(40)
|
||||
M.set_drugginess(60)
|
||||
if(prob(30))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(200 to INFINITY)
|
||||
M.Jitter(60)
|
||||
M.Dizzy(60)
|
||||
M.set_drugginess(75)
|
||||
if(prob(40))
|
||||
M.emote(pick("twitch","giggle"))
|
||||
if(prob(30))
|
||||
M.adjustToxLoss(2, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/datum/reagent/drug/space_drugs/on_mob_life(mob/living/M)
|
||||
M.set_drugginess(15)
|
||||
if(isturf(M.loc) && !isspaceturf(M.loc))
|
||||
if(isturf(M.loc) && !istype(M.loc, /turf/open/space))
|
||||
if(M.canmove)
|
||||
if(prob(10)) step(M, pick(cardinal))
|
||||
if(prob(7))
|
||||
@@ -40,9 +40,7 @@
|
||||
if(prob(1))
|
||||
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
|
||||
M << "<span class='notice'>[smoke_message]</span>"
|
||||
M.AdjustParalysis(-1, 0)
|
||||
M.AdjustStunned(-1, 0)
|
||||
M.AdjustWeakened(-1, 0)
|
||||
M.adjustStaminaLoss(-0.5*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
@@ -173,13 +171,13 @@
|
||||
|
||||
/datum/reagent/drug/methamphetamine/overdose_process(mob/living/M)
|
||||
if(M.canmove && !istype(M.loc, /atom/movable))
|
||||
for(var/i in 1 to 4)
|
||||
for(var/i = 0, i < 4, i++)
|
||||
step(M, pick(cardinal))
|
||||
if(prob(20))
|
||||
M.emote("laugh")
|
||||
if(prob(33))
|
||||
M.visible_message("<span class='danger'>[M]'s hands flip out and flail everywhere!</span>")
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
..()
|
||||
@@ -252,12 +250,12 @@
|
||||
/datum/reagent/drug/bath_salts/overdose_process(mob/living/M)
|
||||
M.hallucination += 10
|
||||
if(M.canmove && !istype(M.loc, /atom/movable))
|
||||
for(var/i in 1 to 8)
|
||||
for(var/i = 0, i < 8, i++)
|
||||
step(M, pick(cardinal))
|
||||
if(prob(20))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
..()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/datum/reagent/consumable/nutriment/on_mob_life(mob/living/M)
|
||||
if(prob(50))
|
||||
M.heal_bodypart_damage(1,0, 0)
|
||||
M.heal_organ_damage(1,0, 0)
|
||||
. = 1
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
/datum/reagent/consumable/vitamin/on_mob_life(mob/living/M)
|
||||
if(prob(50))
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
. = 1
|
||||
if(M.satiety < 600)
|
||||
M.satiety += 30
|
||||
@@ -161,7 +161,7 @@
|
||||
for(var/mob/living/simple_animal/slime/M in T)
|
||||
M.adjustToxLoss(rand(15,30))
|
||||
if(reac_volume >= 1) // Make Freezy Foam and anti-fire grenades!
|
||||
if(isopenturf(T))
|
||||
if(istype(T, /turf/open))
|
||||
var/turf/open/OT = T
|
||||
OT.MakeSlippery(wet_setting=TURF_WET_ICE, min_wet_time=10, wet_time_to_add=reac_volume) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure.
|
||||
OT.air.temperature -= MOLES_CELLSTANDARD*100*reac_volume/OT.air.heat_capacity() // reduces environment temperature by 5K per unit.
|
||||
@@ -173,7 +173,7 @@
|
||||
color = "#B31008" // rgb: 179, 16, 8
|
||||
|
||||
/datum/reagent/consumable/condensedcapsaicin/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(!ishuman(M) && !ismonkey(M))
|
||||
if(!istype(M, /mob/living/carbon/human) && !istype(M, /mob/living/carbon/monkey))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/victim = M
|
||||
@@ -193,7 +193,7 @@
|
||||
safe_thing = victim.wear_mask
|
||||
|
||||
//only humans can have helmets and glasses
|
||||
if(ishuman(victim))
|
||||
if(istype(victim, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = victim
|
||||
if( H.head )
|
||||
if ( H.head.flags_cover & MASKCOVERSEYES )
|
||||
@@ -324,8 +324,8 @@
|
||||
color = "#FF00FF" // rgb: 255, 0, 255
|
||||
|
||||
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M)
|
||||
if(ishuman(M) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -392,7 +392,7 @@
|
||||
color = "#FFFFFF" // rgb: 0, 0, 0
|
||||
|
||||
/datum/reagent/consumable/flour/reaction_turf(turf/T, reac_volume)
|
||||
if(!isspaceturf(T))
|
||||
if(!istype(T, /turf/open/space))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/flour(T)
|
||||
reagentdecal.reagents.add_reagent("flour", reac_volume)
|
||||
|
||||
@@ -457,53 +457,5 @@
|
||||
/datum/reagent/consumable/honey/on_mob_life(mob/living/M)
|
||||
M.reagents.add_reagent("sugar",3)
|
||||
if(prob(20))
|
||||
M.heal_bodypart_damage(3,1)
|
||||
M.heal_organ_damage(3,1)
|
||||
..()
|
||||
|
||||
|
||||
////Lavaland Flora Reagents////
|
||||
|
||||
|
||||
/datum/reagent/consumable/entpoly
|
||||
name = "Entropic Polypnium"
|
||||
id = "entpoly"
|
||||
description = "An ichor, derived from a certain mushroom, makes for a bad time."
|
||||
color = "#1d043d"
|
||||
/datum/reagent/consumable/entpoly/on_mob_life(mob/living/M)
|
||||
if(current_cycle >= 10)
|
||||
M.Paralyse(2, 0)
|
||||
. = 1
|
||||
if(prob(20))
|
||||
M.losebreath += 4
|
||||
M.adjustBrainLoss(2*REM)
|
||||
M.adjustToxLoss(3*REM,0)
|
||||
M.adjustStaminaLoss(10*REM,0)
|
||||
M.blur_eyes(5)
|
||||
. = TRUE
|
||||
..()
|
||||
|
||||
/datum/reagent/consumable/tinlux
|
||||
name = "Tinea Luxor"
|
||||
id = "tinlux"
|
||||
description = "A stimulating ichor which causes luminescent fungi to grow on the skin. "
|
||||
color = "#b5a213"
|
||||
|
||||
/datum/reagent/consumable/tinlux/reaction_mob(mob/living/M)
|
||||
M.AddLuminosity(2)
|
||||
|
||||
/datum/reagent/consumable/tinlux/on_mob_delete(mob/living/M)
|
||||
M.AddLuminosity(-2)
|
||||
|
||||
/datum/reagent/consumable/vitfro
|
||||
name = "Vitrium Froth"
|
||||
id = "vitfro"
|
||||
description = "A bubbly paste that heals wounds of the skin."
|
||||
color = "#d3a308"
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/consumable/vitfro/on_mob_life(mob/living/M)
|
||||
if(prob(80))
|
||||
M.adjustBruteLoss(-1*REM, 0)
|
||||
M.adjustFireLoss(-1*REM, 0)
|
||||
. = TRUE
|
||||
..()
|
||||
@@ -31,14 +31,13 @@
|
||||
id = "adminordrazine"
|
||||
description = "It's magic. We don't have to explain it."
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
|
||||
M.setCloneLoss(0, 0)
|
||||
M.setOxyLoss(0, 0)
|
||||
M.radiation = 0
|
||||
M.heal_bodypart_damage(5,5, 0)
|
||||
M.heal_organ_damage(5,5, 0)
|
||||
M.adjustToxLoss(-5, 0)
|
||||
M.hallucination = 0
|
||||
M.setBrainLoss(0)
|
||||
@@ -163,7 +162,7 @@
|
||||
|
||||
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/M)
|
||||
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
|
||||
M.heal_bodypart_damage(1,1, 0)
|
||||
M.heal_organ_damage(1,1, 0)
|
||||
M.status_flags &= ~DISFIGURED
|
||||
..()
|
||||
. = 1
|
||||
@@ -275,7 +274,7 @@
|
||||
/datum/reagent/medicine/salglu_solution/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(ishuman(M) && method == INJECT)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.dna && !(NOBLOOD in H.dna.species.species_traits))
|
||||
if(H.dna && !(NOBLOOD in H.dna.species.specflags))
|
||||
var/efficiency = (BLOOD_VOLUME_NORMAL-H.blood_volume)/700 + 0.2//The lower the blood of the patient, the better it is as a blood substitute.
|
||||
efficiency = min(0.75,efficiency)
|
||||
//As it's designed for an IV drip, make large injections not as effective as repeated small injections.
|
||||
@@ -307,12 +306,6 @@
|
||||
if(show_message)
|
||||
M << "<span class='warning'>Your stomach agonizingly cramps!</span>"
|
||||
else
|
||||
var/mob/living/carbon/C = M
|
||||
for(var/s in C.surgeries)
|
||||
var/datum/surgery/S = s
|
||||
S.success_multiplier = max(0.10, S.success_multiplier)
|
||||
// +10% success propability on each step, useful while operating in less-than-perfect conditions
|
||||
|
||||
if(show_message)
|
||||
M << "<span class='danger'>You feel your wounds fade away to nothing!</span>" //It's a painkiller, after all
|
||||
..()
|
||||
@@ -331,9 +324,7 @@
|
||||
color = "#FFEBEB"
|
||||
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1)
|
||||
if(iscarbon(M))
|
||||
if (M.stat == DEAD)
|
||||
show_message = 0
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
if(method in list(PATCH, TOUCH))
|
||||
M.adjustBruteLoss(-1.25 * reac_volume)
|
||||
M.adjustFireLoss(-1.25 * reac_volume)
|
||||
@@ -581,7 +572,7 @@
|
||||
|
||||
/datum/reagent/medicine/morphine/overdose_process(mob/living/M)
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
M.Dizzy(2)
|
||||
@@ -590,7 +581,7 @@
|
||||
|
||||
/datum/reagent/medicine/morphine/addiction_act_stage1(mob/living/M)
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
M.Dizzy(2)
|
||||
@@ -599,7 +590,7 @@
|
||||
|
||||
/datum/reagent/medicine/morphine/addiction_act_stage2(mob/living/M)
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
M.adjustToxLoss(1*REM, 0)
|
||||
@@ -610,7 +601,7 @@
|
||||
|
||||
/datum/reagent/medicine/morphine/addiction_act_stage3(mob/living/M)
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
M.adjustToxLoss(2*REM, 0)
|
||||
@@ -621,7 +612,7 @@
|
||||
|
||||
/datum/reagent/medicine/morphine/addiction_act_stage4(mob/living/M)
|
||||
if(prob(33))
|
||||
var/obj/item/I = M.get_active_held_item()
|
||||
var/obj/item/I = M.get_active_hand()
|
||||
if(I)
|
||||
M.drop_item()
|
||||
M.adjustToxLoss(3*REM, 0)
|
||||
@@ -883,7 +874,7 @@
|
||||
..()
|
||||
|
||||
//Trek Chems, used primarily by medibots. Only heals a specific damage type, but is very efficient.
|
||||
/datum/reagent/medicine/bicaridine
|
||||
datum/reagent/medicine/bicaridine
|
||||
name = "Bicaridine"
|
||||
id = "bicaridine"
|
||||
description = "Restores bruising. Overdose causes it instead."
|
||||
@@ -891,17 +882,17 @@
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
|
||||
/datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/bicaridine/on_mob_life(mob/living/M)
|
||||
M.adjustBruteLoss(-2*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/bicaridine/overdose_process(mob/living/M)
|
||||
datum/reagent/medicine/bicaridine/overdose_process(mob/living/M)
|
||||
M.adjustBruteLoss(4*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/dexalin
|
||||
datum/reagent/medicine/dexalin
|
||||
name = "Dexalin"
|
||||
id = "dexalin"
|
||||
description = "Restores oxygen loss. Overdose causes it instead."
|
||||
@@ -909,17 +900,17 @@
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
|
||||
/datum/reagent/medicine/dexalin/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/dexalin/on_mob_life(mob/living/M)
|
||||
M.adjustOxyLoss(-2*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/dexalin/overdose_process(mob/living/M)
|
||||
datum/reagent/medicine/dexalin/overdose_process(mob/living/M)
|
||||
M.adjustOxyLoss(4*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/kelotane
|
||||
datum/reagent/medicine/kelotane
|
||||
name = "Kelotane"
|
||||
id = "kelotane"
|
||||
description = "Restores fire damage. Overdose causes it instead."
|
||||
@@ -927,17 +918,17 @@
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
|
||||
/datum/reagent/medicine/kelotane/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/kelotane/on_mob_life(mob/living/M)
|
||||
M.adjustFireLoss(-2*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/kelotane/overdose_process(mob/living/M)
|
||||
datum/reagent/medicine/kelotane/overdose_process(mob/living/M)
|
||||
M.adjustFireLoss(4*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/antitoxin
|
||||
datum/reagent/medicine/antitoxin
|
||||
name = "Anti-Toxin"
|
||||
id = "antitoxin"
|
||||
description = "Heals toxin damage and removes toxins in the bloodstream. Overdose causes toxin damage."
|
||||
@@ -945,7 +936,7 @@
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
|
||||
/datum/reagent/medicine/antitoxin/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/antitoxin/on_mob_life(mob/living/M)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
for(var/datum/reagent/toxin/R in M.reagents.reagent_list)
|
||||
if(R != src)
|
||||
@@ -953,24 +944,24 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/antitoxin/overdose_process(mob/living/M)
|
||||
datum/reagent/medicine/antitoxin/overdose_process(mob/living/M)
|
||||
M.adjustToxLoss(4*REM, 0) // End result is 2 toxin loss taken, because it heals 2 and then removes 4.
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/inaprovaline
|
||||
datum/reagent/medicine/inaprovaline
|
||||
name = "Inaprovaline"
|
||||
id = "inaprovaline"
|
||||
description = "Stabilizes the breathing of patients. Good for those in critical condition."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/inaprovaline/on_mob_life(mob/living/M)
|
||||
if(M.losebreath >= 5)
|
||||
M.losebreath -= 5
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/tricordrazine
|
||||
datum/reagent/medicine/tricordrazine
|
||||
name = "Tricordrazine"
|
||||
id = "tricordrazine"
|
||||
description = "Has a high chance to heal all types of damage. Overdose instead causes it."
|
||||
@@ -978,7 +969,7 @@
|
||||
color = "#C8A5DC"
|
||||
overdose_threshold = 30
|
||||
|
||||
/datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/tricordrazine/on_mob_life(mob/living/M)
|
||||
if(prob(80))
|
||||
M.adjustBruteLoss(-1*REM, 0)
|
||||
M.adjustFireLoss(-1*REM, 0)
|
||||
@@ -987,7 +978,7 @@
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/tricordrazine/overdose_process(mob/living/M)
|
||||
datum/reagent/medicine/tricordrazine/overdose_process(mob/living/M)
|
||||
M.adjustToxLoss(2*REM, 0)
|
||||
M.adjustOxyLoss(2*REM, 0)
|
||||
M.adjustBruteLoss(2*REM, 0)
|
||||
@@ -995,14 +986,14 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
|
||||
datum/reagent/medicine/syndicate_nanites //Used exclusively by Syndicate medical cyborgs
|
||||
name = "Restorative Nanites"
|
||||
id = "syndicate_nanites"
|
||||
description = "Miniature medical robots that swiftly restore bodily damage."
|
||||
reagent_state = SOLID
|
||||
color = "#555555"
|
||||
|
||||
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
|
||||
datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
|
||||
M.adjustBruteLoss(-5*REM, 0) //A ton of healing - this is a 50 telecrystal investment.
|
||||
M.adjustFireLoss(-5*REM, 0)
|
||||
M.adjustOxyLoss(-15, 0)
|
||||
@@ -1060,26 +1051,6 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/miningnanites
|
||||
name = "Nanites"
|
||||
id = "miningnanites"
|
||||
description = "It's mining magic. We don't have to explain it."
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/M)
|
||||
M.heal_bodypart_damage(5,5, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/miningnanites/overdose_process(mob/living/M)
|
||||
M.adjustBruteLoss(3*REM, 0)
|
||||
M.adjustFireLoss(3*REM, 0)
|
||||
M.adjustToxLoss(3*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
//used for changeling's adrenaline power
|
||||
/datum/reagent/medicine/changelingAdrenaline
|
||||
name = "Adrenaline"
|
||||
|
||||
@@ -119,23 +119,22 @@
|
||||
M.apply_water()
|
||||
|
||||
var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
|
||||
if(hotspot && !isspaceturf(T))
|
||||
if(hotspot && !istype(T, /turf/open/space))
|
||||
if(T.air)
|
||||
var/datum/gas_mixture/G = T.air
|
||||
G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),0)
|
||||
G.react()
|
||||
qdel(hotspot)
|
||||
var/obj/effect/acid/A = (locate(/obj/effect/acid) in T)
|
||||
if(A)
|
||||
A.acid_level = max(A.acid_level - reac_volume*50, 0)
|
||||
return
|
||||
|
||||
/*
|
||||
* Water reaction to an object
|
||||
*/
|
||||
|
||||
/datum/reagent/water/reaction_obj(obj/O, reac_volume)
|
||||
O.extinguish()
|
||||
O.acid_level = 0
|
||||
if(istype(O))
|
||||
O.extinguish()
|
||||
|
||||
// Monkey cube
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
||||
@@ -176,30 +175,36 @@
|
||||
if(data >= 30) // 12 units, 54 seconds @ metabolism 0.4 units & tick rate 1.8 sec
|
||||
if(!M.stuttering)
|
||||
M.stuttering = 1
|
||||
M.stuttering = min(M.stuttering+4, 10)
|
||||
M.stuttering += 4
|
||||
M.Dizzy(5)
|
||||
if(iscultist(M) && prob(5))
|
||||
M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","R'ge Na'sie","Diabo us Vo'iscum","Eld' Mon Nobis"))
|
||||
else if(is_servant_of_ratvar(M) && prob(8))
|
||||
else if(is_servant_of_ratvar(M) && prob(5))
|
||||
switch(pick("speech", "message", "emote"))
|
||||
if("speech")
|
||||
clockwork_say(M, "...[text2ratvar(pick("Engine... your light grows dark...", "Where are you, master?", "He lies rusting in Error...", "Purge all untruths and... and... something..."))]")
|
||||
M.say("...[pick("Ratvar... lbhe yvtug tebjf qnex", "Jurer ner lbh, znfgre?", "Ur yvrf ehfgvat va Reebe", "Chetr nyy hagehguf naq... naq... fbzrguvat")]...")
|
||||
if("message")
|
||||
M << "<span class='boldwarning'>[pick("Ratvar's illumination of your mind has begun to flicker", "He lies rusting in Reebe, derelict and forgotten. And there he shall stay", \
|
||||
"You can't save him. Nothing can save him now", "It seems that Nar-Sie will triumph after all")].</span>"
|
||||
M << "<span class='warning'><b>[pick("Ratvar's illumination of your mind has begun to flicker.", "He lies rusting in Reebe, derelict and forgotten. And there he shall stay.", \
|
||||
"You can't save him. Nothing can save him now.", "It seems that Nar-Sie will triumph after all.")]</b></span>"
|
||||
if("emote")
|
||||
M.visible_message("<span class='warning'>[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")].</span>")
|
||||
M.visible_message("<span class='warning'>[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")]</span>")
|
||||
if(data >= 75) // 30 units, 135 seconds
|
||||
if(iscultist(M) || is_servant_of_ratvar(M))
|
||||
if (!M.confused)
|
||||
M.confused = 1
|
||||
M.confused += 3
|
||||
if(iscultist(M) || is_handofgod_cultist(M) || is_handofgod_prophet(M) || is_servant_of_ratvar(M))
|
||||
if(iscultist(M))
|
||||
ticker.mode.remove_cultist(M.mind, 1, 1)
|
||||
else if(is_handofgod_cultist(M) || is_handofgod_prophet(M))
|
||||
ticker.mode.remove_hog_follower(M.mind)
|
||||
else if(is_servant_of_ratvar(M))
|
||||
remove_servant_of_ratvar(M)
|
||||
holder.remove_reagent(id, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
|
||||
holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
|
||||
M.jitteriness = 0
|
||||
M.stuttering = 0
|
||||
M.confused = 0
|
||||
return
|
||||
holder.remove_reagent(id, 0.4) //fixed consumption to prevent balancing going out of whack
|
||||
holder.remove_reagent(src.id, 0.4) //fixed consumption to prevent balancing going out of whack
|
||||
|
||||
/datum/reagent/water/holywater/reaction_turf(turf/T, reac_volume)
|
||||
..()
|
||||
@@ -272,7 +277,7 @@
|
||||
overdose_threshold = 11 //Slightly more than one un-nozzled spraybottle.
|
||||
|
||||
/datum/reagent/spraytan/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(ishuman(M))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(method == PATCH || method == VAPOR)
|
||||
var/mob/living/carbon/human/N = M
|
||||
if(N.dna.species.id == "human")
|
||||
@@ -300,7 +305,7 @@
|
||||
if ("albino")
|
||||
N.skin_tone = "caucasian1"
|
||||
|
||||
if(MUTCOLORS in N.dna.species.species_traits) //take current alien color and darken it slightly
|
||||
if(MUTCOLORS in N.dna.species.specflags) //take current alien color and darken it slightly
|
||||
var/newcolor = ""
|
||||
var/len = length(N.dna.features["mcolor"])
|
||||
for(var/i=1, i<=len, i+=1)
|
||||
@@ -337,178 +342,61 @@
|
||||
/datum/reagent/spraytan/overdose_process(mob/living/M)
|
||||
metabolization_rate = 1 * REAGENTS_METABOLISM
|
||||
|
||||
if(ishuman(M))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/N = M
|
||||
if(N.dna.species.id == "human") // If they're human, turn em to the "orange" race, and give em spiky black hair
|
||||
N.skin_tone = "orange"
|
||||
N.hair_style = "Spiky"
|
||||
N.hair_color = "000"
|
||||
if(MUTCOLORS in N.dna.species.species_traits) //Aliens with custom colors simply get turned orange
|
||||
if(MUTCOLORS in N.dna.species.specflags) //Aliens with custom colors simply get turned orange
|
||||
N.dna.features["mcolor"] = "f80"
|
||||
N.regenerate_icons()
|
||||
if(prob(7))
|
||||
if(N.w_uniform)
|
||||
M.visible_message(pick("<b>[M]</b>'s collar pops up without warning.</span>", "<b>[M]</b> flexes [M.p_their()] arms."))
|
||||
M.visible_message(pick("<b>[M]</b>'s collar pops up without warning.</span>", "<b>[M]</b> flexes their arms."))
|
||||
else
|
||||
M.visible_message("<b>[M]</b> [M.p_their()] their arms.")
|
||||
M.visible_message("<b>[M]</b> flexes their arms.")
|
||||
if(prob(10))
|
||||
M.say(pick("Check these sweet biceps bro!", "Deal with it.", "CHUG! CHUG! CHUG! CHUG!", "Winning!", "NERDS!", "My name is John and I hate every single one of you."))
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/stableslimetoxin
|
||||
name = "Stable Mutation Toxin"
|
||||
id = "stablemutationtoxin"
|
||||
description = "A humanizing toxin produced by slimes."
|
||||
/datum/reagent/slimetoxin
|
||||
name = "Mutation Toxin"
|
||||
id = "mutationtoxin"
|
||||
description = "A corruptive toxin produced by slimes."
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
|
||||
/datum/reagent/unstableslimetoxin
|
||||
name = "Unstable Mutation Toxin"
|
||||
id = "unstablemutationtoxin"
|
||||
description = "An unstable and unpredictable corruptive toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
metabolization_rate = INFINITY //So it instantly removes all of itself
|
||||
var/datum/species/race = /datum/species/human
|
||||
var/mutationtext = "<span class='danger'>The pain subsides. You feel... human.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/on_mob_life(mob/living/carbon/human/H)
|
||||
/datum/reagent/unstableslimetoxin/on_mob_life(mob/living/carbon/human/H)
|
||||
..()
|
||||
H << "<span class='warning'><b>You crumple in agony as your flesh wildly morphs into new forms!</b></span>"
|
||||
H.visible_message("<b>[H]</b> falls to the ground and screams as [H.p_their()] skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
|
||||
H.visible_message("<b>[H]</b> falls to the ground and screams as their skin bubbles and froths!") //'froths' sounds painful when used with SKIN.
|
||||
H.Weaken(3, 0)
|
||||
spawn(30)
|
||||
if(!H || qdeleted(H))
|
||||
return
|
||||
|
||||
var/current_species = H.dna.species.type
|
||||
var/datum/species/mutation = race
|
||||
if(mutation && mutation != current_species)
|
||||
H << mutationtext
|
||||
var/list/possible_morphs = list()
|
||||
for(var/type in subtypesof(/datum/species))
|
||||
var/datum/species/S = type
|
||||
if(initial(S.blacklisted))
|
||||
continue
|
||||
possible_morphs += S
|
||||
var/datum/species/mutation = pick(possible_morphs)
|
||||
if(prob(90) && mutation)
|
||||
H << "<span class='danger'>The pain subsides. You feel... different.</span>"
|
||||
H.set_species(mutation)
|
||||
else
|
||||
H << "<span class='danger'>The pain vanishes suddenly. You feel no different.</span>"
|
||||
|
||||
return 1
|
||||
|
||||
/datum/reagent/stableslimetoxin/classic //The one from plasma on green slimes
|
||||
name = "Mutation Toxin"
|
||||
id = "mutationtoxin"
|
||||
description = "A corruptive toxin produced by slimes."
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
race = /datum/species/jelly/slime
|
||||
mutationtext = "<span class='danger'>The pain subsides. Your whole body feels like slime.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/lizard
|
||||
name = "Lizard Mutation Toxin"
|
||||
id = "lizardmutationtoxin"
|
||||
description = "A lizarding toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/lizard
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... scaly.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/fly
|
||||
name = "Fly Mutation Toxin"
|
||||
id = "flymutationtoxin"
|
||||
description = "An insectifying toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/fly
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... buzzy.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/pod
|
||||
name = "Podperson Mutation Toxin"
|
||||
id = "podmutationtoxin"
|
||||
description = "A vegetalizing toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/pod
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... plantlike.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/jelly
|
||||
name = "Imperfect Mutation Toxin"
|
||||
id = "jellymutationtoxin"
|
||||
description = "An jellyfying toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/jelly
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... wobbly.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/golem
|
||||
name = "Golem Mutation Toxin"
|
||||
id = "golemmutationtoxin"
|
||||
description = "A crystal toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/golem/random
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... rocky.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/abductor
|
||||
name = "Abductor Mutation Toxin"
|
||||
id = "abductormutationtoxin"
|
||||
description = "An alien toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/abductor
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... alien.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/android
|
||||
name = "Android Mutation Toxin"
|
||||
id = "androidmutationtoxin"
|
||||
description = "A robotic toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/android
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... artificial.</span>"
|
||||
|
||||
|
||||
//BLACKLISTED RACES
|
||||
/datum/reagent/stableslimetoxin/skeleton
|
||||
name = "Skeleton Mutation Toxin"
|
||||
id = "skeletonmutationtoxin"
|
||||
description = "A scary toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/skeleton
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... spooky.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/zombie
|
||||
name = "Zombie Mutation Toxin"
|
||||
id = "zombiemutationtoxin"
|
||||
description = "An undead toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/zombie //Not the infectious kind. The days of xenobio zombie outbreaks are long past.
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... undead.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/ash
|
||||
name = "Ash Mutation Toxin"
|
||||
id = "ashmutationtoxin"
|
||||
description = "An ashen toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/lizard/ashwalker
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... savage.</span>"
|
||||
|
||||
|
||||
//DANGEROUS RACES
|
||||
/datum/reagent/stableslimetoxin/shadow
|
||||
name = "Shadow Mutation Toxin"
|
||||
id = "shadowmutationtoxin"
|
||||
description = "A dark toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/shadow
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... darker.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/plasma
|
||||
name = "Plasma Mutation Toxin"
|
||||
id = "plasmamutationtoxin"
|
||||
description = "A plasma-based toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
race = /datum/species/plasmaman
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... flammable.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/unstable //PSYCH
|
||||
name = "Unstable Mutation Toxin"
|
||||
id = "unstablemutationtoxin"
|
||||
description = "An unstable and unpredictable corruptive toxin produced by slimes."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
mutationtext = "<span class='danger'>The pain subsides. You feel... different.</span>"
|
||||
|
||||
/datum/reagent/stableslimetoxin/unstable/on_mob_life(mob/living/carbon/human/H)
|
||||
var/list/possible_morphs = list()
|
||||
for(var/type in subtypesof(/datum/species))
|
||||
var/datum/species/S = type
|
||||
if(initial(S.blacklisted))
|
||||
continue
|
||||
possible_morphs += S
|
||||
race = pick(possible_morphs)
|
||||
..()
|
||||
|
||||
/datum/reagent/mulligan
|
||||
name = "Mulligan Toxin"
|
||||
id = "mulligan"
|
||||
@@ -537,7 +425,6 @@
|
||||
id = "gluttonytoxin"
|
||||
description = "An advanced corruptive toxin produced by something terrible."
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/gluttonytoxin/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
M.ForceContractDisease(new /datum/disease/transformation/morph(0))
|
||||
@@ -558,7 +445,7 @@
|
||||
/datum/reagent/oxygen
|
||||
name = "Oxygen"
|
||||
id = "oxygen"
|
||||
description = "A colorless, odorless gas. Grows on trees but is still pretty valuable."
|
||||
description = "A colorless, odorless gas."
|
||||
reagent_state = GAS
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
@@ -575,14 +462,14 @@
|
||||
/datum/reagent/copper
|
||||
name = "Copper"
|
||||
id = "copper"
|
||||
description = "A highly ductile metal. Things made out of copper aren't very durable, but it makes a decent material for electrical wiring."
|
||||
description = "A highly ductile metal."
|
||||
reagent_state = SOLID
|
||||
color = "#6E3B08" // rgb: 110, 59, 8
|
||||
|
||||
/datum/reagent/nitrogen
|
||||
name = "Nitrogen"
|
||||
id = "nitrogen"
|
||||
description = "A colorless, odorless, tasteless gas. A simple asphyxiant that can silently displace vital oxygen."
|
||||
description = "A colorless, odorless, tasteless gas."
|
||||
reagent_state = GAS
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
@@ -613,11 +500,11 @@
|
||||
/datum/reagent/mercury
|
||||
name = "Mercury"
|
||||
id = "mercury"
|
||||
description = "A curious metal that's a liquid at room temperature. Neurodegenerative and very bad for the mind."
|
||||
description = "A chemical element."
|
||||
color = "#484848" // rgb: 72, 72, 72
|
||||
|
||||
/datum/reagent/mercury/on_mob_life(mob/living/M)
|
||||
if(M.canmove && isspaceturf(M.loc))
|
||||
if(M.canmove && istype(M.loc, /turf/open/space))
|
||||
step(M, pick(cardinal))
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
@@ -627,19 +514,19 @@
|
||||
/datum/reagent/sulfur
|
||||
name = "Sulfur"
|
||||
id = "sulfur"
|
||||
description = "A sickly yellow solid mostly known for its nasty smell. It's actually much more helpful than it looks in biochemisty."
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#BF8C00" // rgb: 191, 140, 0
|
||||
|
||||
/datum/reagent/carbon
|
||||
name = "Carbon"
|
||||
id = "carbon"
|
||||
description = "A crumbly black solid that, while unexciting on an physical level, forms the base of all known life. Kind of a big deal."
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#1C1300" // rgb: 30, 20, 0
|
||||
|
||||
/datum/reagent/carbon/reaction_turf(turf/T, reac_volume)
|
||||
if(!isspaceturf(T))
|
||||
if(!istype(T, /turf/open/space))
|
||||
var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents
|
||||
if(!D)
|
||||
new /obj/effect/decal/cleanable/dirt(T)
|
||||
@@ -647,19 +534,19 @@
|
||||
/datum/reagent/chlorine
|
||||
name = "Chlorine"
|
||||
id = "chlorine"
|
||||
description = "A pale yellow gas that's well known as an oxidizer. While it forms many harmless molecules in its elemental form it is far from harmless."
|
||||
description = "A chemical element."
|
||||
reagent_state = GAS
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
/datum/reagent/chlorine/on_mob_life(mob/living/M)
|
||||
M.take_bodypart_damage(1*REM, 0, 0)
|
||||
M.take_organ_damage(1*REM, 0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
/datum/reagent/fluorine
|
||||
name = "Fluorine"
|
||||
id = "fluorine"
|
||||
description = "A comically-reactive chemical element. The universe does not want this stuff to exist in this form in the slightest."
|
||||
description = "A highly-reactive chemical element."
|
||||
reagent_state = GAS
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
@@ -671,26 +558,26 @@
|
||||
/datum/reagent/sodium
|
||||
name = "Sodium"
|
||||
id = "sodium"
|
||||
description = "A soft silver metal that can easily be cut with a knife. It's not salt just yet, so refrain from putting in on your chips."
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
/datum/reagent/phosphorus
|
||||
name = "Phosphorus"
|
||||
id = "phosphorus"
|
||||
description = "A ruddy red powder that burns readily. Though it comes in many colors, the general theme is always the same."
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#832828" // rgb: 131, 40, 40
|
||||
|
||||
/datum/reagent/lithium
|
||||
name = "Lithium"
|
||||
id = "lithium"
|
||||
description = "A silver metal, it's claim to fame is its remarkably low density. Using it is a bit too effective in calming oneself down."
|
||||
description = "A chemical element."
|
||||
reagent_state = SOLID
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
|
||||
/datum/reagent/lithium/on_mob_life(mob/living/M)
|
||||
if(M.canmove && isspaceturf(M.loc))
|
||||
if(M.canmove && istype(M.loc, /turf/open/space))
|
||||
step(M, pick(cardinal))
|
||||
if(prob(5))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
@@ -715,27 +602,18 @@
|
||||
|
||||
/datum/reagent/radium/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 3)
|
||||
if(!isspaceturf(T))
|
||||
if(!istype(T, /turf/open/space))
|
||||
var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
|
||||
if(!GG)
|
||||
GG = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
GG.reagents.add_reagent("radium", reac_volume)
|
||||
|
||||
/datum/reagent/space_cleaner/sterilizine
|
||||
/datum/reagent/sterilizine
|
||||
name = "Sterilizine"
|
||||
id = "sterilizine"
|
||||
description = "Sterilizes wounds in preparation for surgery."
|
||||
color = "#C8A5DC" // rgb: 200, 165, 220
|
||||
|
||||
/datum/reagent/space_cleaner/sterilizine/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(iscarbon(M) && (method in list(TOUCH, VAPOR, PATCH)))
|
||||
var/mob/living/carbon/C = M
|
||||
for(var/s in C.surgeries)
|
||||
var/datum/surgery/S = s
|
||||
S.success_multiplier = max(0.20, S.success_multiplier)
|
||||
// +20% success propability on each step, useful while operating in less-than-perfect conditions
|
||||
..()
|
||||
|
||||
/datum/reagent/iron
|
||||
name = "Iron"
|
||||
id = "iron"
|
||||
@@ -752,7 +630,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/iron/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(!isliving(M))
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them.
|
||||
if(holder && holder.chem_temp < 100) // COLD iron.
|
||||
@@ -774,7 +652,7 @@
|
||||
color = "#D0D0D0" // rgb: 208, 208, 208
|
||||
|
||||
/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(!isliving(M))
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(M.has_bane(BANE_SILVER))
|
||||
M.reagents.add_reagent("toxin", reac_volume)
|
||||
@@ -793,7 +671,7 @@
|
||||
|
||||
/datum/reagent/uranium/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 3)
|
||||
if(!isspaceturf(T))
|
||||
if(!istype(T, /turf/open/space))
|
||||
var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
|
||||
if(!GG)
|
||||
GG = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
@@ -820,7 +698,7 @@
|
||||
color = "#660000" // rgb: 102, 0, 0
|
||||
|
||||
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
|
||||
if(!isliving(M))
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 10)
|
||||
@@ -843,12 +721,10 @@
|
||||
qdel(O)
|
||||
else
|
||||
if(O)
|
||||
O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
O.clean_blood()
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 1)
|
||||
T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
T.clean_blood()
|
||||
for(var/obj/effect/decal/cleanable/C in T)
|
||||
qdel(C)
|
||||
@@ -858,16 +734,17 @@
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(ishuman(M))
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.lip_style)
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
for(var/obj/item/I in C.held_items)
|
||||
I.clean_blood()
|
||||
if(C.r_hand)
|
||||
C.r_hand.clean_blood()
|
||||
if(C.l_hand)
|
||||
C.l_hand.clean_blood()
|
||||
if(C.wear_mask)
|
||||
if(C.wear_mask.clean_blood())
|
||||
C.update_inv_wear_mask()
|
||||
@@ -924,7 +801,6 @@
|
||||
id = "nanomachines"
|
||||
description = "Microscopic construction robots."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/nanites/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -935,7 +811,6 @@
|
||||
id = "xenomicrobes"
|
||||
description = "Microbes with an entirely alien cellular structure."
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/xenomicrobes/reaction_mob(mob/M, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -981,7 +856,7 @@
|
||||
name = "Carbon Dioxide"
|
||||
id = "co2"
|
||||
reagent_state = GAS
|
||||
description = "A gas commonly produced by burning carbon fuels. You're constantly producing this in your lungs."
|
||||
description = "A gas commonly produced by burning carbon fuels."
|
||||
color = "#B0B0B0" // rgb : 192, 192, 192
|
||||
|
||||
/datum/reagent/carbondioxide/reaction_obj(obj/O, reac_volume)
|
||||
@@ -994,23 +869,6 @@
|
||||
T.atmos_spawn_air("co2=[reac_volume/5];TEMP=[T20C]")
|
||||
return
|
||||
|
||||
/datum/reagent/nitrous_oxide
|
||||
name = "Nitrous Oxide"
|
||||
id = "nitrous_oxide"
|
||||
description = "A potent oxidizer used as fuel in rockets and as an anaesthetic during surgery."
|
||||
reagent_state = LIQUID
|
||||
color = "#808080"
|
||||
|
||||
/datum/reagent/nitrous_oxide/reaction_obj(obj/O, reac_volume)
|
||||
if((!O) || (!reac_volume))
|
||||
return 0
|
||||
O.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[T20C]")
|
||||
|
||||
/datum/reagent/nitrous_oxide/reaction_turf(turf/open/T, reac_volume)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("n2o=[reac_volume/5];TEMP=[T20C]")
|
||||
return
|
||||
|
||||
|
||||
|
||||
/////////////////////////Coloured Crayon Powder////////////////////////////
|
||||
@@ -1143,14 +1001,21 @@
|
||||
/datum/reagent/iodine
|
||||
name = "Iodine"
|
||||
id = "iodine"
|
||||
description = "Commonly added to table salt as a nutrient. On its own it tastes far less pleasing."
|
||||
description = "A slippery solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/fluorine
|
||||
name = "Fluorine"
|
||||
id = "fluorine"
|
||||
description = "A slippery solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/carpet
|
||||
name = "Carpet"
|
||||
id = "carpet"
|
||||
description = "For those that need a more creative way to roll out a red carpet."
|
||||
description = "A slippery solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
@@ -1164,35 +1029,35 @@
|
||||
/datum/reagent/bromine
|
||||
name = "Bromine"
|
||||
id = "bromine"
|
||||
description = "A brownish liquid that's highly reactive. Useful for stopping free radicals, but not intended for human consumption."
|
||||
description = "A slippery solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/phenol
|
||||
name = "Phenol"
|
||||
id = "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."
|
||||
description = "Used for certain medical recipes."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/ash
|
||||
name = "Ash"
|
||||
id = "ash"
|
||||
description = "Supposedly pheonixes rise from these, but you've never seen it."
|
||||
description = "Basic ingredient in a couple of recipes."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/acetone
|
||||
name = "Acetone"
|
||||
id = "acetone"
|
||||
description = "A slick, slightly carcinogenic liquid. Has a multitude of mundane uses in everyday life."
|
||||
description = "Common ingredient in other recipes."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
|
||||
/datum/reagent/colorful_reagent
|
||||
name = "Colorful Reagent"
|
||||
id = "colorful_reagent"
|
||||
description = "Thoroughly sample the rainbow."
|
||||
description = "A solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
|
||||
@@ -1200,29 +1065,29 @@
|
||||
|
||||
/datum/reagent/colorful_reagent/on_mob_life(mob/living/M)
|
||||
if(M && isliving(M))
|
||||
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
return
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
|
||||
if(M && isliving(M))
|
||||
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
|
||||
if(O)
|
||||
O.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
|
||||
O.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_turf(turf/T, reac_volume)
|
||||
if(T)
|
||||
T.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
|
||||
T.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/hair_dye
|
||||
name = "Quantum Hair Dye"
|
||||
id = "hair_dye"
|
||||
description = "Has a high chance of making you look like a mad scientist."
|
||||
description = "A solution."
|
||||
reagent_state = LIQUID
|
||||
color = "#C8A5DC"
|
||||
var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
|
||||
@@ -1270,21 +1135,21 @@
|
||||
/datum/reagent/saltpetre
|
||||
name = "Saltpetre"
|
||||
id = "saltpetre"
|
||||
description = "Volatile. Controversial. Third Thing."
|
||||
description = "Volatile."
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
|
||||
/datum/reagent/lye
|
||||
name = "Lye"
|
||||
id = "lye"
|
||||
description = "Also known as sodium hydroxide. As a profession making this is somewhat underwhelming."
|
||||
description = "Also known as sodium hydroxide."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFFD6" // very very light yellow
|
||||
|
||||
/datum/reagent/drying_agent
|
||||
name = "Drying agent"
|
||||
id = "drying_agent"
|
||||
description = "A desiccant. Can be used to dry things."
|
||||
description = "Can be used to dry things."
|
||||
reagent_state = LIQUID
|
||||
color = "#A70FFF"
|
||||
|
||||
@@ -1304,6 +1169,7 @@
|
||||
/datum/reagent/toxin/mutagen/mutagenvirusfood
|
||||
name = "mutagenic agar"
|
||||
id = "mutagenvirusfood"
|
||||
description = "mutates blood"
|
||||
color = "#A3C00F" // rgb: 163,192,15
|
||||
|
||||
/datum/reagent/toxin/mutagen/mutagenvirusfood/sugar
|
||||
@@ -1314,11 +1180,13 @@
|
||||
/datum/reagent/medicine/synaptizine/synaptizinevirusfood
|
||||
name = "virus rations"
|
||||
id = "synaptizinevirusfood"
|
||||
description = "mutates blood"
|
||||
color = "#D18AA5" // rgb: 209,138,165
|
||||
|
||||
/datum/reagent/toxin/plasma/plasmavirusfood
|
||||
name = "virus plasma"
|
||||
id = "plasmavirusfood"
|
||||
description = "mutates blood"
|
||||
color = "#A69DA9" // rgb: 166,157,169
|
||||
|
||||
/datum/reagent/toxin/plasma/plasmavirusfood/weak
|
||||
@@ -1326,23 +1194,6 @@
|
||||
id = "weakplasmavirusfood"
|
||||
color = "#CEC3C6" // rgb: 206,195,198
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood
|
||||
name = "decaying uranium gel"
|
||||
id = "uraniumvirusfood"
|
||||
color = "#67ADBA" // rgb: 103,173,186
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood/unstable
|
||||
name = "unstable uranium gel"
|
||||
id = "uraniumplasmavirusfood_unstable"
|
||||
color = "#2FF2CB" // rgb: 47,242,203
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood/stable
|
||||
name = "stable uranium gel"
|
||||
id = "uraniumplasmavirusfood_stable"
|
||||
color = "#04506C" // rgb: 4,80,108
|
||||
|
||||
// Bee chemicals
|
||||
|
||||
/datum/reagent/royal_bee_jelly
|
||||
name = "royal bee jelly"
|
||||
id = "royal_bee_jelly"
|
||||
@@ -1354,9 +1205,7 @@
|
||||
M.say(pick("Bzzz...","BZZ BZZ","Bzzzzzzzzzzz..."))
|
||||
..()
|
||||
|
||||
//Misc reagents
|
||||
|
||||
/datum/reagent/romerol
|
||||
datum/reagent/romerol
|
||||
name = "romerol"
|
||||
// the REAL zombie powder
|
||||
id = "romerol"
|
||||
@@ -1367,40 +1216,8 @@
|
||||
of the host body."
|
||||
color = "#123524" // RGB (18, 53, 36)
|
||||
metabolization_rate = INFINITY
|
||||
can_synth = 0
|
||||
|
||||
/datum/reagent/romerol/on_mob_life(mob/living/carbon/human/H)
|
||||
// Silently add the zombie infection organ to be activated upon death
|
||||
new /obj/item/organ/body_egg/zombie_infection(H)
|
||||
..()
|
||||
|
||||
/datum/reagent/growthserum
|
||||
name = "Growth serum"
|
||||
id = "growthserum"
|
||||
description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant
|
||||
color = "#ff0000"//strong red. rgb 255, 0, 0
|
||||
var/current_size = 1
|
||||
|
||||
/datum/reagent/growthserum/on_mob_life(mob/living/carbon/H)
|
||||
var/newsize = current_size
|
||||
switch(volume)
|
||||
if(0 to 19)
|
||||
newsize = 1.25
|
||||
if(20 to 49)
|
||||
newsize = 1.5
|
||||
if(50 to 99)
|
||||
newsize = 2
|
||||
if(100 to 199)
|
||||
newsize = 2.5
|
||||
if(200 to INFINITY)
|
||||
newsize = 3.5
|
||||
|
||||
H.resize = newsize/current_size
|
||||
current_size = newsize
|
||||
H.update_transform()
|
||||
..()
|
||||
|
||||
/datum/reagent/growthserum/on_mob_delete(mob/living/M)
|
||||
M.resize = 1/current_size
|
||||
M.update_transform()
|
||||
..()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
color = "#550000"
|
||||
|
||||
/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 1 && iswallturf(T))
|
||||
if(reac_volume >= 1 && istype(T, /turf/closed/wall))
|
||||
var/turf/closed/wall/Wall = T
|
||||
if(istype(Wall, /turf/closed/wall/r_wall))
|
||||
Wall.thermite = Wall.thermite+(reac_volume*2.5)
|
||||
@@ -54,17 +54,17 @@
|
||||
var/turf/open/floor/plating/F = T
|
||||
if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed
|
||||
F.ChangeTurf(F.baseturf)
|
||||
if(isfloorturf(T))
|
||||
if(istype(T, /turf/open/floor/))
|
||||
var/turf/open/floor/F = T
|
||||
if(prob(reac_volume))
|
||||
F.make_plating()
|
||||
else if(prob(reac_volume))
|
||||
F.burn_tile()
|
||||
if(isfloorturf(F))
|
||||
if(istype(F, /turf/open/floor/))
|
||||
for(var/turf/turf in range(1,F))
|
||||
if(!locate(/obj/effect/hotspot) in turf)
|
||||
PoolOrNew(/obj/effect/hotspot, F)
|
||||
if(iswallturf(T))
|
||||
if(istype(T, /turf/closed/wall/))
|
||||
var/turf/closed/wall/W = T
|
||||
if(prob(reac_volume))
|
||||
W.ChangeTurf(/turf/open/floor/plating)
|
||||
@@ -164,7 +164,7 @@
|
||||
/datum/reagent/cryostylane
|
||||
name = "Cryostylane"
|
||||
id = "cryostylane"
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the container 0K."
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K."
|
||||
color = "#0000DC"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
/datum/reagent/pyrosium
|
||||
name = "Pyrosium"
|
||||
id = "pyrosium"
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly heats all other reagents in the container."
|
||||
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K."
|
||||
color = "#64FAC8"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
@@ -206,20 +206,3 @@
|
||||
holder.chem_temp += 10
|
||||
holder.handle_reactions()
|
||||
..()
|
||||
|
||||
/datum/reagent/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective.
|
||||
name = "Teslium"
|
||||
id = "teslium"
|
||||
description = "An unstable, electrically-charged metallic slurry. Periodically electrocutes its victim, and makes electrocutions against them more deadly. Excessively heating teslium results in dangerous destabilization. Do not allow to come into contact with water."
|
||||
reagent_state = LIQUID
|
||||
color = "#20324D" //RGB: 32, 50, 77
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
var/shock_timer = 0
|
||||
|
||||
/datum/reagent/teslium/on_mob_life(mob/living/M)
|
||||
shock_timer++
|
||||
if(shock_timer >= rand(5,30)) //Random shocks are wildly unpredictable
|
||||
shock_timer = 0
|
||||
M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you
|
||||
playsound(M, "sparks", 50, 1)
|
||||
..()
|
||||
@@ -34,11 +34,11 @@
|
||||
if(!M.has_dna())
|
||||
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()
|
||||
randmuti(M)
|
||||
if(prob(98))
|
||||
M.randmutb()
|
||||
randmutb(M)
|
||||
else
|
||||
M.randmutg()
|
||||
randmutg(M)
|
||||
M.updateappearance()
|
||||
M.domutcheck()
|
||||
..()
|
||||
@@ -58,6 +58,7 @@
|
||||
/datum/reagent/toxin/plasma/on_mob_life(mob/living/M)
|
||||
if(holder.has_reagent("epinephrine"))
|
||||
holder.remove_reagent("epinephrine", 2*REM)
|
||||
M.apply_effect(0.5*REM/M.metabolism_efficiency,IRRADIATE,0)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
C.adjustPlasma(20)
|
||||
@@ -74,7 +75,7 @@
|
||||
return
|
||||
|
||||
/datum/reagent/toxin/plasma/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with plasma is stronger than fuel!
|
||||
if(!isliving(M))
|
||||
if(!istype(M, /mob/living))
|
||||
return
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
M.adjust_fire_stacks(reac_volume / 5)
|
||||
@@ -94,7 +95,7 @@
|
||||
if(iscarbon(M))
|
||||
C = M
|
||||
CHECK_DNA_AND_SPECIES(C)
|
||||
if(NOBREATH in C.dna.species.species_traits)
|
||||
if(NOBREATH in C.dna.species.specflags)
|
||||
. = FALSE
|
||||
|
||||
if(.)
|
||||
@@ -118,7 +119,7 @@
|
||||
M.adjustToxLoss(rand(20,60)*REM, 0)
|
||||
. = 1
|
||||
else if(prob(40))
|
||||
M.heal_bodypart_damage(5*REM,0, 0)
|
||||
M.heal_organ_damage(5*REM,0, 0)
|
||||
. = 1
|
||||
..()
|
||||
|
||||
@@ -184,10 +185,10 @@
|
||||
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
|
||||
else if(istype(O,/obj/effect/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
|
||||
else if(istype(O,/obj/effect/spacevine))
|
||||
var/obj/effect/spacevine/SV = O
|
||||
SV.on_chem_effect(src)
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
@@ -520,12 +521,12 @@
|
||||
M.adjustOxyLoss(rand(5,25), 0)
|
||||
. = 1
|
||||
if(3)
|
||||
if(ishuman(M))
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.heart_attack)
|
||||
H.heart_attack = 1 // rip in pepperoni
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.visible_message("<span class='userdanger'>[H] clutches at [H.p_their()] chest as if [H.p_their()] heart stopped!</span>")
|
||||
H.visible_message("<span class='userdanger'>[H] clutches at their chest as if their heart stopped!</span>")
|
||||
else
|
||||
H.losebreath += 10
|
||||
H.adjustOxyLoss(rand(5,25), 0)
|
||||
@@ -589,10 +590,7 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/toxin/amanitin/on_mob_delete(mob/living/M)
|
||||
var/toxdamage = current_cycle*3*REM
|
||||
M.adjustToxLoss(toxdamage)
|
||||
if(M)
|
||||
add_logs(M, get_turf(M), "has taken [toxdamage] toxin damage from amanitin toxin")
|
||||
M.adjustToxLoss(current_cycle*3*REM)
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/lipolicide
|
||||
@@ -605,9 +603,9 @@
|
||||
toxpwr = 0.5
|
||||
|
||||
/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M)
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
if(!holder.has_reagent("nutriment"))
|
||||
M.adjustToxLoss(0.5*REM, 0)
|
||||
M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time
|
||||
M.nutrition = max( M.nutrition - 5 * REAGENTS_METABOLISM, 0)
|
||||
M.overeatduration = 0
|
||||
return ..()
|
||||
|
||||
@@ -657,50 +655,25 @@
|
||||
. = 1
|
||||
return ..() || .
|
||||
|
||||
|
||||
/datum/reagent/toxin/rotatium //Rotatium. Fucks up your rotation and is hilarious
|
||||
name = "Rotatium"
|
||||
id = "rotatium"
|
||||
description = "A constantly swirling, oddly colourful fluid. Causes the consumer's sense of direction and hand-eye coordination to become wild."
|
||||
/datum/reagent/toxin/teslium //Teslium. Causes periodic shocks, and makes shocks against the target much more effective.
|
||||
name = "Teslium"
|
||||
id = "teslium"
|
||||
description = "An unstable, electrically-charged metallic slurry. Periodically electrocutes its victim, and makes electrocutions against them more deadly."
|
||||
reagent_state = LIQUID
|
||||
color = "#AC88CA" //RGB: 172, 136, 202
|
||||
metabolization_rate = 0.6 * REAGENTS_METABOLISM
|
||||
toxpwr = 0.5
|
||||
color = "#20324D" //RGB: 32, 50, 77
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
var/shock_timer = 0
|
||||
|
||||
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/M)
|
||||
if(M.hud_used)
|
||||
if(current_cycle >= 20 && current_cycle%20 == 0)
|
||||
var/list/screens = list(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_delete(mob/living/M)
|
||||
if(M && M.hud_used)
|
||||
var/list/screens = list(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/teslium/on_mob_life(mob/living/M)
|
||||
shock_timer++
|
||||
if(shock_timer >= rand(5,30)) //Random shocks are wildly unpredictable
|
||||
shock_timer = 0
|
||||
M.electrocute_act(rand(5,20), "Teslium in their body", 1, 1) //Override because it's caused from INSIDE of you
|
||||
playsound(M, "sparks", 50, 1)
|
||||
..()
|
||||
|
||||
/datum/reagent/toxin/anacea
|
||||
name = "Anacea"
|
||||
id = "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/M)
|
||||
var/remove_amt = 5
|
||||
if(holder.has_reagent("calomel") || holder.has_reagent("pen_acid"))
|
||||
remove_amt = 0.5
|
||||
for(var/datum/reagent/medicine/R in M.reagents.reagent_list)
|
||||
M.reagents.remove_reagent(R.id,remove_amt)
|
||||
return ..()
|
||||
|
||||
|
||||
//ACID
|
||||
|
||||
|
||||
@@ -715,6 +688,8 @@
|
||||
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
|
||||
if(!istype(C))
|
||||
return
|
||||
if(C.dna && C.dna.species.id == "xeno")
|
||||
return
|
||||
reac_volume = round(reac_volume,0.1)
|
||||
if(method == INGEST)
|
||||
C.adjustBruteLoss(min(6*toxpwr, reac_volume * toxpwr))
|
||||
@@ -722,7 +697,7 @@
|
||||
if(method == INJECT)
|
||||
C.adjustBruteLoss(1.5 * min(6*toxpwr, reac_volume * toxpwr))
|
||||
return
|
||||
C.acid_act(acidpwr, reac_volume)
|
||||
C.acid_act(acidpwr, toxpwr, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O.loc, /mob)) //handled in human acid_act()
|
||||
@@ -734,7 +709,8 @@
|
||||
if (!istype(T))
|
||||
return
|
||||
reac_volume = round(reac_volume,0.1)
|
||||
T.acid_act(acidpwr, reac_volume)
|
||||
for(var/obj/O in T)
|
||||
O.acid_act(acidpwr, reac_volume)
|
||||
|
||||
/datum/reagent/toxin/acid/fluacid
|
||||
name = "Fluorosulfuric acid"
|
||||
@@ -757,10 +733,8 @@
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/toxin/peaceborg/confuse/on_mob_life(mob/living/M)
|
||||
if(M.confused < 6)
|
||||
M.confused = Clamp(M.confused + 3, 0, 5)
|
||||
if(M.dizziness < 6)
|
||||
M.dizziness = Clamp(M.dizziness + 3, 0, 5)
|
||||
M.confused += 1
|
||||
M.Dizzy(1)
|
||||
if(prob(20))
|
||||
M << "You feel confused and disorientated."
|
||||
..()
|
||||
@@ -773,9 +747,8 @@
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/toxin/peaceborg/tire/on_mob_life(mob/living/M)
|
||||
var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS.
|
||||
if(M.staminaloss < (45 - healthcomp)) //At 50 health you would have 200 - 150 health meaning 50 compensation. 60 - 50 = 10, so would only do 10-19 stamina.)
|
||||
if(M.staminaloss < 50)
|
||||
M.adjustStaminaLoss(10)
|
||||
if(prob(30))
|
||||
M << "You should sit down and take a rest..."
|
||||
..()
|
||||
..()
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/chemical_reaction
|
||||
var/name = null
|
||||
var/id = null
|
||||
var/list/results = new/list()
|
||||
var/result = null
|
||||
var/list/required_reagents = new/list()
|
||||
var/list/required_catalysts = new/list()
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
var/atom/required_container = null // the container required for the reaction to happen
|
||||
var/required_other = 0 // an integer required for the reaction to happen
|
||||
|
||||
var/result_amount = 0
|
||||
var/secondary = 0 // set to nonzero if secondary reaction
|
||||
var/mob_react = 0 //Determines if a chemical reaction can occur inside a mob
|
||||
|
||||
var/required_temp = 0
|
||||
var/is_cold_recipe = 0 // Set to 1 if you want the recipe to only react when it's BELOW the required temp.
|
||||
var/mix_message = "The solution begins to bubble." //The message shown to nearby people upon mixing, if applicable
|
||||
var/mix_sound = 'sound/effects/bubbles.ogg' //The sound played upon mixing, if applicable
|
||||
|
||||
@@ -36,7 +36,7 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
|
||||
var/atom/A = holder.my_atom
|
||||
var/turf/T = get_turf(A)
|
||||
var/area/my_area = get_area(T)
|
||||
var/message = "A [reaction_name] reaction has occurred in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
|
||||
var/message = "A [reaction_name] reaction has occured in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
|
||||
message += " (<A HREF='?_src_=vars;Vars=\ref[A]'>VV</A>)"
|
||||
|
||||
var/mob/M = get(A, /mob)
|
||||
@@ -50,16 +50,16 @@ var/list/chemical_mob_spawn_nicecritters = list() // and possible friendly mobs
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
|
||||
C.flash_act()
|
||||
C.flash_eyes()
|
||||
for(var/i = 1, i <= amount_to_spawn, i++)
|
||||
var/chosen
|
||||
if (reaction_name == "Friendly Gold Slime")
|
||||
chosen = pick(chemical_mob_spawn_nicecritters)
|
||||
else
|
||||
chosen = pick(chemical_mob_spawn_meancritters)
|
||||
var/spawnloc = get_turf(holder.my_atom)
|
||||
var/mob/living/simple_animal/C = new chosen(spawnloc)
|
||||
var/mob/living/simple_animal/C = new chosen
|
||||
C.faction |= mob_faction
|
||||
C.loc = get_turf(holder.my_atom)
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(C, pick(NORTH,SOUTH,EAST,WEST))
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
/datum/chemical_reaction/space_drugs
|
||||
name = "Space Drugs"
|
||||
id = "space_drugs"
|
||||
results = list("space_drugs" = 3)
|
||||
result = "space_drugs"
|
||||
required_reagents = list("mercury" = 1, "sugar" = 1, "lithium" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/crank
|
||||
name = "Crank"
|
||||
id = "crank"
|
||||
results = list("crank" = 5)
|
||||
result = "crank"
|
||||
required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "welding_fuel" = 1)
|
||||
result_amount = 5
|
||||
mix_message = "The mixture violently reacts, leaving behind a few crystalline shards."
|
||||
required_temp = 390
|
||||
|
||||
@@ -16,27 +18,31 @@
|
||||
/datum/chemical_reaction/krokodil
|
||||
name = "Krokodil"
|
||||
id = "krokodil"
|
||||
results = list("krokodil" = 6)
|
||||
result = "krokodil"
|
||||
required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "welding_fuel" = 1)
|
||||
result_amount = 6
|
||||
mix_message = "The mixture dries into a pale blue powder."
|
||||
required_temp = 380
|
||||
|
||||
/datum/chemical_reaction/methamphetamine
|
||||
name = "methamphetamine"
|
||||
id = "methamphetamine"
|
||||
results = list("methamphetamine" = 4)
|
||||
result = "methamphetamine"
|
||||
required_reagents = list("ephedrine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1)
|
||||
result_amount = 4
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/bath_salts
|
||||
name = "bath_salts"
|
||||
id = "bath_salts"
|
||||
results = list("bath_salts" = 7)
|
||||
result = "bath_salts"
|
||||
required_reagents = list("????" = 1, "saltpetre" = 1, "nutriment" = 1, "cleaner" = 1, "enzyme" = 1, "tea" = 1, "mercury" = 1)
|
||||
result_amount = 7
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/aranesp
|
||||
name = "aranesp"
|
||||
id = "aranesp"
|
||||
results = list("aranesp" = 3)
|
||||
result = "aranesp"
|
||||
required_reagents = list("epinephrine" = 1, "atropine" = 1, "morphine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
@@ -2,214 +2,249 @@
|
||||
/datum/chemical_reaction/leporazine
|
||||
name = "Leporazine"
|
||||
id = "leporazine"
|
||||
results = list("leporazine" = 2)
|
||||
result = "leporazine"
|
||||
required_reagents = list("silicon" = 1, "copper" = 1)
|
||||
required_catalysts = list("plasma" = 5)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/rezadone
|
||||
name = "Rezadone"
|
||||
id = "rezadone"
|
||||
results = list("rezadone" = 3)
|
||||
result = "rezadone"
|
||||
required_reagents = list("carpotoxin" = 1, "cryptobiolin" = 1, "copper" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/spaceacillin
|
||||
name = "Spaceacillin"
|
||||
id = "spaceacillin"
|
||||
results = list("spaceacillin" = 2)
|
||||
result = "spaceacillin"
|
||||
required_reagents = list("cryptobiolin" = 1, "epinephrine" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/inacusiate
|
||||
name = "inacusiate"
|
||||
id = "inacusiate"
|
||||
results = list("inacusiate" = 2)
|
||||
result = "inacusiate"
|
||||
required_reagents = list("water" = 1, "carbon" = 1, "charcoal" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/synaptizine
|
||||
name = "Synaptizine"
|
||||
id = "synaptizine"
|
||||
results = list("synaptizine" = 3)
|
||||
result = "synaptizine"
|
||||
required_reagents = list("sugar" = 1, "lithium" = 1, "water" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/charcoal
|
||||
name = "Charcoal"
|
||||
id = "charcoal"
|
||||
results = list("charcoal" = 2)
|
||||
result = "charcoal"
|
||||
required_reagents = list("ash" = 1, "sodiumchloride" = 1)
|
||||
result_amount = 2
|
||||
mix_message = "The mixture yields a fine black powder."
|
||||
required_temp = 380
|
||||
|
||||
/datum/chemical_reaction/silver_sulfadiazine
|
||||
name = "Silver Sulfadiazine"
|
||||
id = "silver_sulfadiazine"
|
||||
results = list("silver_sulfadiazine" = 5)
|
||||
result = "silver_sulfadiazine"
|
||||
required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/salglu_solution
|
||||
name = "Saline-Glucose Solution"
|
||||
id = "salglu_solution"
|
||||
results = list("salglu_solution" = 3)
|
||||
result = "salglu_solution"
|
||||
required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/mine_salve
|
||||
name = "Miner's Salve"
|
||||
id = "mine_salve"
|
||||
results = list("mine_salve" = 3)
|
||||
result = "mine_salve"
|
||||
required_reagents = list("oil" = 1, "water" = 1, "iron" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/mine_salve2
|
||||
name = "Miner's Salve"
|
||||
id = "mine_salve"
|
||||
results = list("mine_salve" = 15)
|
||||
result = "mine_salve"
|
||||
required_reagents = list("plasma" = 5, "iron" = 5, "sugar" = 1) // A sheet of plasma, a twinkie and a sheet of metal makes four of these
|
||||
result_amount = 15
|
||||
|
||||
/datum/chemical_reaction/synthflesh
|
||||
name = "Synthflesh"
|
||||
id = "synthflesh"
|
||||
results = list("synthflesh" = 3)
|
||||
result = "synthflesh"
|
||||
required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/styptic_powder
|
||||
name = "Styptic Powder"
|
||||
id = "styptic_powder"
|
||||
results = list("styptic_powder" = 4)
|
||||
result = "styptic_powder"
|
||||
required_reagents = list("aluminium" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The solution yields an astringent powder."
|
||||
|
||||
/datum/chemical_reaction/calomel
|
||||
name = "Calomel"
|
||||
id = "calomel"
|
||||
results = list("calomel" = 2)
|
||||
result = "calomel"
|
||||
required_reagents = list("mercury" = 1, "chlorine" = 1)
|
||||
result_amount = 2
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/potass_iodide
|
||||
name = "Potassium Iodide"
|
||||
id = "potass_iodide"
|
||||
results = list("potass_iodide" = 2)
|
||||
result = "potass_iodide"
|
||||
required_reagents = list("potassium" = 1, "iodine" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/pen_acid
|
||||
name = "Pentetic Acid"
|
||||
id = "pen_acid"
|
||||
results = list("pen_acid" = 6)
|
||||
result = "pen_acid"
|
||||
required_reagents = list("welding_fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1)
|
||||
result_amount = 6
|
||||
|
||||
/datum/chemical_reaction/sal_acid
|
||||
name = "Salicyclic Acid"
|
||||
id = "sal_acid"
|
||||
results = list("sal_acid" = 5)
|
||||
result = "sal_acid"
|
||||
required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/oxandrolone
|
||||
name = "Oxandrolone"
|
||||
id = "oxandrolone"
|
||||
results = list("oxandrolone" = 6)
|
||||
result = "oxandrolone"
|
||||
required_reagents = list("carbon" = 3, "phenol" = 1, "hydrogen" = 1, "oxygen" = 1)
|
||||
result_amount = 6
|
||||
|
||||
/datum/chemical_reaction/salbutamol
|
||||
name = "Salbutamol"
|
||||
id = "salbutamol"
|
||||
results = list("salbutamol" = 5)
|
||||
result = "salbutamol"
|
||||
required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminium" = 1, "bromine" = 1, "ammonia" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/perfluorodecalin
|
||||
name = "Perfluorodecalin"
|
||||
id = "perfluorodecalin"
|
||||
results = list("perfluorodecalin" = 3)
|
||||
result = "perfluorodecalin"
|
||||
required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1)
|
||||
result_amount = 3
|
||||
required_temp = 370
|
||||
mix_message = "The mixture rapidly turns into a dense pink liquid."
|
||||
|
||||
/datum/chemical_reaction/ephedrine
|
||||
name = "Ephedrine"
|
||||
id = "ephedrine"
|
||||
results = list("ephedrine" = 4)
|
||||
result = "ephedrine"
|
||||
required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The solution fizzes and gives off toxic fumes."
|
||||
|
||||
/datum/chemical_reaction/diphenhydramine
|
||||
name = "Diphenhydramine"
|
||||
id = "diphenhydramine"
|
||||
results = list("diphenhydramine" = 4)
|
||||
result = "diphenhydramine"
|
||||
required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "The mixture dries into a pale blue powder."
|
||||
|
||||
/datum/chemical_reaction/oculine
|
||||
name = "Oculine"
|
||||
id = "oculine"
|
||||
results = list("oculine" = 3)
|
||||
result = "oculine"
|
||||
required_reagents = list("charcoal" = 1, "carbon" = 1, "hydrogen" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The mixture sputters loudly and becomes a pale pink color."
|
||||
|
||||
/datum/chemical_reaction/atropine
|
||||
name = "Atropine"
|
||||
id = "atropine"
|
||||
results = list("atropine" = 5)
|
||||
result = "atropine"
|
||||
required_reagents = list("ethanol" = 1, "acetone" = 1, "diethylamine" = 1, "phenol" = 1, "sacid" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/epinephrine
|
||||
name = "Epinephrine"
|
||||
id = "epinephrine"
|
||||
results = list("epinephrine" = 6)
|
||||
result = "epinephrine"
|
||||
required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1)
|
||||
result_amount = 6
|
||||
|
||||
/datum/chemical_reaction/strange_reagent
|
||||
name = "Strange Reagent"
|
||||
id = "strange_reagent"
|
||||
results = list("strange_reagent" = 3)
|
||||
result = "strange_reagent"
|
||||
required_reagents = list("omnizine" = 1, "holywater" = 1, "mutagen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/mannitol
|
||||
name = "Mannitol"
|
||||
id = "mannitol"
|
||||
results = list("mannitol" = 3)
|
||||
result = "mannitol"
|
||||
required_reagents = list("sugar" = 1, "hydrogen" = 1, "water" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "The solution slightly bubbles, becoming thicker."
|
||||
|
||||
/datum/chemical_reaction/mutadone
|
||||
name = "Mutadone"
|
||||
id = "mutadone"
|
||||
results = list("mutadone" = 3)
|
||||
result = "mutadone"
|
||||
required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/antihol
|
||||
name = "antihol"
|
||||
id = "antihol"
|
||||
results = list("antihol" = 3)
|
||||
result = "antihol"
|
||||
required_reagents = list("ethanol" = 1, "charcoal" = 1, "copper" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/cryoxadone
|
||||
name = "Cryoxadone"
|
||||
id = "cryoxadone"
|
||||
results = list("cryoxadone" = 3)
|
||||
result = "cryoxadone"
|
||||
required_reagents = list("stable_plasma" = 1, "acetone" = 1, "mutagen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/haloperidol
|
||||
name = "Haloperidol"
|
||||
id = "haloperidol"
|
||||
results = list("haloperidol" = 5)
|
||||
result = "haloperidol"
|
||||
required_reagents = list("chlorine" = 1, "fluorine" = 1, "aluminium" = 1, "potass_iodide" = 1, "oil" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/bicaridine
|
||||
name = "Bicaridine"
|
||||
id = "bicaridine"
|
||||
results = list("bicaridine" = 3)
|
||||
result = "bicaridine"
|
||||
required_reagents = list("carbon" = 1, "oxygen" = 1, "sugar" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/kelotane
|
||||
name = "Kelotane"
|
||||
id = "kelotane"
|
||||
results = list("kelotane" = 2)
|
||||
result = "kelotane"
|
||||
required_reagents = list("carbon" = 1, "silicon" = 1)
|
||||
result_amount = 2
|
||||
|
||||
|
||||
/datum/chemical_reaction/antitoxin
|
||||
name = "Antitoxin"
|
||||
id = "antitoxin"
|
||||
results = list("antitoxin" = 3)
|
||||
result = "antitoxin"
|
||||
required_reagents = list("nitrogen" = 1, "silicon" = 1, "potassium" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/tricordrazine
|
||||
name = "Tricordrazine"
|
||||
id = "tricordrazine"
|
||||
results = list("tricordrazine" = 3)
|
||||
required_reagents = list("bicaridine" = 1, "kelotane" = 1, "antitoxin" = 1)
|
||||
result = "tricordrazine"
|
||||
required_reagents = list("bicaridine" = 1, "kelotane" = 1, "antitoxin" = 1)
|
||||
result_amount = 3
|
||||
@@ -2,293 +2,183 @@
|
||||
/datum/chemical_reaction/sterilizine
|
||||
name = "Sterilizine"
|
||||
id = "sterilizine"
|
||||
results = list("sterilizine" = 3)
|
||||
result = "sterilizine"
|
||||
required_reagents = list("ethanol" = 1, "charcoal" = 1, "chlorine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/lube
|
||||
name = "Space Lube"
|
||||
id = "lube"
|
||||
results = list("lube" = 4)
|
||||
result = "lube"
|
||||
required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/spraytan
|
||||
name = "Spray Tan"
|
||||
id = "spraytan"
|
||||
results = list("spraytan" = 2)
|
||||
result = "spraytan"
|
||||
required_reagents = list("orangejuice" = 1, "oil" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/spraytan2
|
||||
name = "Spray Tan"
|
||||
id = "spraytan"
|
||||
results = list("spraytan" = 2)
|
||||
result = "spraytan"
|
||||
required_reagents = list("orangejuice" = 1, "cornoil" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/impedrezene
|
||||
name = "Impedrezene"
|
||||
id = "impedrezene"
|
||||
results = list("impedrezene" = 2)
|
||||
result = "impedrezene"
|
||||
required_reagents = list("mercury" = 1, "oxygen" = 1, "sugar" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/cryptobiolin
|
||||
name = "Cryptobiolin"
|
||||
id = "cryptobiolin"
|
||||
results = list("cryptobiolin" = 3)
|
||||
result = "cryptobiolin"
|
||||
required_reagents = list("potassium" = 1, "oxygen" = 1, "sugar" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/glycerol
|
||||
name = "Glycerol"
|
||||
id = "glycerol"
|
||||
results = list("glycerol" = 1)
|
||||
result = "glycerol"
|
||||
required_reagents = list("cornoil" = 3, "sacid" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/sodiumchloride
|
||||
name = "Sodium Chloride"
|
||||
id = "sodiumchloride"
|
||||
results = list("sodiumchloride" = 3)
|
||||
result = "sodiumchloride"
|
||||
required_reagents = list("water" = 1, "sodium" = 1, "chlorine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/plasmasolidification
|
||||
name = "Solid Plasma"
|
||||
id = "solidplasma"
|
||||
result = null
|
||||
required_reagents = list("iron" = 5, "frostoil" = 5, "plasma" = 20)
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/stack/sheet/mineral/plasma(location)
|
||||
new /obj/item/stack/sheet/mineral/plasma(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/goldsolidification
|
||||
name = "Solid Gold"
|
||||
id = "solidgold"
|
||||
required_reagents = list("frostoil" = 5, "gold" = 20, "iron" = 1)
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/stack/sheet/mineral/gold(location)
|
||||
|
||||
/datum/chemical_reaction/capsaicincondensation
|
||||
name = "Capsaicincondensation"
|
||||
id = "capsaicincondensation"
|
||||
results = list("condensedcapsaicin" = 5)
|
||||
result = "condensedcapsaicin"
|
||||
required_reagents = list("capsaicin" = 1, "ethanol" = 5)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/soapification
|
||||
name = "Soapification"
|
||||
id = "soapification"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 10, "lye" = 10) // requires two scooped gib tiles
|
||||
required_temp = 374
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/weapon/soap/homemade(location)
|
||||
new /obj/item/weapon/soap/homemade(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/candlefication
|
||||
name = "Candlefication"
|
||||
id = "candlefication"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 5, "oxygen" = 5) //
|
||||
required_temp = 374
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/candle(location)
|
||||
new /obj/item/candle(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/meatification
|
||||
name = "Meatification"
|
||||
id = "meatification"
|
||||
result = null
|
||||
required_reagents = list("liquidgibs" = 10, "nutriment" = 10, "carbon" = 10)
|
||||
result_amount = 1
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct(location)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct(location)
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/carbondioxide
|
||||
name = "Direct Carbon Oxidation"
|
||||
id = "burningcarbon"
|
||||
results = list("co2" = 3)
|
||||
result = "co2"
|
||||
required_reagents = list("carbon" = 1, "oxygen" = 2)
|
||||
required_temp = 777 // pure carbon isn't especially reactive.
|
||||
|
||||
/datum/chemical_reaction/nitrous_oxide
|
||||
name = "Nitrous Oxide"
|
||||
id = "nitrous_oxide"
|
||||
results = list("nitrous_oxide" = 2, "water" = 4)
|
||||
required_reagents = list("ammonia" = 3, "nitrogen" = 1, "oxygen" = 2)
|
||||
required_temp = 525
|
||||
|
||||
////////////////////////////////// Mutation Toxins ///////////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/stable_mutation_toxin
|
||||
name = "Stable Mutation Toxin"
|
||||
id = "stablemutationtoxin"
|
||||
results = list("stablemutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "blood" = 1) //classic
|
||||
|
||||
/datum/chemical_reaction/lizard_mutation_toxin
|
||||
name = "Lizard Mutation Toxin"
|
||||
id = "lizardmutationtoxin"
|
||||
results = list("lizardmutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "radium" = 1) //mutant
|
||||
|
||||
/datum/chemical_reaction/fly_mutation_toxin
|
||||
name = "Fly Mutation Toxin"
|
||||
id = "flymutationtoxin"
|
||||
results = list("flymutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "mutagen" = 1) //VERY mutant
|
||||
|
||||
/datum/chemical_reaction/jelly_mutation_toxin
|
||||
name = "Imperfect Mutation Toxin"
|
||||
id = "jellymutationtoxin"
|
||||
results = list("jellymutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "slimejelly" = 1) //why would you even make this
|
||||
|
||||
/datum/chemical_reaction/abductor_mutation_toxin
|
||||
name = "Abductor Mutation Toxin"
|
||||
id = "abductormutationtoxin"
|
||||
results = list("abductormutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "morphine" = 1)
|
||||
|
||||
/datum/chemical_reaction/android_mutation_toxin
|
||||
name = "Android Mutation Toxin"
|
||||
id = "androidmutationtoxin"
|
||||
results = list("androidmutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "teslium" = 1) //beep boop
|
||||
|
||||
/datum/chemical_reaction/pod_mutation_toxin
|
||||
name = "Podperson Mutation Toxin"
|
||||
id = "podmutationtoxin"
|
||||
results = list("podmutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "eznutriment" = 1) //plant food
|
||||
|
||||
/datum/chemical_reaction/golem_mutation_toxin
|
||||
name = "Golem Mutation Toxin"
|
||||
id = "golemmutationtoxin"
|
||||
results = list("golemmutationtoxin" = 1)
|
||||
required_reagents = list("unstablemutationtoxin" = 1, "silver" = 1) //not too hard to get but also not just there in xenobio
|
||||
|
||||
|
||||
//BLACKLISTED RACES
|
||||
/datum/chemical_reaction/skeleton_mutation_toxin
|
||||
name = "Skeleton Mutation Toxin"
|
||||
id = "skeletonmutationtoxin"
|
||||
results = list("skeletonmutationtoxin" = 1)
|
||||
required_reagents = list("amutationtoxin" = 1, "milk" = 1) //good for yer bones
|
||||
|
||||
/datum/chemical_reaction/zombie_mutation_toxin
|
||||
name = "Zombie Mutation Toxin"
|
||||
id = "zombiemutationtoxin"
|
||||
results = list("zombiemutationtoxin" = 1)
|
||||
required_reagents = list("amutationtoxin" = 1, "toxin" = 1)
|
||||
|
||||
/datum/chemical_reaction/ash_mutation_toxin //ash lizard
|
||||
name = "Ash Mutation Toxin"
|
||||
id = "ashmutationtoxin"
|
||||
results = list("ashmutationtoxin" = 1)
|
||||
required_reagents = list("amutationtoxin" = 1, "lizardmutationtoxin" = 1, "ash" = 1)
|
||||
|
||||
|
||||
//DANGEROUS RACES
|
||||
/datum/chemical_reaction/plasma_mutation_toxin
|
||||
name = "Plasma Mutation Toxin"
|
||||
id = "plasmamutationtoxin"
|
||||
results = list("plasmamutationtoxin" = 1)
|
||||
required_reagents = list("skeletonmutationtoxin" = 1, "plasma" = 1, "uranium" = 1) //this is very fucking powerful, so it's hard to make
|
||||
|
||||
/datum/chemical_reaction/shadow_mutation_toxin
|
||||
name = "Shadow Mutation Toxin"
|
||||
id = "shadowmutationtoxin"
|
||||
results = list("shadowmutationtoxin" = 1)
|
||||
required_reagents = list("amutationtoxin" = 1, "liquid_dark_matter" = 1, "holywater" = 1)
|
||||
|
||||
//Technically a mutation toxin
|
||||
/datum/chemical_reaction/mulligan
|
||||
name = "Mulligan"
|
||||
id = "mulligan"
|
||||
results = list("mulligan" = 1)
|
||||
required_reagents = list("humanmutationtoxin" = 1, "mutagen" = 1)
|
||||
|
||||
result_amount = 3
|
||||
|
||||
////////////////////////////////// VIROLOGY //////////////////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/virus_food
|
||||
name = "Virus Food"
|
||||
id = "virusfood"
|
||||
results = list("virusfood" = 15)
|
||||
result = "virusfood"
|
||||
required_reagents = list("water" = 5, "milk" = 5)
|
||||
result_amount = 15
|
||||
|
||||
/datum/chemical_reaction/virus_food_mutagen
|
||||
name = "mutagenic agar"
|
||||
id = "mutagenvirusfood"
|
||||
results = list("mutagenvirusfood" = 1)
|
||||
result = "mutagenvirusfood"
|
||||
required_reagents = list("mutagen" = 1, "virusfood" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/virus_food_synaptizine
|
||||
name = "virus rations"
|
||||
id = "synaptizinevirusfood"
|
||||
results = list("synaptizinevirusfood" = 1)
|
||||
result = "synaptizinevirusfood"
|
||||
required_reagents = list("synaptizine" = 1, "virusfood" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/virus_food_plasma
|
||||
name = "virus plasma"
|
||||
id = "plasmavirusfood"
|
||||
results = list("plasmavirusfood" = 1)
|
||||
result = "plasmavirusfood"
|
||||
required_reagents = list("plasma" = 1, "virusfood" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/virus_food_plasma_synaptizine
|
||||
name = "weakened virus plasma"
|
||||
id = "weakplasmavirusfood"
|
||||
results = list("weakplasmavirusfood" = 2)
|
||||
result = "weakplasmavirusfood"
|
||||
required_reagents = list("synaptizine" = 1, "plasmavirusfood" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/virus_food_mutagen_sugar
|
||||
name = "sucrose agar"
|
||||
id = "sugarvirusfood"
|
||||
results = list("sugarvirusfood" = 2)
|
||||
result = "sugarvirusfood"
|
||||
required_reagents = list("sugar" = 1, "mutagenvirusfood" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/virus_food_mutagen_salineglucose
|
||||
name = "sucrose agar"
|
||||
id = "salineglucosevirusfood"
|
||||
results = list("sugarvirusfood" = 2)
|
||||
result = "sugarvirusfood"
|
||||
required_reagents = list("salglu_solution" = 1, "mutagenvirusfood" = 1)
|
||||
|
||||
/datum/chemical_reaction/virus_food_uranium
|
||||
name = "Decaying uranium gel"
|
||||
id = "uraniumvirusfood"
|
||||
results = list("uraniumvirusfood" = 1)
|
||||
required_reagents = list("uranium" = 1, "virusfood" = 1)
|
||||
|
||||
/datum/chemical_reaction/virus_food_uranium_plasma
|
||||
name = "Unstable uranium gel"
|
||||
id = "uraniumvirusfood_plasma"
|
||||
results = list("uraniumplasmavirusfood_unstable" = 1)
|
||||
required_reagents = list("uranium" = 5, "plasmavirusfood" = 1)
|
||||
|
||||
/datum/chemical_reaction/virus_food_uranium_plasma_gold
|
||||
name = "Stable uranium gel"
|
||||
id = "uraniumvirusfood_gold"
|
||||
results = list("uraniumplasmavirusfood_stable" = 1)
|
||||
required_reagents = list("uranium" = 10, "gold" = 10, "plasma" = 1)
|
||||
|
||||
/datum/chemical_reaction/virus_food_uranium_plasma_silver
|
||||
name = "Stable uranium gel"
|
||||
id = "uraniumvirusfood_silver"
|
||||
results = list("uraniumplasmavirusfood_stable" = 1)
|
||||
required_reagents = list("uranium" = 10, "silver" = 10, "plasma" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/mix_virus
|
||||
name = "Mix Virus"
|
||||
id = "mixvirus"
|
||||
results = list("blood" = 1)
|
||||
result = "blood"
|
||||
required_reagents = list("virusfood" = 1)
|
||||
required_catalysts = list("blood" = 1)
|
||||
var/level_min = 0
|
||||
@@ -367,30 +257,6 @@
|
||||
level_min = 1
|
||||
level_max = 1
|
||||
|
||||
/datum/chemical_reaction/mix_virus/mix_virus_10
|
||||
|
||||
name = "Mix Virus 10"
|
||||
id = "mixvirus10"
|
||||
required_reagents = list("uraniumvirusfood" = 5)
|
||||
level_min = 6
|
||||
level_max = 7
|
||||
|
||||
/datum/chemical_reaction/mix_virus/mix_virus_11
|
||||
|
||||
name = "Mix Virus 11"
|
||||
id = "mixvirus11"
|
||||
required_reagents = list("uraniumplasmavirusfood_unstable" = 5)
|
||||
level_min = 7
|
||||
level_max = 7
|
||||
|
||||
/datum/chemical_reaction/mix_virus/mix_virus_12
|
||||
|
||||
name = "Mix Virus 12"
|
||||
id = "mixvirus12"
|
||||
required_reagents = list("uraniumplasmavirusfood_stable" = 5)
|
||||
level_min = 8
|
||||
level_max = 8
|
||||
|
||||
/datum/chemical_reaction/mix_virus/rem_virus
|
||||
|
||||
name = "Devolve Virus"
|
||||
@@ -414,13 +280,17 @@
|
||||
/datum/chemical_reaction/surfactant
|
||||
name = "Foam surfactant"
|
||||
id = "foam surfactant"
|
||||
results = list("fluorosurfactant" = 5)
|
||||
result = "fluorosurfactant"
|
||||
required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
|
||||
result_amount = 5
|
||||
|
||||
|
||||
/datum/chemical_reaction/foam
|
||||
name = "Foam"
|
||||
id = "foam"
|
||||
result = null
|
||||
required_reagents = list("fluorosurfactant" = 1, "water" = 1)
|
||||
result_amount = 2
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume)
|
||||
@@ -428,7 +298,7 @@
|
||||
for(var/mob/M in viewers(5, location))
|
||||
M << "<span class='danger'>The solution spews out foam!</span>"
|
||||
var/datum/effect_system/foam_spread/s = new()
|
||||
s.set_up(created_volume*2, location, holder)
|
||||
s.set_up(created_volume, location, holder)
|
||||
s.start()
|
||||
holder.clear_reagents()
|
||||
return
|
||||
@@ -437,7 +307,9 @@
|
||||
/datum/chemical_reaction/metalfoam
|
||||
name = "Metal Foam"
|
||||
id = "metalfoam"
|
||||
result = null
|
||||
required_reagents = list("aluminium" = 3, "foaming_agent" = 1, "facid" = 1)
|
||||
result_amount = 5
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume)
|
||||
@@ -447,14 +319,16 @@
|
||||
M << "<span class='danger'>The solution spews out a metallic foam!</span>"
|
||||
|
||||
var/datum/effect_system/foam_spread/metal/s = new()
|
||||
s.set_up(created_volume*5, location, holder, 1)
|
||||
s.set_up(created_volume, location, holder, 1)
|
||||
s.start()
|
||||
holder.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/ironfoam
|
||||
name = "Iron Foam"
|
||||
id = "ironlfoam"
|
||||
result = null
|
||||
required_reagents = list("iron" = 3, "foaming_agent" = 1, "facid" = 1)
|
||||
result_amount = 5
|
||||
mob_react = 1
|
||||
|
||||
/datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume)
|
||||
@@ -462,15 +336,16 @@
|
||||
for(var/mob/M in viewers(5, location))
|
||||
M << "<span class='danger'>The solution spews out a metallic foam!</span>"
|
||||
var/datum/effect_system/foam_spread/metal/s = new()
|
||||
s.set_up(created_volume*5, location, holder, 2)
|
||||
s.set_up(created_volume, location, holder, 2)
|
||||
s.start()
|
||||
holder.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/foaming_agent
|
||||
name = "Foaming Agent"
|
||||
id = "foaming_agent"
|
||||
results = list("foaming_agent" = 1)
|
||||
result = "foaming_agent"
|
||||
required_reagents = list("lithium" = 1, "hydrogen" = 1)
|
||||
result_amount = 1
|
||||
|
||||
|
||||
/////////////////////////////// Cleaning and hydroponics /////////////////////////////////////////////////
|
||||
@@ -478,149 +353,167 @@
|
||||
/datum/chemical_reaction/ammonia
|
||||
name = "Ammonia"
|
||||
id = "ammonia"
|
||||
results = list("ammonia" = 3)
|
||||
result = "ammonia"
|
||||
required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/diethylamine
|
||||
name = "Diethylamine"
|
||||
id = "diethylamine"
|
||||
results = list("diethylamine" = 2)
|
||||
result = "diethylamine"
|
||||
required_reagents = list ("ammonia" = 1, "ethanol" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/space_cleaner
|
||||
name = "Space cleaner"
|
||||
id = "cleaner"
|
||||
results = list("cleaner" = 2)
|
||||
result = "cleaner"
|
||||
required_reagents = list("ammonia" = 1, "water" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/plantbgone
|
||||
name = "Plant-B-Gone"
|
||||
id = "plantbgone"
|
||||
results = list("plantbgone" = 5)
|
||||
result = "plantbgone"
|
||||
required_reagents = list("toxin" = 1, "water" = 4)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/weedkiller
|
||||
name = "Weed Killer"
|
||||
id = "weedkiller"
|
||||
results = list("weedkiller" = 5)
|
||||
result = "weedkiller"
|
||||
required_reagents = list("toxin" = 1, "ammonia" = 4)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/pestkiller
|
||||
name = "Pest Killer"
|
||||
id = "pestkiller"
|
||||
results = list("pestkiller" = 5)
|
||||
result = "pestkiller"
|
||||
required_reagents = list("toxin" = 1, "ethanol" = 4)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/drying_agent
|
||||
name = "Drying agent"
|
||||
id = "drying_agent"
|
||||
results = list("drying_agent" = 3)
|
||||
result = "drying_agent"
|
||||
required_reagents = list("stable_plasma" = 2, "ethanol" = 1, "sodium" = 1)
|
||||
result_amount = 3
|
||||
|
||||
//////////////////////////////////// Other goon stuff ///////////////////////////////////////////
|
||||
|
||||
/datum/chemical_reaction/acetone
|
||||
name = "acetone"
|
||||
id = "acetone"
|
||||
results = list("acetone" = 3)
|
||||
result = "acetone"
|
||||
required_reagents = list("oil" = 1, "welding_fuel" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/carpet
|
||||
name = "carpet"
|
||||
id = "carpet"
|
||||
results = list("carpet" = 2)
|
||||
result = "carpet"
|
||||
required_reagents = list("space_drugs" = 1, "blood" = 1)
|
||||
result_amount = 2
|
||||
|
||||
|
||||
/datum/chemical_reaction/oil
|
||||
name = "Oil"
|
||||
id = "oil"
|
||||
results = list("oil" = 3)
|
||||
result = "oil"
|
||||
required_reagents = list("welding_fuel" = 1, "carbon" = 1, "hydrogen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/phenol
|
||||
name = "phenol"
|
||||
id = "phenol"
|
||||
results = list("phenol" = 3)
|
||||
result = "phenol"
|
||||
required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/ash
|
||||
name = "Ash"
|
||||
id = "ash"
|
||||
results = list("ash" = 1)
|
||||
result = "ash"
|
||||
required_reagents = list("oil" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 480
|
||||
|
||||
/datum/chemical_reaction/colorful_reagent
|
||||
name = "colorful_reagent"
|
||||
id = "colorful_reagent"
|
||||
results = list("colorful_reagent" = 5)
|
||||
result = "colorful_reagent"
|
||||
required_reagents = list("stable_plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/life
|
||||
name = "Life"
|
||||
id = "life"
|
||||
result = null
|
||||
required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/life/on_reaction(datum/reagents/holder, created_volume)
|
||||
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life") // Lol.
|
||||
chemical_mob_spawn(holder, 1, "Life")
|
||||
|
||||
/datum/chemical_reaction/corgium
|
||||
name = "corgium"
|
||||
id = "corgium"
|
||||
result = null
|
||||
required_reagents = list("nutriment" = 1, "colorful_reagent" = 1, "strange_reagent" = 1, "blood" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = rand(1, created_volume), i <= created_volume, i++) // More lulz.
|
||||
new /mob/living/simple_animal/pet/dog/corgi(location)
|
||||
new /mob/living/simple_animal/pet/dog/corgi(location)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/hair_dye
|
||||
name = "hair_dye"
|
||||
id = "hair_dye"
|
||||
results = list("hair_dye" = 5)
|
||||
result = "hair_dye"
|
||||
required_reagents = list("colorful_reagent" = 1, "radium" = 1, "space_drugs" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/barbers_aid
|
||||
name = "barbers_aid"
|
||||
id = "barbers_aid"
|
||||
results = list("barbers_aid" = 5)
|
||||
result = "barbers_aid"
|
||||
required_reagents = list("carpet" = 1, "radium" = 1, "space_drugs" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/concentrated_barbers_aid
|
||||
name = "concentrated_barbers_aid"
|
||||
id = "concentrated_barbers_aid"
|
||||
results = list("concentrated_barbers_aid" = 2)
|
||||
result = "concentrated_barbers_aid"
|
||||
required_reagents = list("barbers_aid" = 1, "mutagen" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/saltpetre
|
||||
name = "saltpetre"
|
||||
id = "saltpetre"
|
||||
results = list("saltpetre" = 3)
|
||||
result = "saltpetre"
|
||||
required_reagents = list("potassium" = 1, "nitrogen" = 1, "oxygen" = 3)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/lye
|
||||
name = "lye"
|
||||
id = "lye"
|
||||
results = list("lye" = 3)
|
||||
result = "lye"
|
||||
required_reagents = list("sodium" = 1, "hydrogen" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/lye2
|
||||
name = "lye"
|
||||
id = "lye"
|
||||
results = list("lye" = 2)
|
||||
result = "lye"
|
||||
required_reagents = list("ash" = 1, "water" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/royal_bee_jelly
|
||||
name = "royal bee jelly"
|
||||
id = "royal_bee_jelly"
|
||||
results = list("royal_bee_jelly" = 5)
|
||||
result = "royal_bee_jelly"
|
||||
required_reagents = list("mutagen" = 10, "honey" = 40)
|
||||
|
||||
/datum/chemical_reaction/laughter
|
||||
name = "laughter"
|
||||
id = "laughter"
|
||||
results = list("laughter" = 10) // Fuck it. I'm not touching this one.
|
||||
required_reagents = list("sugar" = 1, "banana" = 1)
|
||||
result_amount = 5
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/chemical_reaction/reagent_explosion
|
||||
name = "Generic explosive"
|
||||
id = "reagent_explosion"
|
||||
result = null
|
||||
var/strengthdiv = 10
|
||||
var/modifier = 0
|
||||
|
||||
@@ -15,8 +16,8 @@
|
||||
if(lastkey)
|
||||
var/mob/toucher = get_mob_by_key(lastkey)
|
||||
touch_msg = "[key_name_admin(lastkey)]<A HREF='?_src_=holder;adminmoreinfo=\ref[toucher]'>?</A> (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[toucher]'>FLW</A>)"
|
||||
message_admins("Reagent explosion reaction occurred at <a href='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[T.loc.name] (JMP)</a>[inside_msg]. Last Fingerprint: [touch_msg].")
|
||||
log_game("Reagent explosion reaction occurred at [T.loc.name] ([T.x],[T.y],[T.z]). Last Fingerprint: [lastkey ? lastkey : "N/A"]." )
|
||||
message_admins("Reagent explosion reaction occured at <a href='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[T.loc.name] (JMP)</a>[inside_msg]. Last Fingerprint: [touch_msg].")
|
||||
log_game("Reagent explosion reaction occured at [T.loc.name] ([T.x],[T.y],[T.z]). Last Fingerprint: [lastkey ? lastkey : "N/A"]." )
|
||||
var/datum/effect_system/reagents_explosion/e = new()
|
||||
e.set_up(modifier + round(created_volume/strengthdiv, 1), T, 0, 0)
|
||||
e.start()
|
||||
@@ -26,20 +27,22 @@
|
||||
/datum/chemical_reaction/reagent_explosion/nitroglycerin
|
||||
name = "Nitroglycerin"
|
||||
id = "nitroglycerin"
|
||||
results = list("nitroglycerin" = 2)
|
||||
result = "nitroglycerin"
|
||||
required_reagents = list("glycerol" = 1, "facid" = 1, "sacid" = 1)
|
||||
result_amount = 2
|
||||
strengthdiv = 2
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return
|
||||
holder.remove_reagent("nitroglycerin", created_volume*2)
|
||||
holder.remove_reagent("nitroglycerin", created_volume)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/nitroglycerin_explosion
|
||||
name = "Nitroglycerin explosion"
|
||||
id = "nitroglycerin_explosion"
|
||||
required_reagents = list("nitroglycerin" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 474
|
||||
strengthdiv = 2
|
||||
|
||||
@@ -48,6 +51,7 @@
|
||||
name = "Explosion"
|
||||
id = "potassium_explosion"
|
||||
required_reagents = list("water" = 1, "potassium" = 1)
|
||||
result_amount = 2
|
||||
strengthdiv = 10
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom
|
||||
@@ -60,18 +64,16 @@
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/pray.ogg', 80, 0, round(created_volume/48))
|
||||
strengthdiv = 8
|
||||
for(var/mob/living/simple_animal/revenant/R in get_hearers_in_view(7,get_turf(holder.my_atom)))
|
||||
var/deity
|
||||
if(SSreligion.Bible_deity_name)
|
||||
deity = SSreligion.Bible_deity_name
|
||||
else
|
||||
deity = "Christ"
|
||||
R << "<span class='userdanger'>The power of [deity] compels you!</span>"
|
||||
var/diety = ticker.Bible_deity_name
|
||||
if(!ticker.Bible_deity_name)
|
||||
diety = "Christ"
|
||||
R << "<span class='userdanger'>The power of [diety] compels you!</span>"
|
||||
R.stun(20)
|
||||
R.reveal(100)
|
||||
R.adjustHealth(50)
|
||||
sleep(20)
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(round(created_volume/48,1),get_turf(holder.my_atom)))
|
||||
if(iscultist(C))
|
||||
if(iscultist(C) || is_handofgod_cultist(C))
|
||||
C << "<span class='userdanger'>The divine explosion sears you!</span>"
|
||||
C.Weaken(2)
|
||||
C.adjust_fire_stacks(5)
|
||||
@@ -82,13 +84,15 @@
|
||||
/datum/chemical_reaction/blackpowder
|
||||
name = "Black Powder"
|
||||
id = "blackpowder"
|
||||
results = list("blackpowder" = 3)
|
||||
result = "blackpowder"
|
||||
required_reagents = list("saltpetre" = 1, "charcoal" = 1, "sulfur" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/blackpowder_explosion
|
||||
name = "Black Powder Kaboom"
|
||||
id = "blackpowder_explosion"
|
||||
required_reagents = list("blackpowder" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 474
|
||||
strengthdiv = 6
|
||||
modifier = 1
|
||||
@@ -101,32 +105,38 @@
|
||||
/datum/chemical_reaction/thermite
|
||||
name = "Thermite"
|
||||
id = "thermite"
|
||||
results = list("thermite" = 3)
|
||||
result = "thermite"
|
||||
required_reagents = list("aluminium" = 1, "iron" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/emp_pulse
|
||||
name = "EMP Pulse"
|
||||
id = "emp_pulse"
|
||||
result = null
|
||||
required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
|
||||
// 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
|
||||
empulse(location, round(created_volume / 12), round(created_volume / 7), 1)
|
||||
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
|
||||
holder.clear_reagents()
|
||||
|
||||
/datum/chemical_reaction/stabilizing_agent
|
||||
name = "stabilizing_agent"
|
||||
id = "stabilizing_agent"
|
||||
results = list("stabilizing_agent" = 3)
|
||||
result = "stabilizing_agent"
|
||||
required_reagents = list("iron" = 1, "oxygen" = 1, "hydrogen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/clf3
|
||||
name = "Chlorine Trifluoride"
|
||||
id = "clf3"
|
||||
results = list("clf3" = 4)
|
||||
result = "clf3"
|
||||
required_reagents = list("chlorine" = 1, "fluorine" = 3)
|
||||
result_amount = 4
|
||||
required_temp = 424
|
||||
|
||||
/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume)
|
||||
@@ -135,10 +145,12 @@
|
||||
PoolOrNew(/obj/effect/hotspot, turf)
|
||||
holder.chem_temp = 1000 // hot as shit
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/methsplosion
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/methsplosion/
|
||||
name = "Meth explosion"
|
||||
id = "methboom1"
|
||||
results = list("methboom1" = 1)
|
||||
result = "methboom1"
|
||||
result_amount = 1
|
||||
required_temp = 380 //slightly above the meth mix time.
|
||||
required_reagents = list("methamphetamine" = 1)
|
||||
strengthdiv = 6
|
||||
@@ -154,25 +166,28 @@
|
||||
/datum/chemical_reaction/reagent_explosion/methsplosion/methboom2
|
||||
required_reagents = list("diethylamine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) //diethylamine is often left over from mixing the ephedrine.
|
||||
required_temp = 300 //room temperature, chilling it even a little will prevent the explosion
|
||||
results = list("methboom1" = 4) // this is ugly. Sorry goof.
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/sorium
|
||||
name = "Sorium"
|
||||
id = "sorium"
|
||||
results = list("sorium" = 4)
|
||||
result = "sorium"
|
||||
required_reagents = list("mercury" = 1, "oxygen" = 1, "nitrogen" = 1, "carbon" = 1)
|
||||
result_amount = 4
|
||||
|
||||
/datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return
|
||||
holder.remove_reagent("sorium", created_volume*4)
|
||||
holder.remove_reagent("sorium", created_volume)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/range = Clamp(sqrt(created_volume*4), 1, 6)
|
||||
var/range = Clamp(sqrt(created_volume), 1, 6)
|
||||
goonchem_vortex(T, 1, range)
|
||||
|
||||
/datum/chemical_reaction/sorium_vortex
|
||||
name = "sorium_vortex"
|
||||
id = "sorium_vortex"
|
||||
result = null
|
||||
result_amount = 1
|
||||
required_reagents = list("sorium" = 1)
|
||||
required_temp = 474
|
||||
|
||||
@@ -181,23 +196,27 @@
|
||||
var/range = Clamp(sqrt(created_volume), 1, 6)
|
||||
goonchem_vortex(T, 1, range)
|
||||
|
||||
|
||||
/datum/chemical_reaction/liquid_dark_matter
|
||||
name = "Liquid Dark Matter"
|
||||
id = "liquid_dark_matter"
|
||||
results = list("liquid_dark_matter" = 3)
|
||||
result = "liquid_dark_matter"
|
||||
required_reagents = list("stable_plasma" = 1, "radium" = 1, "carbon" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return
|
||||
holder.remove_reagent("liquid_dark_matter", created_volume*3)
|
||||
holder.remove_reagent("liquid_dark_matter", created_volume)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/range = Clamp(sqrt(created_volume*3), 1, 6)
|
||||
var/range = Clamp(sqrt(created_volume), 1, 6)
|
||||
goonchem_vortex(T, 0, range)
|
||||
|
||||
/datum/chemical_reaction/ldm_vortex
|
||||
name = "LDM Vortex"
|
||||
id = "ldm_vortex"
|
||||
result = null
|
||||
result_amount = 1
|
||||
required_reagents = list("liquid_dark_matter" = 1)
|
||||
required_temp = 474
|
||||
|
||||
@@ -209,8 +228,9 @@
|
||||
/datum/chemical_reaction/flash_powder
|
||||
name = "Flash powder"
|
||||
id = "flash_powder"
|
||||
results = list("flash_powder" = 3)
|
||||
result = "flash_powder"
|
||||
required_reagents = list("aluminium" = 1, "potassium" = 1, "sulfur" = 1 )
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
@@ -219,18 +239,20 @@
|
||||
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
|
||||
s.set_up(2, 1, location)
|
||||
s.start()
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
|
||||
if(C.flash_act())
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
|
||||
if(C.flash_eyes())
|
||||
if(get_dist(C, location) < 4)
|
||||
C.Weaken(5)
|
||||
else
|
||||
C.Stun(5)
|
||||
holder.remove_reagent("flash_powder", created_volume*3)
|
||||
holder.remove_reagent("flash_powder", created_volume)
|
||||
|
||||
/datum/chemical_reaction/flash_powder_flash
|
||||
name = "Flash powder activation"
|
||||
id = "flash_powder_flash"
|
||||
result = null
|
||||
required_reagents = list("flash_powder" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 374
|
||||
|
||||
/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, created_volume)
|
||||
@@ -239,7 +261,7 @@
|
||||
s.set_up(2, 1, location)
|
||||
s.start()
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
|
||||
if(C.flash_act())
|
||||
if(C.flash_eyes())
|
||||
if(get_dist(C, location) < 4)
|
||||
C.Weaken(5)
|
||||
else
|
||||
@@ -248,20 +270,21 @@
|
||||
/datum/chemical_reaction/smoke_powder
|
||||
name = "smoke_powder"
|
||||
id = "smoke_powder"
|
||||
results = list("smoke_powder" = 3)
|
||||
result = "smoke_powder"
|
||||
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return
|
||||
holder.remove_reagent("smoke_powder", created_volume*3)
|
||||
var/smoke_radius = round(sqrt(created_volume * 1.5), 1)
|
||||
holder.remove_reagent("smoke_powder", created_volume)
|
||||
var/smoke_radius = round(sqrt(created_volume / 2), 1)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
var/datum/effect_system/smoke_spread/chem/S = new
|
||||
S.attach(location)
|
||||
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
if(S)
|
||||
S.set_up(holder, smoke_radius, location, 0)
|
||||
S.set_up(holder, smoke_radius, 0, location)
|
||||
S.start()
|
||||
if(holder && holder.my_atom)
|
||||
holder.clear_reagents()
|
||||
@@ -269,8 +292,10 @@
|
||||
/datum/chemical_reaction/smoke_powder_smoke
|
||||
name = "smoke_powder_smoke"
|
||||
id = "smoke_powder_smoke"
|
||||
result = null
|
||||
required_reagents = list("smoke_powder" = 1)
|
||||
required_temp = 374
|
||||
result_amount = 1
|
||||
secondary = 1
|
||||
mob_react = 1
|
||||
|
||||
@@ -281,43 +306,68 @@
|
||||
S.attach(location)
|
||||
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
if(S)
|
||||
S.set_up(holder, smoke_radius, location, 0)
|
||||
S.set_up(holder, smoke_radius, 0, location)
|
||||
S.start()
|
||||
if(holder && holder.my_atom)
|
||||
holder.clear_reagents()
|
||||
|
||||
|
||||
|
||||
/datum/chemical_reaction/sonic_powder
|
||||
name = "sonic_powder"
|
||||
id = "sonic_powder"
|
||||
results = list("sonic_powder" = 3)
|
||||
result = "sonic_powder"
|
||||
required_reagents = list("oxygen" = 1, "cola" = 1, "phosphorus" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
return
|
||||
holder.remove_reagent("sonic_powder", created_volume*3)
|
||||
holder.remove_reagent("sonic_powder", created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
playsound(location, 'sound/effects/bang.ogg', 25, 1)
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/3, location))
|
||||
C.soundbang_act(1, 5, rand(0, 5))
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
|
||||
if(C.check_ear_prot())
|
||||
continue
|
||||
C.show_message("<span class='warning'>BANG</span>", 2)
|
||||
C.Stun(5)
|
||||
C.Weaken(5)
|
||||
C.setEarDamage(C.ear_damage + rand(0, 5), max(C.ear_deaf,15))
|
||||
if(C.ear_damage >= 15)
|
||||
C << "<span class='warning'>Your ears start to ring badly!</span>"
|
||||
else if(C.ear_damage >= 5)
|
||||
C << "<span class='warning'>Your ears start to ring!</span>"
|
||||
|
||||
/datum/chemical_reaction/sonic_powder_deafen
|
||||
name = "sonic_powder_deafen"
|
||||
id = "sonic_powder_deafen"
|
||||
result = null
|
||||
required_reagents = list("sonic_powder" = 1)
|
||||
required_temp = 374
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
playsound(location, 'sound/effects/bang.ogg', 25, 1)
|
||||
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
|
||||
C.soundbang_act(1, 5, rand(0, 5))
|
||||
if(C.check_ear_prot())
|
||||
continue
|
||||
C.show_message("<span class='warning'>BANG</span>", 2)
|
||||
C.Stun(5)
|
||||
C.Weaken(5)
|
||||
C.setEarDamage(C.ear_damage + rand(0, 5), max(C.ear_deaf,15))
|
||||
if(C.ear_damage >= 15)
|
||||
C << "<span class='warning'>Your ears start to ring badly!</span>"
|
||||
else if(C.ear_damage >= 5)
|
||||
C << "<span class='warning'>Your ears start to ring!</span>"
|
||||
|
||||
|
||||
/datum/chemical_reaction/phlogiston
|
||||
name = "phlogiston"
|
||||
id = "phlogiston"
|
||||
results = list("phlogiston" = 3)
|
||||
result = "phlogiston"
|
||||
required_reagents = list("phosphorus" = 1, "sacid" = 1, "stable_plasma" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, created_volume)
|
||||
if(holder.has_reagent("stabilizing_agent"))
|
||||
@@ -328,17 +378,21 @@
|
||||
holder.clear_reagents()
|
||||
return
|
||||
|
||||
|
||||
/datum/chemical_reaction/napalm
|
||||
name = "Napalm"
|
||||
id = "napalm"
|
||||
results = list("napalm" = 3)
|
||||
result = "napalm"
|
||||
required_reagents = list("oil" = 1, "welding_fuel" = 1, "ethanol" = 1 )
|
||||
result_amount = 3
|
||||
|
||||
|
||||
/datum/chemical_reaction/cryostylane
|
||||
name = "cryostylane"
|
||||
id = "cryostylane"
|
||||
results = list("cryostylane" = 3)
|
||||
result = "cryostylane"
|
||||
required_reagents = list("water" = 1, "stable_plasma" = 1, "nitrogen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, created_volume)
|
||||
holder.chem_temp = 20 // cools the fuck down
|
||||
@@ -348,58 +402,10 @@
|
||||
/datum/chemical_reaction/pyrosium
|
||||
name = "pyrosium"
|
||||
id = "pyrosium"
|
||||
results = list("pyrosium" = 3)
|
||||
result = "pyrosium"
|
||||
required_reagents = list("stable_plasma" = 1, "radium" = 1, "phosphorus" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, created_volume)
|
||||
holder.chem_temp = 20 // also cools the fuck down
|
||||
return
|
||||
|
||||
/datum/chemical_reaction/teslium
|
||||
name = "Teslium"
|
||||
id = "teslium"
|
||||
results = list("teslium" = 3)
|
||||
required_reagents = list("stable_plasma" = 1, "silver" = 1, "blackpowder" = 1)
|
||||
mix_message = "<span class='danger'>A jet of sparks flies from the mixture as it merges into a flickering slurry.</span>"
|
||||
required_temp = 400
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/teslium_lightning
|
||||
name = "Teslium Destabilization"
|
||||
id = "teslium_lightning"
|
||||
required_reagents = list("teslium" = 1, "water" = 1)
|
||||
results = list("destabilized_teslium" = 1)
|
||||
strengthdiv = 100
|
||||
modifier = -100
|
||||
mix_message = "<span class='boldannounce'>The teslium starts to spark as electricity arcs away from it!</span>"
|
||||
mix_sound = 'sound/machines/defib_zap.ogg'
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/T1 = created_volume * 20 //100 units : Zap 3 times, with powers 2000/5000/12000. Tesla revolvers have a power of 10000 for comparison.
|
||||
var/T2 = created_volume * 50
|
||||
var/T3 = created_volume * 120
|
||||
sleep(5)
|
||||
if(created_volume >= 75)
|
||||
tesla_zap(holder.my_atom, 7, T1)
|
||||
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
sleep(15)
|
||||
if(created_volume >= 40)
|
||||
tesla_zap(holder.my_atom, 7, T2)
|
||||
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
sleep(15)
|
||||
if(created_volume >= 10) //10 units minimum for lightning, 40 units for secondary blast, 75 units for tertiary blast.
|
||||
tesla_zap(holder.my_atom, 7, T3)
|
||||
playsound(holder.my_atom, 'sound/machines/defib_zap.ogg', 50, 1)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/teslium_lightning/heat
|
||||
id = "teslium_lightning2"
|
||||
required_temp = 474
|
||||
required_reagents = list("teslium" = 1)
|
||||
|
||||
/datum/chemical_reaction/reagent_explosion/nitrous_oxide
|
||||
name = "N2O explosion"
|
||||
id = "n2o_explosion"
|
||||
required_reagents = list("nitrous_oxide" = 1)
|
||||
strengthdiv = 7
|
||||
required_temp = 575
|
||||
modifier = 1
|
||||
@@ -1,172 +1,152 @@
|
||||
|
||||
/datum/chemical_reaction/slime
|
||||
|
||||
/datum/chemical_reaction/slime/on_reaction(datum/reagents/holder)
|
||||
delete_extract(holder)
|
||||
|
||||
/datum/chemical_reaction/slime/proc/delete_extract(datum/reagents/holder)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
if(M.Uses <= 0)
|
||||
if (!results.len) //if the slime doesn't output chemicals
|
||||
qdel(M)
|
||||
|
||||
//Grey
|
||||
/datum/chemical_reaction/slime/slimespawn
|
||||
/datum/chemical_reaction/slimespawn
|
||||
name = "Slime Spawn"
|
||||
id = "m_spawn"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/grey
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimespawn/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/living/simple_animal/slime/S
|
||||
S = new(get_turf(holder.my_atom), "grey")
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the \
|
||||
core begins to quiver and grow, and soon a new baby slime \
|
||||
emerges from it!</span>")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeinaprov
|
||||
/datum/chemical_reaction/slimeinaprov
|
||||
name = "Slime epinephrine"
|
||||
id = "m_inaprov"
|
||||
results = list("epinephrine" = 3)
|
||||
result = "epinephrine"
|
||||
required_reagents = list("water" = 5)
|
||||
result_amount = 3
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/grey
|
||||
|
||||
/datum/chemical_reaction/slime/slimeinaprov/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeinaprov/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimemonkey
|
||||
/datum/chemical_reaction/slimemonkey
|
||||
name = "Slime Monkey"
|
||||
id = "m_monkey"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/grey
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemonkey/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
for(var/i = 1, i <= 3, i++)
|
||||
var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
M.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Green
|
||||
/datum/chemical_reaction/slime/slimemutate
|
||||
/datum/chemical_reaction/slimemutate
|
||||
name = "Mutation Toxin"
|
||||
id = "mutationtoxin"
|
||||
results = list("mutationtoxin" = 1)
|
||||
result = "mutationtoxin"
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/green
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemutate/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Mutated Green
|
||||
/datum/chemical_reaction/slime/slimemutate_unstable
|
||||
/datum/chemical_reaction/slimemutate_unstable
|
||||
name = "Unstable Mutation Toxin"
|
||||
id = "unstablemutationtoxin"
|
||||
results = list("unstablemutationtoxin" = 1)
|
||||
result = "unstablemutationtoxin"
|
||||
required_reagents = list("radium" = 1)
|
||||
result_amount = 1
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/green
|
||||
mix_message = "<span class='info'>The mixture rapidly expands and contracts, its appearance shifting into a sickening green.</span>"
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate_unstable/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemutate_unstable/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Metal
|
||||
/datum/chemical_reaction/slime/slimemetal
|
||||
/datum/chemical_reaction/slimemetal
|
||||
name = "Slime Metal"
|
||||
id = "m_metal"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/metal
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemetal/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/plasteel (location, 5)
|
||||
new /obj/item/stack/sheet/metal (location, 15)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglass
|
||||
name = "Slime Glass"
|
||||
id = "m_glass"
|
||||
required_reagents = list("water" = 1)
|
||||
required_container = /obj/item/slime_extract/metal
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/rglass (location, 5)
|
||||
new /obj/item/stack/sheet/glass (location, 15)
|
||||
..()
|
||||
var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
|
||||
M.amount = 15
|
||||
M.loc = get_turf(holder.my_atom)
|
||||
var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
|
||||
P.amount = 5
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
//Gold
|
||||
/datum/chemical_reaction/slime/slimecrit
|
||||
/datum/chemical_reaction/slimecrit
|
||||
name = "Slime Crit"
|
||||
id = "m_tele"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrit/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
|
||||
addtimer(src, "chemical_mob_spawn", 50, TIMER_NORMAL, holder, 5, "Gold Slime")
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
addtimer(src, "chemical_mob_spawn", 50, FALSE, holder, 5, "Gold Slime")
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritlesser
|
||||
/datum/chemical_reaction/slimecritlesser
|
||||
name = "Slime Crit Lesser"
|
||||
id = "m_tele3"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritlesser/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimecritlesser/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
|
||||
addtimer(src, "chemical_mob_spawn", 50, TIMER_NORMAL, holder, 3, "Lesser Gold Slime", "neutral")
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
addtimer(src, "chemical_mob_spawn", 50, FALSE, holder, 3, "Lesser Gold Slime", "neutral")
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritfriendly
|
||||
/datum/chemical_reaction/slimecritfriendly
|
||||
name = "Slime Crit Friendly"
|
||||
id = "m_tele5"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/gold
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecritfriendly/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimecritfriendly/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably !</span>")
|
||||
addtimer(src, "chemical_mob_spawn", 50, TIMER_NORMAL, holder, 1, "Friendly Gold Slime", "neutral")
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
addtimer(src, "chemical_mob_spawn", 50, FALSE, holder, 1, "Friendly Gold Slime", "neutral")
|
||||
|
||||
//Silver
|
||||
/datum/chemical_reaction/slime/slimebork
|
||||
/datum/chemical_reaction/slimebork
|
||||
name = "Slime Bork"
|
||||
id = "m_tele2"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/silver
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimebork/on_reaction(datum/reagents/holder)
|
||||
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/blocked = list(/obj/item/weapon/reagent_containers/food/snacks,
|
||||
@@ -194,7 +174,7 @@
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/C in viewers(get_turf(holder.my_atom), null))
|
||||
C.flash_act()
|
||||
C.flash_eyes()
|
||||
|
||||
for(var/i = 1, i <= 4 + rand(1,2), i++)
|
||||
var/chosen = pick(borks)
|
||||
@@ -204,17 +184,18 @@
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(B, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork2
|
||||
/datum/chemical_reaction/slimebork2
|
||||
name = "Slime Bork 2"
|
||||
id = "m_tele4"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/silver
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebork2/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimebork2/on_reaction(datum/reagents/holder)
|
||||
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/drinks)
|
||||
@@ -223,7 +204,7 @@
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
for(var/mob/living/carbon/M in viewers(get_turf(holder.my_atom), null))
|
||||
M.flash_act()
|
||||
M.flash_eyes()
|
||||
|
||||
for(var/i = 1, i <= 4 + rand(1,2), i++)
|
||||
var/chosen = pick(borks)
|
||||
@@ -233,314 +214,288 @@
|
||||
if(prob(50))
|
||||
for(var/j = 1, j <= rand(1, 3), j++)
|
||||
step(B, pick(NORTH,SOUTH,EAST,WEST))
|
||||
..()
|
||||
|
||||
|
||||
//Blue
|
||||
/datum/chemical_reaction/slime/slimefrost
|
||||
/datum/chemical_reaction/slimefrost
|
||||
name = "Slime Frost Oil"
|
||||
id = "m_frostoil"
|
||||
results = list("frostoil" = 10)
|
||||
result = "frostoil"
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 10
|
||||
required_container = /obj/item/slime_extract/blue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefrost/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimefrost/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimestabilizer
|
||||
/datum/chemical_reaction/slimestabilizer
|
||||
name = "Slime Stabilizer"
|
||||
id = "m_slimestabilizer"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/blue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimestabilizer/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/stabilizer/P = new /obj/item/slimepotion/stabilizer
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimefoam
|
||||
name = "Slime Foam"
|
||||
id = "m_foam"
|
||||
results = list("fluorosurfactant" = 20, "water" = 20)
|
||||
required_reagents = list("water" = 5)
|
||||
required_container = /obj/item/slime_extract/blue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefoam/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
//Dark Blue
|
||||
/datum/chemical_reaction/slime/slimefreeze
|
||||
/datum/chemical_reaction/slimefreeze
|
||||
name = "Slime Freeze"
|
||||
id = "m_freeze"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/darkblue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimefreeze/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
addtimer(src, "freeze", 50, TIMER_NORMAL, holder)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
|
||||
/datum/chemical_reaction/slime/slimefreeze/proc/freeze(datum/reagents/holder)
|
||||
addtimer(src, "freeze", 50, FALSE, holder)
|
||||
/datum/chemical_reaction/slimefreeze/proc/freeze(datum/reagents/holder)
|
||||
if(holder && holder.my_atom)
|
||||
var/turf/open/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("freon=50;TEMP=120")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/M in range(T, 7))
|
||||
M.bodytemperature -= 240
|
||||
M << "<span class='notice'>You feel a chill!</span>"
|
||||
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimefireproof
|
||||
/datum/chemical_reaction/slimefireproof
|
||||
name = "Slime Fireproof"
|
||||
id = "m_fireproof"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/darkblue
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimefireproof/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/fireproof/P = new /obj/item/slimepotion/fireproof
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Orange
|
||||
/datum/chemical_reaction/slime/slimecasp
|
||||
/datum/chemical_reaction/slimecasp
|
||||
name = "Slime Capsaicin Oil"
|
||||
id = "m_capsaicinoil"
|
||||
results = list("capsaicin" = 10)
|
||||
result = "capsaicin"
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 10
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecasp/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimecasp/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire
|
||||
/datum/chemical_reaction/slimefire
|
||||
name = "Slime fire"
|
||||
id = "m_fire"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimefire/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/TU = get_turf(holder.my_atom)
|
||||
TU.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
|
||||
addtimer(src, "slime_burn", 50, TIMER_NORMAL, holder)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
addtimer(src, "burn", 50, FALSE, holder)
|
||||
|
||||
/datum/chemical_reaction/slime/slimefire/proc/slime_burn(datum/reagents/holder)
|
||||
|
||||
/datum/chemical_reaction/slimefire/proc/burn(datum/reagents/holder)
|
||||
if(holder && holder.my_atom)
|
||||
var/turf/open/T = get_turf(holder.my_atom)
|
||||
if(istype(T))
|
||||
T.atmos_spawn_air("plasma=50;TEMP=1000")
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimesmoke
|
||||
name = "Slime Smoke"
|
||||
id = "m_smoke"
|
||||
results = list("phosphorus" = 10, "potassium" = 10, "sugar" = 10)
|
||||
required_reagents = list("water" = 5)
|
||||
required_container = /obj/item/slime_extract/orange
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimesmoke/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Yellow
|
||||
|
||||
/datum/chemical_reaction/slime/slimeoverload
|
||||
/datum/chemical_reaction/slimeoverload
|
||||
name = "Slime EMP"
|
||||
id = "m_emp"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/yellow
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
|
||||
/datum/chemical_reaction/slimeoverload/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
empulse(get_turf(holder.my_atom), 3, 7)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecell
|
||||
/datum/chemical_reaction/slimecell
|
||||
name = "Slime Powercell"
|
||||
id = "m_cell"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/yellow
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume)
|
||||
/datum/chemical_reaction/slimecell/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/weapon/stock_parts/cell/high/slime/P = new /obj/item/weapon/stock_parts/cell/high/slime
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglow
|
||||
/datum/chemical_reaction/slimeglow
|
||||
name = "Slime Glow"
|
||||
id = "m_glow"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/yellow
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeglow/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
T.visible_message("<span class='danger'>The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.</span>")
|
||||
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
|
||||
F.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Purple
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid
|
||||
/datum/chemical_reaction/slimepsteroid
|
||||
name = "Slime Steroid"
|
||||
id = "m_steroid"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/purple
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimepsteroid/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/steroid/P = new /obj/item/slimepotion/steroid
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimejam
|
||||
/datum/chemical_reaction/slimejam
|
||||
name = "Slime Jam"
|
||||
id = "m_jam"
|
||||
results = list("slimejelly" = 10)
|
||||
result = "slimejelly"
|
||||
required_reagents = list("sugar" = 1)
|
||||
result_amount = 10
|
||||
required_container = /obj/item/slime_extract/purple
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimejam/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimejam/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
|
||||
//Dark Purple
|
||||
/datum/chemical_reaction/slime/slimeplasma
|
||||
/datum/chemical_reaction/slimeplasma
|
||||
name = "Slime Plasma"
|
||||
id = "m_plasma"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/darkpurple
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeplasma/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/location = get_turf(holder.my_atom)
|
||||
new /obj/item/stack/sheet/mineral/plasma (location, 3)
|
||||
..()
|
||||
var/obj/item/stack/sheet/mineral/plasma/P = new /obj/item/stack/sheet/mineral/plasma
|
||||
P.amount = 3
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
|
||||
//Red
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutator
|
||||
/datum/chemical_reaction/slimemutator
|
||||
name = "Slime Mutator"
|
||||
id = "m_slimemutator"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/red
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemutator/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/mutator/P = new /obj/item/slimepotion/mutator
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimebloodlust
|
||||
/datum/chemical_reaction/slimebloodlust
|
||||
name = "Bloodlust"
|
||||
id = "m_bloodlust"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/red
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimebloodlust/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null))
|
||||
slime.rabid = 1
|
||||
slime.visible_message("<span class='danger'>The [slime] is driven into a frenzy!</span>")
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimespeed
|
||||
/datum/chemical_reaction/slimespeed
|
||||
name = "Slime Speed"
|
||||
id = "m_speed"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/red
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimespeed/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/speed/P = new /obj/item/slimepotion/speed
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
//Pink
|
||||
/datum/chemical_reaction/slime/docility
|
||||
/datum/chemical_reaction/docility
|
||||
name = "Docility Potion"
|
||||
id = "m_potion"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/pink
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/docility/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/docility/P = new /obj/item/slimepotion/docility
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/gender
|
||||
name = "Gender Potion"
|
||||
id = "m_gender"
|
||||
required_reagents = list("blood" = 1)
|
||||
required_container = /obj/item/slime_extract/pink
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/genderchange/G = new /obj/item/slimepotion/genderchange
|
||||
G.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Black
|
||||
/datum/chemical_reaction/slime/slimemutate2
|
||||
/datum/chemical_reaction/slimemutate2
|
||||
name = "Advanced Mutation Toxin"
|
||||
id = "mutationtoxin2"
|
||||
results = list("amutationtoxin" = 1)
|
||||
result = "amutationtoxin"
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/black
|
||||
|
||||
/datum/chemical_reaction/slime/slimemutate2/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimemutate2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Oil
|
||||
/datum/chemical_reaction/slime/slimeexplosion
|
||||
/datum/chemical_reaction/slimeexplosion
|
||||
name = "Slime Explosion"
|
||||
id = "m_explosion"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/oil
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeexplosion/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
var/lastkey = holder.my_atom.fingerprintslast
|
||||
@@ -551,240 +506,206 @@
|
||||
message_admins("Slime Explosion reaction started at <a href='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[T.loc.name] (JMP)</a>. Last Fingerprint: [touch_msg]")
|
||||
log_game("Slime Explosion reaction started at [T.loc.name] ([T.x],[T.y],[T.z]). Last Fingerprint: [lastkey ? lastkey : "N/A"].")
|
||||
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
|
||||
addtimer(src, "boom", 50, TIMER_NORMAL, holder)
|
||||
var/obj/item/slime_extract/M = holder.my_atom
|
||||
deltimer(M.qdel_timer)
|
||||
M.qdel_timer = addtimer(src, "delete_extract", 55, TIMER_NORMAL, holder)
|
||||
addtimer(src, "boom", 50, FALSE, holder)
|
||||
|
||||
/datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeexplosion/proc/boom(datum/reagents/holder)
|
||||
if(holder && holder.my_atom)
|
||||
explosion(get_turf(holder.my_atom), 1 ,3, 6)
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecornoil
|
||||
name = "Slime Corn Oil"
|
||||
id = "m_cornoil"
|
||||
results = list("cornoil" = 10)
|
||||
required_reagents = list("blood" = 1)
|
||||
required_container = /obj/item/slime_extract/oil
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecornoil/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
..()
|
||||
|
||||
//Light Pink
|
||||
/datum/chemical_reaction/slime/slimepotion2
|
||||
/datum/chemical_reaction/slimepotion2
|
||||
name = "Slime Potion 2"
|
||||
id = "m_potion2"
|
||||
result = null
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/lightpink
|
||||
required_reagents = list("plasma" = 1)
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimepotion2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/sentience/P = new /obj/item/slimepotion/sentience
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Adamantine
|
||||
/datum/chemical_reaction/slime/slimegolem
|
||||
/datum/chemical_reaction/slimegolem
|
||||
name = "Slime Golem"
|
||||
id = "m_golem"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/adamantine
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
notify_ghosts("Golem rune created in [get_area(Z)].", 'sound/effects/ghost2.ogg', source = Z)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem2
|
||||
name = "Slime Golem 2"
|
||||
id = "m_golem2"
|
||||
required_reagents = list("iron" = 1)
|
||||
required_container = /obj/item/slime_extract/adamantine
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimegolem2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/golem_shell/artificial/Z = new /obj/item/golem_shell/artificial
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
notify_ghosts("Artificial golem shell created in [get_area(Z)].", 'sound/effects/ghost2.ogg', source = Z)
|
||||
..()
|
||||
|
||||
//Bluespace
|
||||
/datum/chemical_reaction/slime/slimefloor2
|
||||
/datum/chemical_reaction/slimefloor2
|
||||
name = "Bluespace Floor"
|
||||
id = "m_floor2"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/bluespace
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume)
|
||||
/datum/chemical_reaction/slimefloor2/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/bluespace/P = new /obj/item/stack/tile/bluespace
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrystal
|
||||
/datum/chemical_reaction/slimecrystal
|
||||
name = "Slime Crystal"
|
||||
id = "m_crystal"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/bluespace
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume)
|
||||
/datum/chemical_reaction/slimecrystal/on_reaction(datum/reagents/holder, created_volume)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
if(holder.my_atom)
|
||||
var/obj/item/weapon/ore/bluespace_crystal/BC = new(get_turf(holder.my_atom))
|
||||
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
|
||||
..()
|
||||
|
||||
//Cerulean
|
||||
/datum/chemical_reaction/slime/slimepsteroid2
|
||||
/datum/chemical_reaction/slimepsteroid2
|
||||
name = "Slime Steroid 2"
|
||||
id = "m_steroid2"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/cerulean
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimepsteroid2/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/enhancer/P = new /obj/item/slimepotion/enhancer
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slime_territory
|
||||
|
||||
/datum/chemical_reaction/slime_territory
|
||||
name = "Slime Territory"
|
||||
id = "s_territory"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/cerulean
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slime_territory/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/areaeditor/blueprints/slime/P = new /obj/item/areaeditor/blueprints/slime
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Sepia
|
||||
/datum/chemical_reaction/slime/slimestop
|
||||
/datum/chemical_reaction/slimestop
|
||||
name = "Slime Stop"
|
||||
id = "m_stop"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimestop/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/mob = get_mob_by_key(holder.my_atom.fingerprintslast)
|
||||
var/obj/effect/timestop/T = new /obj/effect/timestop
|
||||
T.loc = get_turf(holder.my_atom)
|
||||
T.immune += mob
|
||||
T.timestop()
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecamera
|
||||
/datum/chemical_reaction/slimecamera
|
||||
name = "Slime Camera"
|
||||
id = "m_camera"
|
||||
result = null
|
||||
required_reagents = list("water" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimecamera/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/device/camera/P = new /obj/item/device/camera
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
var/obj/item/device/camera_film/Z = new /obj/item/device/camera_film
|
||||
Z.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor
|
||||
/datum/chemical_reaction/slimefloor
|
||||
name = "Sepia Floor"
|
||||
id = "m_floor"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/sepia
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimefloor/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/stack/tile/sepia/P = new /obj/item/stack/tile/sepia
|
||||
P.amount = 25
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
//Pyrite
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimepaint
|
||||
/datum/chemical_reaction/slimepaint
|
||||
name = "Slime Paint"
|
||||
id = "s_paint"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_container = /obj/item/slime_extract/pyrite
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimepaint/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/paints = subtypesof(/obj/item/weapon/paint)
|
||||
var/chosen = pick(paints)
|
||||
var/obj/P = new chosen
|
||||
if(P)
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrayon
|
||||
name = "Slime Crayon"
|
||||
id = "s_crayon"
|
||||
required_reagents = list("blood" = 1)
|
||||
required_container = /obj/item/slime_extract/pyrite
|
||||
required_other = 1
|
||||
|
||||
/datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/list/crayons = difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))
|
||||
var/chosen = pick(crayons)
|
||||
var/obj/P = new chosen
|
||||
if(P)
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
//Rainbow :o)
|
||||
/datum/chemical_reaction/slime/slimeRNG
|
||||
/datum/chemical_reaction/slimeRNG
|
||||
name = "Random Core"
|
||||
id = "slimerng"
|
||||
result = null
|
||||
required_reagents = list("plasma" = 1)
|
||||
result_amount = 1
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/rainbow
|
||||
|
||||
/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slimeRNG/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/mob/living/simple_animal/slime/random/S
|
||||
S = new(get_turf(holder.my_atom))
|
||||
S.visible_message("<span class='danger'>Infused with plasma, the \
|
||||
core begins to quiver and grow, and soon a new baby slime emerges \
|
||||
from it!</span>")
|
||||
..()
|
||||
|
||||
/datum/chemical_reaction/slime/slime_transfer
|
||||
/datum/chemical_reaction/slime_transfer
|
||||
name = "Transfer Potion"
|
||||
id = "slimetransfer"
|
||||
result = null
|
||||
required_reagents = list("blood" = 1)
|
||||
result_amount = 1
|
||||
required_other = 1
|
||||
required_container = /obj/item/slime_extract/rainbow
|
||||
|
||||
/datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder)
|
||||
/datum/chemical_reaction/slime_transfer/on_reaction(datum/reagents/holder)
|
||||
feedback_add_details("slime_cores_used","[type]")
|
||||
var/obj/item/slimepotion/transference/P = new /obj/item/slimepotion/transference
|
||||
P.loc = get_turf(holder.my_atom)
|
||||
..()
|
||||
|
||||
|
||||
@@ -2,101 +2,111 @@
|
||||
/datum/chemical_reaction/formaldehyde
|
||||
name = "formaldehyde"
|
||||
id = "Formaldehyde"
|
||||
results = list("formaldehyde" = 3)
|
||||
result = "formaldehyde"
|
||||
required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1)
|
||||
result_amount = 3
|
||||
required_temp = 420
|
||||
|
||||
/datum/chemical_reaction/neurotoxin2
|
||||
name = "neurotoxin2"
|
||||
id = "neurotoxin2"
|
||||
results = list("neurotoxin2" = 1)
|
||||
result = "neurotoxin2"
|
||||
required_reagents = list("space_drugs" = 1)
|
||||
result_amount = 1
|
||||
required_temp = 674
|
||||
|
||||
/datum/chemical_reaction/cyanide
|
||||
name = "Cyanide"
|
||||
id = "cyanide"
|
||||
results = list("cyanide" = 3)
|
||||
result = "cyanide"
|
||||
required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1)
|
||||
result_amount = 3
|
||||
required_temp = 380
|
||||
|
||||
/datum/chemical_reaction/itching_powder
|
||||
name = "Itching Powder"
|
||||
id = "itching_powder"
|
||||
results = list("itching_powder" = 3)
|
||||
result = "itching_powder"
|
||||
required_reagents = list("welding_fuel" = 1, "ammonia" = 1, "charcoal" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/facid
|
||||
name = "Fluorosulfuric acid"
|
||||
id = "facid"
|
||||
results = list("facid" = 4)
|
||||
result = "facid"
|
||||
required_reagents = list("sacid" = 1, "fluorine" = 1, "hydrogen" = 1, "potassium" = 1)
|
||||
result_amount = 4
|
||||
required_temp = 380
|
||||
|
||||
/datum/chemical_reaction/sulfonal
|
||||
name = "sulfonal"
|
||||
id = "sulfonal"
|
||||
results = list("sulfonal" = 3)
|
||||
result = "sulfonal"
|
||||
required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/lipolicide
|
||||
name = "lipolicide"
|
||||
id = "lipolicide"
|
||||
results = list("lipolicide" = 3)
|
||||
result = "lipolicide"
|
||||
required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/mutagen
|
||||
name = "Unstable mutagen"
|
||||
id = "mutagen"
|
||||
results = list("mutagen" = 3)
|
||||
result = "mutagen"
|
||||
required_reagents = list("radium" = 1, "phosphorus" = 1, "chlorine" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/lexorin
|
||||
name = "Lexorin"
|
||||
id = "lexorin"
|
||||
results = list("lexorin" = 3)
|
||||
result = "lexorin"
|
||||
required_reagents = list("plasma" = 1, "hydrogen" = 1, "nitrogen" = 1)
|
||||
result_amount = 3
|
||||
|
||||
/datum/chemical_reaction/chloralhydrate
|
||||
name = "Chloral Hydrate"
|
||||
id = "chloralhydrate"
|
||||
results = list("chloralhydrate" = 1)
|
||||
result = "chloralhydrate"
|
||||
required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1)
|
||||
result_amount = 1
|
||||
|
||||
/datum/chemical_reaction/mutetoxin //i'll just fit this in here snugly between other unfun chemicals :v
|
||||
name = "Mute toxin"
|
||||
id = "mutetoxin"
|
||||
results = list("mutetoxin" = 2)
|
||||
result = "mutetoxin"
|
||||
required_reagents = list("uranium" = 2, "water" = 1, "carbon" = 1)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/zombiepowder
|
||||
name = "Zombie Powder"
|
||||
id = "zombiepowder"
|
||||
results = list("zombiepowder" = 2)
|
||||
result = "zombiepowder"
|
||||
required_reagents = list("carpotoxin" = 5, "morphine" = 5, "copper" = 5)
|
||||
result_amount = 2
|
||||
|
||||
/datum/chemical_reaction/mindbreaker
|
||||
name = "Mindbreaker Toxin"
|
||||
id = "mindbreaker"
|
||||
results = list("mindbreaker" = 5)
|
||||
result = "mindbreaker"
|
||||
required_reagents = list("silicon" = 1, "hydrogen" = 1, "charcoal" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/teslium
|
||||
name = "Teslium"
|
||||
id = "teslium"
|
||||
result = "teslium"
|
||||
required_reagents = list("plasma" = 1, "silver" = 1, "blackpowder" = 1)
|
||||
result_amount = 3
|
||||
mix_message = "<span class='danger'>A jet of sparks flies from the mixture as it merges into a flickering slurry.</span>"
|
||||
required_temp = 400
|
||||
|
||||
/datum/chemical_reaction/heparin
|
||||
name = "Heparin"
|
||||
id = "Heparin"
|
||||
results = list("heparin" = 4)
|
||||
result = "heparin"
|
||||
required_reagents = list("formaldehyde" = 1, "sodium" = 1, "chlorine" = 1, "lithium" = 1)
|
||||
result_amount = 4
|
||||
mix_message = "<span class='danger'>The mixture thins and loses all color.</span>"
|
||||
|
||||
/datum/chemical_reaction/rotatium
|
||||
name = "Rotatium"
|
||||
id = "Rotatium"
|
||||
results = list("rotatium" = 3)
|
||||
required_reagents = list("mindbreaker" = 1, "teslium" = 1, "neurotoxin2" = 1)
|
||||
mix_message = "<span class='danger'>After sparks, fire, and the smell of mindbreaker, the mix is constantly spinning with no stop in sight.</span>"
|
||||
|
||||
/datum/chemical_reaction/anacea
|
||||
name = "Anacea"
|
||||
id = "anacea"
|
||||
results = list("anacea" = 3)
|
||||
required_reagents = list("haloperidol" = 1, "impedrezene" = 1, "radium" = 1)
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "..."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = null
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
w_class = 1
|
||||
var/amount_per_transfer_from_this = 5
|
||||
var/list/possible_transfer_amounts = list(5,10,15,20,25,30)
|
||||
var/volume = 30
|
||||
@@ -38,7 +38,7 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/attack(mob/M, mob/user, def_zone)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.a_intent == "harm")
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag)
|
||||
@@ -62,7 +62,7 @@
|
||||
else if(C.is_mouth_covered(mask_only = 1))
|
||||
covered = "mask"
|
||||
if(covered)
|
||||
var/who = (isnull(user) || eater == user) ? "your" : "[eater.p_their()]"
|
||||
var/who = (isnull(user) || eater == user) ? "your" : "their"
|
||||
user << "<span class='warning'>You have to remove [who] [covered] first!</span>"
|
||||
return 0
|
||||
return 1
|
||||
@@ -71,10 +71,9 @@
|
||||
if(reagents)
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
R.on_ex_act()
|
||||
if(!qdeleted(src))
|
||||
..()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/fire_act(exposed_temperature, exposed_volume)
|
||||
/obj/item/weapon/reagent_containers/fire_act()
|
||||
reagents.chem_temp += 30
|
||||
reagents.handle_reactions()
|
||||
..()
|
||||
@@ -110,9 +109,3 @@
|
||||
return
|
||||
|
||||
reagents.clear_reagents()
|
||||
|
||||
/obj/item/weapon/reagent_containers/microwave_act(obj/machinery/microwave/M)
|
||||
if(is_open_container())
|
||||
reagents.chem_temp = max(reagents.chem_temp, 1000)
|
||||
reagents.handle_reactions()
|
||||
..()
|
||||
@@ -78,7 +78,7 @@
|
||||
var/t = stripped_input(user, "What would you like to label the blood pack?", name, null, 53)
|
||||
if(!user.canUseTopic(src))
|
||||
return
|
||||
if(user.get_active_held_item() != I)
|
||||
if(user.get_active_hand() != I)
|
||||
return
|
||||
if(loc != user)
|
||||
return
|
||||
|
||||
@@ -25,7 +25,6 @@ Borg Hypospray
|
||||
|
||||
var/list/datum/reagents/reagent_list = list()
|
||||
var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "antitoxin", "epinephrine", "spaceacillin")
|
||||
var/accepts_reagent_upgrades = TRUE //If upgrades can increase number of reagents dispensed.
|
||||
var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values.
|
||||
//Used as list for input() in shakers.
|
||||
|
||||
@@ -33,8 +32,11 @@ Borg Hypospray
|
||||
/obj/item/weapon/reagent_containers/borghypo/New()
|
||||
..()
|
||||
|
||||
var/iteration = 1
|
||||
for(var/R in reagent_ids)
|
||||
add_reagent(R)
|
||||
modes[R] = iteration
|
||||
iteration++
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
@@ -71,10 +73,8 @@ Borg Hypospray
|
||||
var/datum/reagents/R = reagent_list[reagent_list.len]
|
||||
R.add_reagent(reagent, 30)
|
||||
|
||||
modes[reagent] = modes.len + 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/proc/regenerate_reagents()
|
||||
if(iscyborg(src.loc))
|
||||
if(isrobot(src.loc))
|
||||
var/mob/living/silicon/robot/R = src.loc
|
||||
if(R && R.cell)
|
||||
for(var/i in 1 to reagent_ids.len)
|
||||
@@ -90,7 +90,7 @@ Borg Hypospray
|
||||
return
|
||||
if(!istype(M))
|
||||
return
|
||||
if(R.total_volume && M.can_inject(user, 1, user.zone_selected,bypass_protection))
|
||||
if(R.total_volume && M.can_inject(user, 1, bypass_protection))
|
||||
M << "<span class='warning'>You feel a tiny prick!</span>"
|
||||
user << "<span class='notice'>You inject [M] with the injector.</span>"
|
||||
var/fraction = min(amount_per_transfer_from_this/R.total_volume, 1)
|
||||
@@ -134,7 +134,6 @@ Borg Hypospray
|
||||
/obj/item/weapon/reagent_containers/borghypo/hacked
|
||||
icon_state = "borghypo_s"
|
||||
reagent_ids = list ("facid", "mutetoxin", "cyanide", "sodium_thiopental", "heparin", "lexorin")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/syndicate
|
||||
name = "syndicate cyborg hypospray"
|
||||
@@ -144,7 +143,6 @@ Borg Hypospray
|
||||
recharge_time = 2
|
||||
reagent_ids = list("syndicate_nanites", "potass_iodide", "morphine")
|
||||
bypass_protection = 1
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/*
|
||||
Borg Shaker
|
||||
@@ -157,7 +155,6 @@ Borg Shaker
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("beer", "orangejuice", "limejuice", "tomatojuice", "cola", "tonic", "sodawater", "ice", "cream", "whiskey", "vodka", "rum", "gin", "tequila", "vermouth", "wine", "kahlua", "cognac", "ale")
|
||||
|
||||
@@ -165,7 +162,7 @@ Borg Shaker
|
||||
return //Can't inject stuff with a shaker, can we? //not with that attitude
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/borgshaker/regenerate_reagents()
|
||||
if(iscyborg(src.loc))
|
||||
if(isrobot(src.loc))
|
||||
var/mob/living/silicon/robot/R = src.loc
|
||||
if(R && R.cell)
|
||||
for(var/i in modes) //Lots of reagents in this one, so it's best to regenrate them all at once to keep it from being tedious.
|
||||
@@ -212,7 +209,6 @@ Borg Shaker
|
||||
possible_transfer_amounts = list(5,10,20)
|
||||
charge_cost = 20 //Lots of reagents all regenerating at once, so the charge cost is lower. They also regenerate faster.
|
||||
recharge_time = 3
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
reagent_ids = list("beer2")
|
||||
|
||||
@@ -220,16 +216,13 @@ Borg Shaker
|
||||
name = "Peace Hypospray"
|
||||
|
||||
reagent_ids = list("dizzysolution","tiresolution")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/peace/hacked
|
||||
desc = "Everything's peaceful in death!"
|
||||
icon_state = "borghypo_s"
|
||||
reagent_ids = list("dizzysolution","tiresolution","tirizene","sulfonal","sodium_thiopental","cyanide","neurotoxin2")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
|
||||
/obj/item/weapon/reagent_containers/borghypo/epi
|
||||
name = "epinephrine injector"
|
||||
desc = "An advanced chemical synthesizer and injection system, designed to stabilize patients.."
|
||||
reagent_ids = list("epinephrine")
|
||||
accepts_reagent_upgrades = FALSE
|
||||
reagent_ids = list("epinephrine")
|
||||
@@ -19,7 +19,7 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
|
||||
cut_overlays()
|
||||
overlays.Cut()
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]-10")
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
volume = 50
|
||||
flags = OPENCONTAINER
|
||||
spillable = 1
|
||||
resistance_flags = ACID_PROOF
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/attack(mob/M, mob/user, obj/target)
|
||||
@@ -20,7 +19,7 @@
|
||||
return
|
||||
|
||||
if(istype(M))
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.a_intent == "harm")
|
||||
var/R
|
||||
M.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [M]!</span>", \
|
||||
"<span class='userdanger'>[user] splashes the contents of [src] onto [M]!</span>")
|
||||
@@ -79,7 +78,7 @@
|
||||
user << "<span class='notice'>You transfer [trans] unit\s of the solution to [target].</span>"
|
||||
|
||||
else if(reagents.total_volume)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
if(user.a_intent == "harm")
|
||||
user.visible_message("<span class='danger'>[user] splashes the contents of [src] onto [target]!</span>", \
|
||||
"<span class='notice'>You splash the contents of [src] onto [target].</span>")
|
||||
reagents.reaction(target, TOUCH)
|
||||
@@ -214,9 +213,6 @@
|
||||
name = "epinephrine reserve tank"
|
||||
list_reagents = list("epinephrine" = 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/beaker/synthflesh
|
||||
list_reagents = list("synthflesh" = 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bucket
|
||||
name = "bucket"
|
||||
desc = "It's a bucket."
|
||||
@@ -224,24 +220,23 @@
|
||||
icon_state = "bucket"
|
||||
item_state = "bucket"
|
||||
materials = list(MAT_METAL=200)
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = 3
|
||||
amount_per_transfer_from_this = 20
|
||||
possible_transfer_amounts = list(10,15,20,25,30,50,70)
|
||||
volume = 70
|
||||
flags = OPENCONTAINER
|
||||
flags_inv = HIDEHAIR
|
||||
slot_flags = SLOT_HEAD
|
||||
resistance_flags = 0
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 75, acid = 50) //Weak melee protection, because you can wear it on your head
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) //Weak melee protection, because you can wear it on your head
|
||||
slot_equipment_priority = list( \
|
||||
slot_back, slot_wear_id,\
|
||||
slot_w_uniform, slot_wear_suit,\
|
||||
slot_wear_mask, slot_head, slot_neck,\
|
||||
slot_wear_mask, slot_head,\
|
||||
slot_shoes, slot_gloves,\
|
||||
slot_ears, slot_glasses,\
|
||||
slot_belt, slot_s_store,\
|
||||
slot_l_store, slot_r_store,\
|
||||
slot_generic_dextrous_storage
|
||||
slot_drone_storage
|
||||
)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bucket/attackby(obj/O, mob/user, params)
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
possible_transfer_amounts = list()
|
||||
resistance_flags = ACID_PROOF
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
var/ignore_flags = 0
|
||||
@@ -47,7 +46,6 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/CMO
|
||||
list_reagents = list("omnizine" = 30)
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/combat
|
||||
name = "combat stimulant injector"
|
||||
@@ -83,7 +81,7 @@
|
||||
..()
|
||||
update_icon()
|
||||
spawn(80)
|
||||
if(iscyborg(user) && !reagents.total_volume)
|
||||
if(isrobot(user) && !reagents.total_volume)
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.cell.use(100))
|
||||
reagents.add_reagent_list(list_reagents)
|
||||
@@ -130,11 +128,11 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/medipen/survival
|
||||
name = "survival medipen"
|
||||
desc = "A medipen for surviving in the harshest of environments, heals and protects from environmental hazards. WARNING: Do not inject more than one pen in quick succession."
|
||||
desc = "A medipen for surviving in the harshest of environments, heals and protects from environmental hazards. "
|
||||
icon_state = "stimpen"
|
||||
volume = 57
|
||||
amount_per_transfer_from_this = 57
|
||||
list_reagents = list("salbutamol" = 10, "leporazine" = 15, "tricordrazine" = 15, "epinephrine" = 10, "miningnanites" = 2, "omnizine" = 5)
|
||||
volume = 82
|
||||
amount_per_transfer_from_this = 82
|
||||
list_reagents = list("nanites" = 2, "salbutamol" = 10, "coffee" = 20, "leporazine" = 20, "tricordrazine" = 15, "epinephrine" = 10, "omnizine" = 5, "stimulants" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/medipen/species_mutator
|
||||
name = "species mutator medipen"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
flags = OPENCONTAINER | NOBLUDGEON
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
w_class = 2
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/stream_mode = 0 //whether we use the more focused mode
|
||||
@@ -17,7 +17,7 @@
|
||||
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 250
|
||||
possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
|
||||
possible_transfer_amounts = list()
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user)
|
||||
@@ -117,6 +117,7 @@
|
||||
user << "<span class='notice'>You switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.</span>"
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/verb/empty()
|
||||
|
||||
set name = "Empty Spray Bottle"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -135,7 +136,6 @@
|
||||
desc = "BLAM!-brand non-foaming space cleaner!"
|
||||
list_reagents = list("cleaner" = 250)
|
||||
|
||||
//spray tan
|
||||
/obj/item/weapon/reagent_containers/spray/spraytan
|
||||
name = "spray tan"
|
||||
volume = 50
|
||||
@@ -143,19 +143,6 @@
|
||||
list_reagents = list("spraytan" = 50)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/medical
|
||||
name = "medical spray"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "medspray"
|
||||
volume = 100
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/medical/sterilizer
|
||||
name = "sterilizer spray"
|
||||
desc = "Spray bottle loaded with non-toxic sterilizer. Useful in preparation for surgery."
|
||||
list_reagents = list("sterilizine" = 100)
|
||||
|
||||
|
||||
//pepperspray
|
||||
/obj/item/weapon/reagent_containers/spray/pepper
|
||||
name = "pepperspray"
|
||||
@@ -190,7 +177,7 @@
|
||||
icon_state = "chemsprayer"
|
||||
item_state = "chemsprayer"
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = 3
|
||||
stream_mode = 1
|
||||
current_range = 7
|
||||
spray_range = 4
|
||||
@@ -224,3 +211,23 @@
|
||||
item_state = "plantbgone"
|
||||
volume = 100
|
||||
list_reagents = list("plantbgone" = 100)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/thermite
|
||||
name = "Thermite Spray"
|
||||
desc = "A 50u spray bottle loaded with thermite, for melting walls. "
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "thermitespray"
|
||||
item_state = "thermitespray"
|
||||
volume = 50
|
||||
list_reagents = list("thermite" = 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/spray/thermite/afterattack(atom/A as mob|obj, mob/user)
|
||||
if(istype(A, /turf/closed/wall))
|
||||
if(reagents.get_reagent_amount("thermite") >= 10)
|
||||
user.visible_message("<span class='notice'>You spray the thermite on [A].</span>")
|
||||
reagents.reaction(A, TOUCH)
|
||||
reagents.remove_reagent("thermite", 10)
|
||||
else
|
||||
user.visible_message("<span class='warning'>You don't have enough thermite left!</span>")
|
||||
return
|
||||
else return ..()
|
||||
@@ -12,7 +12,7 @@
|
||||
volume = 15
|
||||
var/mode = SYRINGE_DRAW
|
||||
var/busy = 0 // needed for delayed drawing of blood
|
||||
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
|
||||
var/projectile_type = /obj/item/projectile/bullet/dart/syringe
|
||||
materials = list(MAT_METAL=10, MAT_GLASS=20)
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/New()
|
||||
@@ -207,9 +207,6 @@
|
||||
/obj/item/weapon/reagent_containers/syringe/lethal/choral
|
||||
list_reagents = list("chloralhydrate" = 50)
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/lethal/execution
|
||||
list_reagents = list("plasma" = 15, "formaldehyde" = 15, "cyanide" = 10, "facid" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/syringe/mulligan
|
||||
name = "Mulligan"
|
||||
desc = "A syringe used to completely change the users identity."
|
||||
@@ -245,5 +242,5 @@
|
||||
name = "piercing syringe"
|
||||
desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units."
|
||||
volume = 10
|
||||
proj_piercing = 1
|
||||
projectile_type = /obj/item/projectile/bullet/dart/syringe/piercing
|
||||
origin_tech = "combat=3;materials=4;engineering=5"
|
||||
|
||||
@@ -6,16 +6,28 @@
|
||||
density = 1
|
||||
anchored = 0
|
||||
pressure_resistance = 2*ONE_ATMOSPHERE
|
||||
obj_integrity = 300
|
||||
max_integrity = 300
|
||||
var/tank_volume = 1000 //In units, how much the dispenser can hold
|
||||
var/reagent_id = "water" //The ID of the reagent that the dispenser uses
|
||||
|
||||
/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
. = ..()
|
||||
if(. && obj_integrity > 0)
|
||||
if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser"))
|
||||
boom()
|
||||
/obj/structure/reagent_dispensers/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
return
|
||||
if(2)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
return
|
||||
if(3)
|
||||
if (prob(5))
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers))
|
||||
@@ -36,62 +48,72 @@
|
||||
user << "<span class='danger'>It's empty.</span>"
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/proc/boom()
|
||||
visible_message("<span class='danger'>\The [src] ruptures!</span>")
|
||||
chem_splash(loc, 5, list(reagents))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE)
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
if(!disassembled)
|
||||
boom()
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank
|
||||
name = "water tank"
|
||||
desc = "A water tank."
|
||||
icon_state = "water"
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
return
|
||||
if(2)
|
||||
if (prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
if(3)
|
||||
if (prob(5))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act(obj/effect/blob/B)
|
||||
if(prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/high
|
||||
name = "high-capacity water tank"
|
||||
desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.."
|
||||
icon_state = "water_high" //I was gonna clean my room...
|
||||
tank_volume = 100000
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank
|
||||
name = "fuel tank"
|
||||
desc = "A tank full of industrial welding fuel. Do not consume."
|
||||
icon_state = "fuel"
|
||||
reagent_id = "welding_fuel"
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/boom()
|
||||
/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj)
|
||||
..()
|
||||
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||
message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile.")
|
||||
log_game("[key_name(Proj.firer)] triggered a fueltank explosion via projectile.")
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/proc/boom()
|
||||
explosion(get_turf(src), 0, 1, 5, flame_range = 5)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B)
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/effect/blob/B)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/ex_act()
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/fire_act(exposed_temperature, exposed_volume)
|
||||
/obj/structure/reagent_dispensers/fueltank/fire_act()
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/tesla_act()
|
||||
..() //extend the zap
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/P)
|
||||
..()
|
||||
if(!qdeleted(src)) //wasn't deleted by the projectile's effects.
|
||||
if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE)))
|
||||
var/boom_message = "[key_name_admin(P.firer)] triggered a fueltank explosion via projectile."
|
||||
bombers += boom_message
|
||||
message_admins(boom_message)
|
||||
log_game("[key_name(P.firer)] triggered a fueltank explosion via projectile.")
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
if(!reagents.has_reagent("welding_fuel"))
|
||||
@@ -103,14 +125,12 @@
|
||||
user << "<span class='warning'>Your [W.name] is already full!</span>"
|
||||
return
|
||||
reagents.trans_to(W, W.max_fuel)
|
||||
user.visible_message("<span class='notice'>[user] refills [user.p_their()] [W.name].</span>", "<span class='notice'>You refill [W].</span>")
|
||||
user.visible_message("<span class='notice'>[user] refills \his [W.name].</span>", "<span class='notice'>You refill [W].</span>")
|
||||
playsound(src, 'sound/effects/refill.ogg', 50, 1)
|
||||
update_icon()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] catastrophically fails at refilling [user.p_their()] [W.name]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
|
||||
var/message = "[key_name_admin(user)] triggered a fueltank explosion via welding tool."
|
||||
bombers += message
|
||||
message_admins(message)
|
||||
user.visible_message("<span class='warning'>[user] catastrophically fails at refilling \his [W.name]!</span>", "<span class='userdanger'>That was stupid of you.</span>")
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion via welding tool.")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion via welding tool.")
|
||||
boom()
|
||||
return
|
||||
@@ -160,10 +180,8 @@
|
||||
icon_state = "beer"
|
||||
reagent_id = "beer"
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B)
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/effect/blob/B)
|
||||
explosion(src.loc,0,3,5,7,10)
|
||||
if(!qdeleted(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/reagent_dispensers/virusfood
|
||||
@@ -171,4 +189,4 @@
|
||||
desc = "A dispenser of low-potency virus mutagenic."
|
||||
icon_state = "virus_food"
|
||||
anchored = 1
|
||||
reagent_id = "virusfood"
|
||||
reagent_id = "virusfood"
|
||||
|
||||
Reference in New Issue
Block a user