[MIRROR] [Ready] Fermichem part 2.3 Adds a new reagent: Eigenstasium (#4445)

* [Ready] Fermichem part 2.3 Adds a new reagent: Eigenstasium

* Update quirks.dm

* Update closets.dm

* aaaaaaa

* Update lizardpeople.dm

* Update mothmen.dm

* Update species.dm

* Update species.dm

Co-authored-by: Thalpy <33956696+Thalpy@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
Co-authored-by: Azarak <azarak10@gmail.com>
This commit is contained in:
SkyratBot
2021-03-30 10:12:19 +02:00
committed by GitHub
parent faf4762e63
commit 1fbe38a51a
30 changed files with 866 additions and 184 deletions

View File

@@ -114,6 +114,8 @@
#define COLOR_THEME_GLASS "#75A4C4" #define COLOR_THEME_GLASS "#75A4C4"
#define COLOR_THEME_CLOCKWORK "#CFBA47" #define COLOR_THEME_CLOCKWORK "#CFBA47"
///Colors for eigenstates
#define COLOR_PERIWINKLEE "#9999FF"
/** /**
* Some defines to generalise colours used in lighting. * Some defines to generalise colours used in lighting.
* *

View File

@@ -741,6 +741,16 @@
///from [/obj/structure/closet/supplypod/proc/preOpen]: ///from [/obj/structure/closet/supplypod/proc/preOpen]:
#define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom" #define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom"
///Closets
///From base of [/obj/structure/closet/proc/insert]: (atom/movable/inserted)
#define COMSIG_CLOSET_INSERT "closet_insert"
///used to interrupt insertion
#define COMPONENT_CLOSET_INSERT_INTERRUPT (1<<0)
///Eigenstasium
///From base of [/datum/controller/subsystem/eigenstates/proc/use_eigenlinked_atom]: (var/target)
#define COMSIG_EIGENSTATE_ACTIVATE "eigenstate_activate"
// /obj signals for economy // /obj signals for economy
///called when the payment component tries to charge an account. ///called when the payment component tries to charge an account.
#define COMSIG_OBJ_ATTEMPT_CHARGE "obj_attempt_simple_charge" #define COMSIG_OBJ_ATTEMPT_CHARGE "obj_attempt_simple_charge"

View File

@@ -9,6 +9,12 @@
#define STATUS_EFFECT_REFRESH 3 // if it only allows one, and new instances just instead refresh the timer #define STATUS_EFFECT_REFRESH 3 // if it only allows one, and new instances just instead refresh the timer
///Processing flags - used to define the speed at which the status will work
///This is fast - 0.2s between ticks (I believe!)
#define STATUS_EFFECT_FAST_PROCESS 0
///This is slower and better for more intensive status effects - 1s between ticks
#define STATUS_EFFECT_NORMAL_PROCESS 1
/////////// ///////////
// BUFFS // // BUFFS //
/////////// ///////////
@@ -127,6 +133,8 @@
#define STATUS_EFFECT_HIGHFIVE /datum/status_effect/high_fiving // you are angling for a high five #define STATUS_EFFECT_HIGHFIVE /datum/status_effect/high_fiving // you are angling for a high five
#define STATUS_EFFECT_SURRENDER /datum/status_effect/grouped/surrender // gives an alert to quickly surrender #define STATUS_EFFECT_SURRENDER /datum/status_effect/grouped/surrender // gives an alert to quickly surrender
#define STATUS_EFFECT_EIGEN /datum/status_effect/eigenstasium
///////////// /////////////
// SLIME // // SLIME //
///////////// /////////////

View File

@@ -0,0 +1,112 @@
///Subsystem used to teleport people to a linked web of itterative entries. If one entry is deleted, the 2 around it will forge a link instead.
SUBSYSTEM_DEF(eigenstates)
name = "Eigenstates"
flags = SS_NO_INIT | SS_NO_FIRE
///The list of objects that something is linked to indexed by UID
var/list/eigen_targets = list()
///UID to object reference
var/list/eigen_id = list()
///Unique id counter
var/id_counter = 1
///Limit the number of sparks created when teleporting multiple atoms to 1
var/spark_time = 0
///Creates a new link of targets unique to their own id
/datum/controller/subsystem/eigenstates/proc/create_new_link(targets)
if(length(targets) <= 1)
return FALSE
for(var/atom/target as anything in targets) //Clear out any connected
var/already_linked = eigen_id[target]
if(!already_linked)
continue
if(length(eigen_targets[already_linked]) > 1) //Eigenstates are notorious for having cliques!
target.visible_message("[target] fizzes, it's already linked to something else!")
targets -= target
continue
target.visible_message("[target] fizzes, collapsing it's unique wavefunction into the others!") //If we're in a eigenlink all on our own and are open to new friends
remove_eigen_entry(target) //clearup for new stuff
//Do we still have targets?
if(!length(targets))
return FALSE
var/atom/visible_atom = targets[1] //The object that'll handle the messages
if(length(targets) == 1)
visible_atom.visible_message("[targets[1]] fizzes, there's nothing it can link to!")
return FALSE
eigen_targets["[id_counter]"] = list() //Add to the master list
for(var/atom/target as anything in targets)
eigen_targets["[id_counter]"] += target
eigen_id[target] = "[id_counter]"
RegisterSignal(target, COMSIG_CLOSET_INSERT, .proc/use_eigenlinked_atom)
RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/remove_eigen_entry)
RegisterSignal(target, COMSIG_ATOM_TOOL_ACT(TOOL_WELDER), .proc/tool_interact)
target.RegisterSignal(target, COMSIG_EIGENSTATE_ACTIVATE, /obj/structure/closet/proc/bust_open)
var/obj/item = target
if(item)
item.color = COLOR_PERIWINKLEE //Tint the locker slightly.
item.alpha = 200
do_sparks(3, FALSE, item)
visible_atom.visible_message("The items shimmer and fizzle, turning a shade of violet blue.")
id_counter++
return TRUE
///reverts everything back to start
/datum/controller/subsystem/eigenstates/Destroy()
for(var/index in 1 to id_counter)
for(var/entry in eigen_targets["[index]"])
remove_eigen_entry(entry)
eigen_targets = null
eigen_id = null
id_counter = 1
return ..()
///removes an object reference from the master list
/datum/controller/subsystem/eigenstates/proc/remove_eigen_entry(atom/entry)
var/id = eigen_id[entry]
eigen_targets[id] -= entry
eigen_id -= entry
entry.color = COLOR_WHITE
entry.alpha = 255
UnregisterSignal(entry, list(
COMSIG_PARENT_QDELETING,
COMSIG_CLOSET_INSERT,
COMSIG_ATOM_TOOL_ACT(TOOL_WELDER),
))
entry.UnregisterSignal(entry, COMSIG_EIGENSTATE_ACTIVATE) //This is a signal on the object itself so we have to call it from that
///Remove the current entry if we're empty
for(var/targets in eigen_targets)
if(!length(eigen_targets[targets]))
eigen_targets -= targets
///Finds the object within the master list, then sends the thing to the object's location
/datum/controller/subsystem/eigenstates/proc/use_eigenlinked_atom(atom/object_sent_from, atom/movable/thing_to_send)
var/id = eigen_id[object_sent_from]
if(!id)
stack_trace("[object_sent_from] attempted to eigenlink to something that didn't have a valid id!")
return FALSE
var/list/items = eigen_targets[id]
var/index = (items.Find(object_sent_from))+1 //index + 1
if(!index)
stack_trace("[object_sent_from] attempted to eigenlink to something that didn't contain it!")
return FALSE
if(index > length(eigen_targets[id]))//If we're at the end of the list (or we're 1 length long)
index = 1
var/atom/eigen_target = eigen_targets[id][index]
if(!eigen_target)
stack_trace("No eigen target set for the eigenstate component!")
return FALSE
thing_to_send.forceMove(get_turf(eigen_target))
//Create ONE set of sparks for ALL times in iteration
if(spark_time != world.time)
do_sparks(5, FALSE, eigen_target)
do_sparks(5, FALSE, object_sent_from)
spark_time = world.time
//Calls a special proc for the atom if needed (closets use bust_open())
SEND_SIGNAL(eigen_target, COMSIG_EIGENSTATE_ACTIVATE)
return COMPONENT_CLOSET_INSERT_INTERRUPT
///Prevents tool use on the item
/datum/controller/subsystem/eigenstates/proc/tool_interact(atom/source, mob/user, obj/item/item)
to_chat(user, "<span class='notice'>The unstable nature of [source] makes it impossible to use [item] on [source.p_them()]!</span>")
return COMPONENT_BLOCK_TOOL_ATTACK

View File

@@ -1,4 +1,6 @@
#define EXP_ASSIGN_WAYFINDER 1200 #define EXP_ASSIGN_WAYFINDER 1200
#define RANDOM_QUIRK_BONUS 3
#define MINIMUM_RANDOM_QUIRKS 3
//Used to process and handle roundstart quirks //Used to process and handle roundstart quirks
// - Quirk strings are used for faster checking in code // - Quirk strings are used for faster checking in code
// - Quirk datums are stored and hold different effects, as well as being a vector for applying trait string // - Quirk datums are stored and hold different effects, as well as being a vector for applying trait string
@@ -80,3 +82,68 @@ PROCESSING_SUBSYSTEM_DEF(quirks)
for(var/V in cli.prefs.fooddislikes) for(var/V in cli.prefs.fooddislikes)
H.dna.species.disliked_food |= cli.prefs.fooddislikes[V] H.dna.species.disliked_food |= cli.prefs.fooddislikes[V]
// SKYRAT EDIT ADDITION END // SKYRAT EDIT ADDITION END
/*
*Randomises the quirks for a specified mob
*/
/datum/controller/subsystem/processing/quirks/proc/randomise_quirks(mob/living/user)
var/bonus_quirks = max((length(user.roundstart_quirks) + rand(-RANDOM_QUIRK_BONUS, RANDOM_QUIRK_BONUS)), MINIMUM_RANDOM_QUIRKS)
var/added_quirk_count = 0 //How many we've added
var/list/quirks_to_add = list() //Quirks we're adding
var/good_count = 0 //Maximum of 6 good perks
var/score //What point score we're at
///Cached list of possible quirks
var/list/possible_quirks = quirks.Copy()
//Create a random list of stuff to start with
while(bonus_quirks > added_quirk_count)
var/quirk = pick(possible_quirks) //quirk is a string
if(quirk in quirk_blacklist) //prevent blacklisted
possible_quirks -= quirk
continue
if(quirk_points[quirk] > 0)
good_count++
score += quirk_points[quirk]
quirks_to_add += quirk
possible_quirks -= quirk
added_quirk_count++
//But lets make sure we're balanced
while(score > 0)
if(!length(possible_quirks))//Lets not get stuck
break
var/quirk = pick(quirks)
if(quirk in quirk_blacklist) //prevent blacklisted
possible_quirks -= quirk
continue
if(!quirk_points[quirk] < 0)//negative only
possible_quirks -= quirk
continue
good_count++
score += quirk_points[quirk]
quirks_to_add += quirk
//And have benefits too
while(score < 0 && good_count <= MAX_QUIRKS)
if(!length(possible_quirks))//Lets not get stuck
break
var/quirk = pick(quirks)
if(quirk in quirk_blacklist) //prevent blacklisted
possible_quirks -= quirk
continue
if(!quirk_points[quirk] > 0) //positive only
possible_quirks -= quirk
continue
good_count++
score += quirk_points[quirk]
quirks_to_add += quirk
for(var/datum/quirk/quirk as anything in user.roundstart_quirks)
if(quirk.name in quirks_to_add) //Don't delete ones we keep
quirks_to_add -= quirk.name //Already there, no need to add.
continue
user.remove_quirk(quirk.type) //these quirks are objects
for(var/datum/quirk/quirk as anything in quirks_to_add)
user.add_quirk(quirks[quirk], spawn_effects = TRUE)//these are typepaths converted from string
#undef RANDOM_QUIRK_BONUS
#undef MINIMUM_RANDOM_QUIRKS

View File

@@ -79,6 +79,23 @@
mood_change = 6 mood_change = 6
timeout = 3 MINUTES timeout = 3 MINUTES
#define EIGENTRIP_MOOD_RANGE 10
/datum/mood_event/eigentrip
description = "<span class='nicegreen'>I swapped places with an alternate reality version of myself!</span>\n"
mood_change = 0
timeout = 10 MINUTES
/datum/mood_event/eigentrip/add_effects(param)
var/value = rand(-EIGENTRIP_MOOD_RANGE,EIGENTRIP_MOOD_RANGE)
mood_change = value
if(value < 0)
description = "<span class='warning'>I swapped places with an alternate reality version of myself! I want to go home!</span>\n"
else
description = "<span class='nicegreen'>I swapped places with an alternate reality version of myself! Though, this place is much better than my old life.</span>\n"
#undef EIGENTRIP_MOOD_RANGE
/datum/mood_event/nicotine_withdrawal_moderate /datum/mood_event/nicotine_withdrawal_moderate
description = "<span class='warning'>Haven't had a smoke in a while. Feeling a little on edge... </span>\n" description = "<span class='warning'>Haven't had a smoke in a while. Feeling a little on edge... </span>\n"
mood_change = -5 mood_change = -5

View File

@@ -202,15 +202,7 @@
id = "Exercised" id = "Exercised"
duration = 1200 duration = 1200
alert_type = null alert_type = null
processing_speed = STATUS_EFFECT_NORMAL_PROCESS
/datum/status_effect/exercised/on_creation(mob/living/new_owner, ...)
. = ..()
STOP_PROCESSING(SSfastprocess, src)
START_PROCESSING(SSprocessing, src) //this lasts 20 minutes, so SSfastprocess isn't needed.
/datum/status_effect/exercised/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
//Hippocratic Oath: Applied when the Rod of Asclepius is activated. //Hippocratic Oath: Applied when the Rod of Asclepius is activated.
/datum/status_effect/hippocratic_oath /datum/status_effect/hippocratic_oath

View File

@@ -342,3 +342,201 @@
tick_interval = INFINITY tick_interval = INFINITY
status_type = STATUS_EFFECT_REFRESH status_type = STATUS_EFFECT_REFRESH
alert_type = null alert_type = null
#define EIGENSTASIUM_MAX_BUFFER -250
#define EIGENSTASIUM_STABILISATION_RATE 5
#define EIGENSTASIUM_PHASE_1_END 50
#define EIGENSTASIUM_PHASE_2_END 80
#define EIGENSTASIUM_PHASE_3_START 100
#define EIGENSTASIUM_PHASE_3_END 150
/datum/status_effect/eigenstasium
id = "eigenstasium"
status_type = STATUS_EFFECT_UNIQUE
alert_type = null
processing_speed = STATUS_EFFECT_NORMAL_PROCESS
///So we know what cycle we're in during the status
var/current_cycle = EIGENSTASIUM_MAX_BUFFER //Consider it your stability
///The addiction looper for addiction stage 3
var/phase_3_cycle = -0 //start off delayed
///Your clone from another reality
var/mob/living/carbon/alt_clone = null
///If we display the stabilised message or not
var/stable_message = FALSE
/datum/status_effect/eigenstasium/Destroy()
if(alt_clone)
UnregisterSignal(alt_clone, COMSIG_PARENT_QDELETING)
QDEL_NULL(alt_clone)
return ..()
/datum/status_effect/eigenstasium/tick()
. = ..()
//This stuff runs every cycle
if(prob(5))
do_sparks(5, FALSE, owner)
//If we have a reagent that blocks the effects
var/block_effects = FALSE
if(owner.has_reagent(/datum/reagent/bluespace))
current_cycle = max(EIGENSTASIUM_MAX_BUFFER, (current_cycle - (EIGENSTASIUM_STABILISATION_RATE * 1.5))) //cap to -250
block_effects = TRUE
if(owner.has_reagent(/datum/reagent/stabilizing_agent))
current_cycle = max(EIGENSTASIUM_MAX_BUFFER, (current_cycle - EIGENSTASIUM_STABILISATION_RATE))
block_effects = TRUE
var/datum/reagent/eigen = owner.has_reagent(/datum/reagent/eigenstate)
if(eigen)
if(eigen.overdosed)
block_effects = FALSE
else
current_cycle = max(EIGENSTASIUM_MAX_BUFFER, (current_cycle - (EIGENSTASIUM_STABILISATION_RATE * 2)))
block_effects = TRUE
if(!QDELETED(alt_clone)) //catch any stragglers
do_sparks(5, FALSE, alt_clone)
owner.visible_message("[owner] is snapped across to a different alternative reality!")
QDEL_NULL(alt_clone)
if(block_effects)
if(!stable_message)
owner.visible_message("You feel stable...for now.")
stable_message = TRUE
return
stable_message = FALSE
//These run on specific cycles
switch(current_cycle)
if(0)
to_chat(owner, "<span class='userdanger'>You feel like you're being pulled across to somewhere else. You feel empty inside.</span>")
//phase 1
if(1 to EIGENSTASIUM_PHASE_1_END)
owner.Jitter(2)
owner.adjust_nutrition(-4)
//phase 2
if(EIGENSTASIUM_PHASE_1_END to EIGENSTASIUM_PHASE_2_END)
if(current_cycle == 51)
to_chat(owner, "<span class='userdanger'>You start to convlse violently as you feel your consciousness merges across realities, your possessions flying wildy off your body!</span>")
owner.Jitter(200)
owner.Knockdown(10)
var/items = owner.get_contents()
if(!LAZYLEN(items))
return ..()
var/obj/item/item = pick(items)
owner.dropItemToGround(item, TRUE)
do_sparks(5,FALSE,item)
do_teleport(item, get_turf(item), 3, no_effects=TRUE);
do_sparks(5,FALSE,item)
//phase 3 - little break to get your items
if(EIGENSTASIUM_PHASE_3_START to EIGENSTASIUM_PHASE_3_END)
//Clone function - spawns a clone then deletes it - simulates multiple copies of the player teleporting in
switch(phase_3_cycle) //Loops 0 -> 1 -> 2 -> 1 -> 2 -> 1 ...ect.
if(0)
owner.Jitter(100)
to_chat(owner, "<span class='userdanger'>Your eigenstate starts to rip apart, drawing in alternative reality versions of yourself!</span>")
if(1)
var/typepath = owner.type
alt_clone = new typepath(owner.loc)
alt_clone.appearance = owner.appearance
alt_clone.real_name = owner.real_name
RegisterSignal(alt_clone, COMSIG_PARENT_QDELETING, .proc/remove_clone_from_var)
owner.visible_message("[owner] splits into seemingly two versions of themselves!")
do_teleport(alt_clone, get_turf(alt_clone), 2, no_effects=TRUE) //teleports clone so it's hard to find the real one!
do_sparks(5,FALSE,alt_clone)
alt_clone.emote("spin")
owner.emote("spin")
var/static/list/say_phrases = list(
"Bugger me, whats all this then?",
"Sacre bleu! Ou suis-je?!",
"I knew powering the station using a singularity engine would lead to something like this...",
"Wow, I can't believe in your universe Cencomm got rid of cloning.",
"WHAT IS HAPPENING?!",
"YOU'VE CREATED A TIME PARADOX!",
"You trying to steal my job?",
"So that's what I'd look like if I was ugly...",
"So, two alternate universe twins walk into a bar...",
"YOU'VE DOOMED THE TIMELINE!",
"Ruffle a cat once in a while!",
"I'm starting to get why no one wants to hang out with me.",
"Why haven't you gotten around to starting that band?!",
"No!! I was just about to greentext!",
"Kept you waiting huh?",
"Oh god I think I'm ODing I'm seeing a fake version of me.",
"Hey, I remember that phase, glad I grew out of it.",
"Keep going lets see if more of us show up.",
"I bet we can finally take the clown now.",
"LING DISGUISED AS ME!",
"El psy congroo.",
"At long last! My evil twin!",
"Keep going lets see if more of us show up.",
"No! Dark spirits, do not torment me with these visions of my future self! It's horrible!",
"Good. Now that the council is assembled the meeting can begin.",
"Listen! I only have so much time before I'm ripped away. The secret behind the gas giants are...",
"Das ist nicht deutschland. Das ist nicht akzeptabel!!!",
"I've come from the future to warn you about eigenstasium! Oh no! I'm too late!",
"You fool! You took too much eigenstasium! You've doomed us all!",
"Don't trust any bagels you see until next month!",
"What...what's with these teleports? It's like one of my Japanese animes...!",
"Ik stond op het punt om mehki op tafel te zetten, en nu, waar ben ik?",
"Wake the fuck up spaceman we have a gas giant to burn",
"This is one hell of a beepsky smash.",
"Now neither of us will be virgins!")
alt_clone.say(pick(say_phrases))
if(2)
phase_3_cycle = 0 //counter
phase_3_cycle++
do_teleport(owner, get_turf(owner), 2, no_effects=TRUE) //Teleports player randomly
do_sparks(5, FALSE, owner)
//phase 4
if(EIGENSTASIUM_PHASE_3_END to INFINITY)
//clean up and remove status
SSblackbox.record_feedback("tally", "chemical_reaction", 1, "Eigenstasium wild rides ridden")
do_sparks(5, FALSE, owner)
do_teleport(owner, get_turf(owner), 2, no_effects=TRUE) //teleports clone so it's hard to find the real one!
do_sparks(5, FALSE, owner)
owner.Sleeping(100)
owner.Jitter(50)
to_chat(owner, "<span class='userdanger'>You feel your eigenstate settle, as \"you\" become an alternative version of yourself!</span>")
owner.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
log_game("FERMICHEM: [owner] ckey: [owner.key] has become an alternative universe version of themselves.")
//new you new stuff
SSquirks.randomise_quirks(owner)
owner.reagents.remove_all(1000)
var/datum/component/mood/mood = owner.GetComponent(/datum/component/mood)
mood.remove_temp_moods() //New you, new moods.
var/mob/living/carbon/human/human_mob = owner
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "Eigentrip", /datum/mood_event/eigentrip)
if(QDELETED(human_mob))
return
if(prob(1))//low chance of the alternative reality returning to monkey
var/obj/item/organ/tail/monkey/monkey_tail = new ()
monkey_tail.Insert(human_mob, drop_if_replaced = FALSE)
var/datum/species/human_species = human_mob.dna?.species
if(human_species)
human_species.randomize_main_appearance_element(human_mob)
human_species.randomize_active_underwear(human_mob)
owner.remove_status_effect(STATUS_EFFECT_EIGEN)
//Finally increment cycle
current_cycle++
/datum/status_effect/eigenstasium/proc/remove_clone_from_var()
UnregisterSignal(alt_clone, COMSIG_PARENT_QDELETING)
/datum/status_effect/eigenstasium/on_remove()
if(!QDELETED(alt_clone))//catch any stragilers
do_sparks(5, FALSE, alt_clone)
owner.visible_message("One of the [owner]s suddenly phases out of reality in front of you!")
QDEL_NULL(alt_clone)
return ..()
#undef EIGENSTASIUM_MAX_BUFFER
#undef EIGENSTASIUM_STABILISATION_RATE
#undef EIGENSTASIUM_PHASE_1_END
#undef EIGENSTASIUM_PHASE_2_END
#undef EIGENSTASIUM_PHASE_3_START
#undef EIGENSTASIUM_PHASE_3_END

View File

@@ -12,6 +12,8 @@
var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves
var/alert_type = /atom/movable/screen/alert/status_effect //the alert thrown by the status effect, contains name and description var/alert_type = /atom/movable/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
var/atom/movable/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists var/atom/movable/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists
///Processing speed - used to define if the status effect should be using SSfastprocess or SSprocessing
var/processing_speed = STATUS_EFFECT_FAST_PROCESS
/datum/status_effect/New(list/arguments) /datum/status_effect/New(list/arguments)
on_creation(arglist(arguments)) on_creation(arglist(arguments))
@@ -32,11 +34,19 @@
A.attached_effect = src //so the alert can reference us, if it needs to A.attached_effect = src //so the alert can reference us, if it needs to
linked_alert = A //so we can reference the alert, if we need to linked_alert = A //so we can reference the alert, if we need to
if(duration > 0 || initial(tick_interval) > 0) //don't process if we don't care if(duration > 0 || initial(tick_interval) > 0) //don't process if we don't care
START_PROCESSING(SSfastprocess, src) switch(processing_speed)
if(STATUS_EFFECT_FAST_PROCESS)
START_PROCESSING(SSfastprocess, src)
if (STATUS_EFFECT_NORMAL_PROCESS)
START_PROCESSING(SSprocessing, src)
return TRUE return TRUE
/datum/status_effect/Destroy() /datum/status_effect/Destroy()
STOP_PROCESSING(SSfastprocess, src) switch(processing_speed)
if(STATUS_EFFECT_FAST_PROCESS)
STOP_PROCESSING(SSfastprocess, src)
if (STATUS_EFFECT_NORMAL_PROCESS)
STOP_PROCESSING(SSprocessing, src)
if(owner) if(owner)
linked_alert = null linked_alert = null
owner.clear_alert(id) owner.clear_alert(id)

View File

@@ -468,6 +468,9 @@ GENE SCANNER
else else
render_list += "<span class='notice ml-1'>Subject is not addicted to any types of drug.</span>\n" render_list += "<span class='notice ml-1'>Subject is not addicted to any types of drug.</span>\n"
if(M.has_status_effect(/datum/status_effect/eigenstasium))
render_list += "<span class='notice ml-1'>Subject is temporally unstable. Stabilising agent is recommended to reduce disturbances.</span>\n"
to_chat(user, jointext(render_list, ""), trailing_newline = FALSE) // we handled the last <br> so we don't need handholding to_chat(user, jointext(render_list, ""), trailing_newline = FALSE) // we handled the last <br> so we don't need handholding
/obj/item/healthanalyzer/verb/toggle_mode() /obj/item/healthanalyzer/verb/toggle_mode()

View File

@@ -1,3 +1,5 @@
#define LOCKER_FULL -1
/obj/structure/closet//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE /obj/structure/closet//SKYRAT EDIT - ICON OVERRIDEN BY AESTHETICS - SEE MODULE
name = "closet" name = "closet"
desc = "It's a basic storage unit." desc = "It's a basic storage unit."
@@ -40,7 +42,6 @@
/// Whether a skittish person can dive inside this closet. Disable if opening the closet causes "bad things" to happen or that it leads to a logical inconsistency. /// Whether a skittish person can dive inside this closet. Disable if opening the closet causes "bad things" to happen or that it leads to a logical inconsistency.
var/divable = TRUE var/divable = TRUE
/obj/structure/closet/Initialize(mapload) /obj/structure/closet/Initialize(mapload)
if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents
addtimer(CALLBACK(src, .proc/take_contents), 0) addtimer(CALLBACK(src, .proc/take_contents), 0)
@@ -146,7 +147,7 @@
/obj/structure/closet/proc/take_contents() /obj/structure/closet/proc/take_contents()
var/atom/L = drop_location() var/atom/L = drop_location()
for(var/atom/movable/AM in L) for(var/atom/movable/AM in L)
if(AM != src && insert(AM) == -1) // limit reached if(AM != src && insert(AM) == LOCKER_FULL) // limit reached
break break
for(var/i in reverseRange(L.GetAllContents())) for(var/i in reverseRange(L.GetAllContents()))
var/atom/movable/thing = i var/atom/movable/thing = i
@@ -172,14 +173,15 @@
/obj/structure/closet/proc/after_open(mob/living/user, force = FALSE) /obj/structure/closet/proc/after_open(mob/living/user, force = FALSE)
return return
/obj/structure/closet/proc/insert(atom/movable/AM) /obj/structure/closet/proc/insert(atom/movable/inserted)
if(contents.len >= storage_capacity) if(length(contents) >= storage_capacity)
return -1 return LOCKER_FULL
if(insertion_allowed(AM)) if(!insertion_allowed(inserted))
AM.forceMove(src)
return TRUE
else
return FALSE return FALSE
if(SEND_SIGNAL(src, COMSIG_CLOSET_INSERT, inserted) & COMPONENT_CLOSET_INSERT_INTERRUPT)
return TRUE
inserted.forceMove(src)
return TRUE
/obj/structure/closet/proc/insertion_allowed(atom/movable/AM) /obj/structure/closet/proc/insertion_allowed(atom/movable/AM)
if(ismob(AM)) if(ismob(AM))
@@ -440,6 +442,7 @@
to_chat(user, "<span class='warning'>You fail to break out of [src]!</span>") to_chat(user, "<span class='warning'>You fail to break out of [src]!</span>")
/obj/structure/closet/proc/bust_open() /obj/structure/closet/proc/bust_open()
SIGNAL_HANDLER
welded = FALSE //applies to all lockers welded = FALSE //applies to all lockers
locked = FALSE //applies to critter crates and secure lockers only locked = FALSE //applies to critter crates and secure lockers only
broken = TRUE //applies to secure lockers only broken = TRUE //applies to secure lockers only
@@ -517,6 +520,7 @@
/obj/structure/closet/AllowDrop() /obj/structure/closet/AllowDrop()
return TRUE return TRUE
/obj/structure/closet/return_temperature() /obj/structure/closet/return_temperature()
return return
#undef LOCKER_FULL

View File

@@ -24,7 +24,7 @@
mob_react = FALSE mob_react = FALSE
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/tofu/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/tofu/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/tofu(location) new /obj/item/food/tofu(location)
@@ -42,7 +42,7 @@
required_reagents = list(/datum/reagent/consumable/soymilk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2) required_reagents = list(/datum/reagent/consumable/soymilk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2)
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/chocolate_bar/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/chocolate_bar/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/chocolatebar(location) new /obj/item/food/chocolatebar(location)
@@ -53,7 +53,7 @@
mob_react = FALSE mob_react = FALSE
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/chocolate_bar2/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/chocolate_bar2/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/chocolatebar(location) new /obj/item/food/chocolatebar(location)
@@ -63,7 +63,7 @@
required_reagents = list(/datum/reagent/consumable/milk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2) required_reagents = list(/datum/reagent/consumable/milk = 2, /datum/reagent/consumable/coco = 2, /datum/reagent/consumable/sugar = 2)
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/chocolate_bar3/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/chocolate_bar3/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/chocolatebar(location) new /obj/item/food/chocolatebar(location)
@@ -89,7 +89,8 @@
results = list(/datum/reagent/carbon = 1) results = list(/datum/reagent/carbon = 1)
required_reagents = list(/datum/reagent/consumable/caramel = 1) required_reagents = list(/datum/reagent/consumable/caramel = 1)
required_temp = 483.15 required_temp = 483.15
optimal_temp = 600 optimal_temp = 1000
rate_up_lim = 10
mob_react = FALSE mob_react = FALSE
/datum/chemical_reaction/food/cheesewheel /datum/chemical_reaction/food/cheesewheel
@@ -97,7 +98,7 @@
required_catalysts = list(/datum/reagent/consumable/enzyme = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5)
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/cheesewheel/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/cheesewheel/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/cheese/wheel(location) new /obj/item/food/cheese/wheel(location)
@@ -107,7 +108,7 @@
mob_react = FALSE mob_react = FALSE
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/synthmeat/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/synthmeat/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/meat/slab/synthmeat(location) new /obj/item/food/meat/slab/synthmeat(location)
@@ -126,7 +127,7 @@
mix_message = "The mixture becomes similar to carp meat." mix_message = "The mixture becomes similar to carp meat."
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/imitationcarpmeat/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/imitationcarpmeat/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
new /obj/item/food/fishmeat/carp/imitation(location) new /obj/item/food/fishmeat/carp/imitation(location)
if(holder?.my_atom) if(holder?.my_atom)
@@ -137,7 +138,7 @@
mix_message = "The ingredients form a dough." mix_message = "The ingredients form a dough."
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/dough/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/dough/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/dough(location) new /obj/item/food/dough(location)
@@ -147,7 +148,7 @@
mix_message = "The ingredients form a cake batter." mix_message = "The ingredients form a cake batter."
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/cakebatter/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/cakebatter/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/cakebatter(location) new /obj/item/food/cakebatter(location)
@@ -165,7 +166,7 @@
mix_message = "The rice absorbs the water." mix_message = "The rice absorbs the water."
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/food/ricebowl/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/food/ricebowl/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
new /obj/item/food/salad/ricebowl(location) new /obj/item/food/salad/ricebowl(location)
if(holder?.my_atom) if(holder?.my_atom)

View File

@@ -979,6 +979,27 @@ GLOBAL_LIST_EMPTY(roundstart_races)
if(BODY_FRONT_LAYER) if(BODY_FRONT_LAYER)
return "FRONT" return "FRONT"
///Proc that will randomise the hair, or primary appearance element (i.e. for moths wings) of a species' associated mob
/datum/species/proc/randomize_main_appearance_element(mob/living/carbon/human/human_mob)
//SKYRAT EDIT ADDITION BEGIN
for(var/key in mutant_bodyparts) //Randomize currently attached mutant bodyparts, organs should update when they need to (detachment)
var/datum/sprite_accessory/SP = random_accessory_of_key_for_species(key, src)
var/list/color_list = SP.get_default_color(human_mob.dna.features, src)
var/list/final_list = list()
final_list[MUTANT_INDEX_NAME] = SP.name
final_list[MUTANT_INDEX_COLOR_LIST] = color_list
mutant_bodyparts[key] = final_list
human_mob.update_mutant_bodyparts()
//SKYRAT EDIT ADDITION END
human_mob.hairstyle = random_hairstyle(human_mob.gender)
human_mob.update_hair()
///Proc that will randomise the underwear (i.e. top, pants and socks) of a species' associated mob
/datum/species/proc/randomize_active_underwear(mob/living/carbon/human/human_mob)
human_mob.undershirt = random_undershirt(human_mob.gender)
human_mob.underwear = random_underwear(human_mob.gender)
human_mob.socks = random_socks(human_mob.gender)
human_mob.update_body()
/datum/species/proc/spec_life(mob/living/carbon/human/H, delta_time, times_fired) /datum/species/proc/spec_life(mob/living/carbon/human/H, delta_time, times_fired)
if(HAS_TRAIT(H, TRAIT_NOBREATH)) if(HAS_TRAIT(H, TRAIT_NOBREATH))

View File

@@ -106,6 +106,16 @@
*/ */
//SKYRAT EDIT REMOVAL END //SKYRAT EDIT REMOVAL END
//SKYRAT EDIT REMOVAL BEGIN
/*
/datum/species/lizard/randomize_main_appearance_element(mob/living/carbon/human/human_mob)
var/tail = pick(GLOB.tails_list_lizard)
human_mob.dna.features["tail_lizard"] = tail
mutant_bodyparts["tail_lizard"] = tail
human_mob.update_body()
*/
//SKYRAT EDIT REMOVAL END
/* /*
Lizard subspecies: ASHWALKERS Lizard subspecies: ASHWALKERS
*/ */

View File

@@ -79,6 +79,17 @@
if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
return TRUE return TRUE
//SKYRAT EDIT REMOVAL BEGIN
/*
/datum/species/moth/randomize_main_appearance_element(mob/living/carbon/human/human_mob)
var/wings = pick(GLOB.moth_wings_list)
mutant_bodyparts["wings"] = wings
mutant_bodyparts["moth_wings"] = wings
human_mob.dna.features["wings"] = wings
human_mob.dna.features["moth_wings"] = wings
human_mob.update_body()
*/
//SKYRAT EDIT REMOVAL END
/datum/species/moth/spec_fully_heal(mob/living/carbon/human/H) /datum/species/moth/spec_fully_heal(mob/living/carbon/human/H)
. = ..() . = ..()

View File

@@ -376,18 +376,21 @@ All the important duct code:
duct_color = new_color duct_color = new_color
add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY) add_atom_colour(GLOB.pipe_paint_colors[new_color], FIXED_COLOUR_PRIORITY)
/obj/item/stack/ducts/afterattack(atom/A, user, proximity) /obj/item/stack/ducts/afterattack(atom/target, user, proximity)
. = ..() . = ..()
if(!proximity) if(!proximity)
return return
if(istype(A, /obj/machinery/duct)) if(istype(target, /obj/machinery/duct))
var/obj/machinery/duct/D = A var/obj/machinery/duct/D = target
if(!D.anchored) if(!D.anchored)
add(1) add(1)
qdel(D) qdel(D)
if(istype(A, /turf/open) && use(1)) check_attach_turf(target)
var/turf/open/OT = A
new /obj/machinery/duct(OT, FALSE, GLOB.pipe_paint_colors[duct_color], layers[duct_layer]) /obj/item/stack/ducts/proc/check_attach_turf(atom/target)
if(istype(target, /turf/open) && use(1))
var/turf/open/open_turf = target
new /obj/machinery/duct(open_turf, FALSE, GLOB.pipe_paint_colors[duct_color], layers[duct_layer])
playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE)
/obj/item/stack/ducts/fifty /obj/item/stack/ducts/fifty

View File

@@ -204,17 +204,18 @@
* Checks overheated() and overly_impure() of a reaction * Checks overheated() and overly_impure() of a reaction
* This was moved from the start, to the end - after a reaction, so post reaction temperature changes aren't ignored. * This was moved from the start, to the end - after a reaction, so post reaction temperature changes aren't ignored.
* overheated() is first - so double explosions can't happen (i.e. explosions that blow up the holder) * overheated() is first - so double explosions can't happen (i.e. explosions that blow up the holder)
* step_volume_added is how much product (across all products) was added for this single step
*/ */
/datum/equilibrium/proc/check_fail_states(vol_added) /datum/equilibrium/proc/check_fail_states(step_volume_added)
//Are we overheated? //Are we overheated?
if(reaction.is_cold_recipe) if(reaction.is_cold_recipe)
if(holder.chem_temp < reaction.overheat_temp && reaction.overheat_temp != NO_OVERHEAT) //This is before the process - this is here so that overly_impure and overheated() share the same code location (and therefore vars) for calls. if(holder.chem_temp < reaction.overheat_temp && reaction.overheat_temp != NO_OVERHEAT) //This is before the process - this is here so that overly_impure and overheated() share the same code location (and therefore vars) for calls.
SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overheated reaction steps") SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overheated reaction steps")
reaction.overheated(holder, src, vol_added) reaction.overheated(holder, src, step_volume_added)
else else
if(holder.chem_temp > reaction.overheat_temp) if(holder.chem_temp > reaction.overheat_temp)
SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overheated reaction steps") SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overheated reaction steps")
reaction.overheated(holder, src, vol_added) reaction.overheated(holder, src, step_volume_added)
//is our product too impure? //is our product too impure?
for(var/product in reaction.results) for(var/product in reaction.results)
@@ -223,7 +224,7 @@
continue continue
if (reagent.purity < reaction.purity_min)//If purity is below the min, call the proc if (reagent.purity < reaction.purity_min)//If purity is below the min, call the proc
SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overly impure reaction steps") SSblackbox.record_feedback("tally", "chemical_reaction", 1, "[reaction.type] overly impure reaction steps")
reaction.overly_impure(holder, src, vol_added) reaction.overly_impure(holder, src, step_volume_added)
//did we explode? //did we explode?
if(!holder.my_atom || holder.reagent_list.len == 0) if(!holder.my_atom || holder.reagent_list.len == 0)
@@ -302,7 +303,7 @@
return return
//Call any special reaction steps BEFORE addition //Call any special reaction steps BEFORE addition
if(reaction.reaction_step(src, holder, delta_t, delta_ph, step_target_vol) == END_REACTION) if(reaction.reaction_step(holder, src, delta_t, delta_ph, step_target_vol) == END_REACTION)
to_delete = TRUE to_delete = TRUE
return return

View File

@@ -935,7 +935,7 @@
qdel(equilibrium) qdel(equilibrium)
else else
//Adding is done in new(), deletion is in qdel //Adding is done in new(), deletion is in qdel
equilibrium.reaction.on_reaction(equilibrium, src, equilibrium.multiplier) equilibrium.reaction.on_reaction(src, equilibrium, equilibrium.multiplier)
equilibrium.react_timestep(1)//Get an initial step going so there's not a delay between setup and start - DO NOT ADD THIS TO equilibrium.NEW() equilibrium.react_timestep(1)//Get an initial step going so there's not a delay between setup and start - DO NOT ADD THIS TO equilibrium.NEW()
if(LAZYLEN(reaction_list)) if(LAZYLEN(reaction_list))
@@ -997,6 +997,7 @@
* * mix_message - the associated mix message of a reaction * * mix_message - the associated mix message of a reaction
*/ */
/datum/reagents/proc/end_reaction(datum/equilibrium/equilibrium) /datum/reagents/proc/end_reaction(datum/equilibrium/equilibrium)
equilibrium.reaction.reaction_finish(src, equilibrium, equilibrium.reacted_vol)
if(!equilibrium.holder || !equilibrium.reaction) //Somehow I'm getting empty equilibrium. This is here to handle them if(!equilibrium.holder || !equilibrium.reaction) //Somehow I'm getting empty equilibrium. This is here to handle them
LAZYREMOVE(reaction_list, equilibrium) LAZYREMOVE(reaction_list, equilibrium)
qdel(equilibrium) qdel(equilibrium)
@@ -1005,7 +1006,7 @@
if(equilibrium.holder != src) //When called from Destroy() eqs are nulled in smoke. This is very strange. This is probably causing it to spam smoke because of the runtime interupting the removal. if(equilibrium.holder != src) //When called from Destroy() eqs are nulled in smoke. This is very strange. This is probably causing it to spam smoke because of the runtime interupting the removal.
stack_trace("The equilibrium datum currently processing in this reagents datum had a desynced holder to the ending reaction. src holder:[my_atom] | equilibrium holder:[equilibrium.holder.my_atom] || src type:[my_atom.type] | equilibrium holder:[equilibrium.holder.my_atom.type]") stack_trace("The equilibrium datum currently processing in this reagents datum had a desynced holder to the ending reaction. src holder:[my_atom] | equilibrium holder:[equilibrium.holder.my_atom] || src type:[my_atom.type] | equilibrium holder:[equilibrium.holder.my_atom.type]")
LAZYREMOVE(reaction_list, equilibrium) LAZYREMOVE(reaction_list, equilibrium)
equilibrium.reaction.reaction_finish(src, equilibrium.reacted_vol)
var/reaction_message = equilibrium.reaction.mix_message var/reaction_message = equilibrium.reaction.mix_message
if(equilibrium.reaction.mix_sound) if(equilibrium.reaction.mix_sound)
playsound(get_turf(my_atom), equilibrium.reaction.mix_sound, 80, TRUE) playsound(get_turf(my_atom), equilibrium.reaction.mix_sound, 80, TRUE)
@@ -1163,7 +1164,7 @@
extract.name = "used slime extract" extract.name = "used slime extract"
extract.desc = "This extract has been used up." extract.desc = "This extract has been used up."
selected_reaction.on_reaction(null, src, multiplier) selected_reaction.on_reaction(src, null, multiplier)
///Possibly remove - see if multiple instant reactions is okay (Though, this "sorts" reactions by temp decending) ///Possibly remove - see if multiple instant reactions is okay (Though, this "sorts" reactions by temp decending)
///Presently unused ///Presently unused

View File

@@ -54,6 +54,28 @@
color = "#270d03" color = "#270d03"
glass_price = DRINK_PRICE_HIGH glass_price = DRINK_PRICE_HIGH
// Unique
/datum/reagent/impurity/eigenswap
name = "Eigenswap"
description = "This reagent is known to swap the handedness of a patient."
ph = 3.3
chemical_flags = REAGENT_DONOTSPLIT
/datum/reagent/impurity/eigenswap/on_mob_life(mob/living/carbon/carbon_mob)
. = ..()
if(!prob(creation_purity * 100))
return
var/list/cached_hand_items = carbon_mob.held_items
var/index = 1
for(var/thing in cached_hand_items)
index++
if(index > length(cached_hand_items))//If we're past the end of the list, go back to start
index = 1
if(!thing)
continue
carbon_mob.put_in_hand(thing, index, forced = TRUE, ignore_anim = TRUE)
playsound(carbon_mob, 'sound/effects/phasein.ogg', 20, TRUE)
/* /*
* Freezes the player in a block of ice, 1s = 1u * Freezes the player in a block of ice, 1s = 1u
* Will be removed when the required reagent is removed too * Will be removed when the required reagent is removed too

View File

@@ -0,0 +1,107 @@
/*eigenstate themed Chem
*Teleports you to the creation location on consumption and back when the reagent is removed from you
*OD teleports you randomly around the Station and gives you a status effect
*The status effect slowly send you on a wild ride and replaces you with an alternative reality version of yourself unless you consume eigenstasium/bluespace dust/stabilising agent.
*During the process you get really hungry,
*Then some of your items slowly start teleport around you,
*then alternative versions of yourself are brought in from a different universe and they yell at you.
*and finally you yourself get teleported to an alternative universe, and character your playing is replaced with said alternative
*Spraying this on lockers allows you to create eigenlinked lockers - see the eigenstate subsystem for using this to create your own links
*/
/datum/reagent/eigenstate
name = "Eigenstasium"
description = "A strange mixture formed from a controlled reaction of bluespace with plasma, that causes localised eigenstate fluxuations within the patient"
taste_description = "wiggly cosmic dust."
color = "#5020F4"
overdose_threshold = 15
metabolization_rate = 1 * REAGENTS_METABOLISM
ph = 3.7
purity = 0.5
creation_purity = 0.5
impure_chem = /datum/reagent/impurity/eigenswap
inverse_chem = null
inverse_chem_val = 0
failed_chem = /datum/reagent/bluespace //crashes out
chemical_flags = REAGENT_DEAD_PROCESS //So if you die with it in your body, you still get teleported back to the location as a corpse
data = list("location_created" = null)//So we retain the target location and creator between reagent instances
///The creation point assigned during the reaction
var/turf/location_created
///The return point indicator
var/obj/effect/overlay/holo_pad_hologram/eigenstate
///The point you're returning to after the reagent is removed
var/turf/open/location_return = null
/datum/reagent/eigenstate/on_new(list/data)
location_created = data["location_created"]
/datum/reagent/eigenstate/expose_mob(mob/living/living_mob, methods, reac_volume, show_message, touch_protection)
. = ..()
if(!(methods & INGEST))
return
if(creation_purity > 0.9 && location_created) //Teleports you home if it's pure enough
do_sparks(5,FALSE,living_mob)
do_teleport(living_mob, location_created, 0, asoundin = 'sound/effects/phasein.ogg')
do_sparks(5,FALSE,living_mob)
//Main functions
/datum/reagent/eigenstate/on_mob_add(mob/living/living_mob, amount)
//make hologram at return point
eigenstate = new (living_mob.loc)
eigenstate.appearance = living_mob.appearance
eigenstate.alpha = 170
eigenstate.add_atom_colour(LIGHT_COLOR_LIGHT_CYAN, FIXED_COLOUR_PRIORITY)
eigenstate.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it.
eigenstate.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
eigenstate.anchored = 1//So space wind cannot drag it.
eigenstate.name = "[living_mob.name]'s eigenstate"//If someone decides to right click.
eigenstate.set_light(2) //hologram lighting
location_return = get_turf(living_mob) //sets up return point
to_chat(living_mob, "<span class='userdanger'>You feel like part of yourself has split off!</span>")
return ..()
/datum/reagent/eigenstate/on_mob_life(mob/living/carbon/living_mob)
if(prob(20))
do_sparks(5,FALSE,living_mob)
return ..()
/datum/reagent/eigenstate/on_mob_delete(mob/living/living_mob) //returns back to original location
do_sparks(5,FALSE,living_mob)
to_chat(living_mob, "<span class='userdanger'>You feel strangely whole again.</span>")
if(!living_mob.reagents.has_reagent(/datum/reagent/stabilizing_agent))
do_teleport(living_mob, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home
do_sparks(5,FALSE,living_mob)
qdel(eigenstate)
return ..()
/datum/reagent/eigenstate/overdose_start(mob/living/living_mob) //Overdose, makes you teleport randomly
to_chat(living_mob, "<span class='userdanger'>You feel like your perspective is being ripped apart as you begin flitting in and out of reality!</span>")
living_mob.Jitter(20)
metabolization_rate += 0.5 //So you're not stuck forever teleporting.
if(iscarbon(living_mob))
var/mob/living/carbon/carbon_mob = living_mob
carbon_mob.apply_status_effect(STATUS_EFFECT_EIGEN)
return ..()
/datum/reagent/eigenstate/overdose_process(mob/living/living_mob) //Overdose, makes you teleport randomly
do_sparks(5, FALSE, living_mob)
do_teleport(living_mob, get_turf(living_mob), 10, asoundin = 'sound/effects/phasein.ogg')
do_sparks(5, FALSE, living_mob)
return ..()
//FOR ADDICTION-LIKE EFFECTS, SEE datum/status_effect/eigenstasium
///Lets you link lockers together
/datum/reagent/eigenstate/expose_turf(turf/exposed_turf, reac_volume)
. = ..()
if(creation_purity < 0.8)
return
var/list/lockers = list()
for(var/obj/structure/closet/closet in exposed_turf.contents)
lockers += closet
if(!length(lockers))
return
SSeigenstates.create_new_link(lockers)

View File

@@ -88,7 +88,7 @@
* * holder - the datum that holds this reagent, be it a beaker or anything else * * holder - the datum that holds this reagent, be it a beaker or anything else
* * created_volume - volume created when this is mixed. look at 'var/list/results'. * * created_volume - volume created when this is mixed. look at 'var/list/results'.
*/ */
/datum/chemical_reaction/proc/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/proc/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
return return
//I recommend you set the result amount to the total volume of all components. //I recommend you set the result amount to the total volume of all components.
@@ -107,7 +107,7 @@
* Outputs: * Outputs:
* * returning END_REACTION will end the associated reaction - flagging it for deletion and preventing any reaction in that timestep from happening. Make sure to set the vars in the holder to one that can't start it from starting up again. * * returning END_REACTION will end the associated reaction - flagging it for deletion and preventing any reaction in that timestep from happening. Make sure to set the vars in the holder to one that can't start it from starting up again.
*/ */
/datum/chemical_reaction/proc/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/proc/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
return return
/** /**
@@ -124,7 +124,7 @@
* * holder - the datum that holds this reagent, be it a beaker or anything else * * holder - the datum that holds this reagent, be it a beaker or anything else
* * react_volume - volume created across the whole reaction * * react_volume - volume created across the whole reaction
*/ */
/datum/chemical_reaction/proc/reaction_finish(datum/reagents/holder, react_vol) /datum/chemical_reaction/proc/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol)
//failed_chem handler //failed_chem handler
var/cached_temp = holder.chem_temp var/cached_temp = holder.chem_temp
for(var/id in results) for(var/id in results)
@@ -143,9 +143,7 @@
* * reagent - the target reagent to convert * * reagent - the target reagent to convert
*/ */
/datum/chemical_reaction/proc/convert_into_failed(datum/reagent/reagent, datum/reagents/holder) /datum/chemical_reaction/proc/convert_into_failed(datum/reagent/reagent, datum/reagents/holder)
if(!reagent.failed_chem) if(reagent.purity < purity_min && reagent.failed_chem)
return
if(reagent.purity < purity_min)
var/cached_volume = reagent.volume var/cached_volume = reagent.volume
holder.remove_reagent(reagent.type, cached_volume, FALSE) holder.remove_reagent(reagent.type, cached_volume, FALSE)
holder.add_reagent(reagent.failed_chem, cached_volume, FALSE, added_purity = 1) holder.add_reagent(reagent.failed_chem, cached_volume, FALSE, added_purity = 1)
@@ -190,8 +188,9 @@
* Arguments: * Arguments:
* * holder - the datum that holds this reagent, be it a beaker or anything else * * holder - the datum that holds this reagent, be it a beaker or anything else
* * equilibrium - the equilibrium datum that contains the equilibrium reaction properties and methods * * equilibrium - the equilibrium datum that contains the equilibrium reaction properties and methods
* * step_volume_added - how much product (across all products) was added for this single step
*/ */
/datum/chemical_reaction/proc/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/proc/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
for(var/id in results) for(var/id in results)
var/datum/reagent/reagent = holder.get_reagent(id) var/datum/reagent/reagent = holder.get_reagent(id)
if(!reagent) if(!reagent)
@@ -208,8 +207,9 @@
* Arguments: * Arguments:
* * holder - the datum that holds this reagent, be it a beaker or anything else * * holder - the datum that holds this reagent, be it a beaker or anything else
* * equilibrium - the equilibrium datum that contains the equilibrium reaction properties and methods * * equilibrium - the equilibrium datum that contains the equilibrium reaction properties and methods
* * step_volume_added - how much product (across all products) was added for this single step
*/ */
/datum/chemical_reaction/proc/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/proc/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
var/affected_list = results + required_reagents var/affected_list = results + required_reagents
for(var/_reagent in affected_list) for(var/_reagent in affected_list)
var/datum/reagent/reagent = holder.get_reagent(_reagent) var/datum/reagent/reagent = holder.get_reagent(_reagent)
@@ -511,7 +511,7 @@
* * initial_delay - The number of seconds of delay to add on creation * * initial_delay - The number of seconds of delay to add on creation
*/ */
/datum/chemical_reaction/proc/off_cooldown(datum/reagents/holder, datum/equilibrium/equilibrium, seconds = 1, id = "default", initial_delay = 0) /datum/chemical_reaction/proc/off_cooldown(datum/reagents/holder, datum/equilibrium/equilibrium, seconds = 1, id = "default", initial_delay = 0)
id = id+"_cooldown" id = "[id]_cooldown"
if(isnull(equilibrium.data[id])) if(isnull(equilibrium.data[id]))
equilibrium.data[id] = 0 equilibrium.data[id] = 0
if(initial_delay) if(initial_delay)

View File

@@ -22,7 +22,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT reaction_flags = REACTION_PH_VOL_CONSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE
/datum/chemical_reaction/medicine/helbital/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/helbital/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
explode_fire_vortex(holder, equilibrium, 1, 1, "impure") explode_fire_vortex(holder, equilibrium, 1, 1, "impure")
holder.chem_temp += 2.5 holder.chem_temp += 2.5
var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital) var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital)
@@ -35,11 +35,11 @@
holder.chem_temp += 5 holder.chem_temp += 5
holder.my_atom.audible_message("<span class='notice'>[icon2html(holder.my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] The impurity of the reacting helbital is too great causing [holder.my_atom] to let out a hearty burst of flame, evaporating part of the product!</span>") holder.my_atom.audible_message("<span class='notice'>[icon2html(holder.my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] The impurity of the reacting helbital is too great causing [holder.my_atom] to let out a hearty burst of flame, evaporating part of the product!</span>")
/datum/chemical_reaction/medicine/helbital/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/helbital/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..()//drains product . = ..()//drains product
explode_fire_vortex(holder, equilibrium, 2, 2, "overheat", TRUE) explode_fire_vortex(holder, equilibrium, 2, 2, "overheat", TRUE)
/datum/chemical_reaction/medicine/helbital/reaction_finish(datum/reagents/holder, react_vol) /datum/chemical_reaction/medicine/helbital/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol)
. = ..() . = ..()
var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital) var/datum/reagent/helbital = holder.get_reagent(/datum/reagent/medicine/c2/helbital)
if(!helbital) if(!helbital)
@@ -125,7 +125,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT reaction_flags = REACTION_PH_VOL_CONSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/aiuri/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/aiuri/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
for(var/mob/living/living_mob in orange(3, get_turf(holder.my_atom))) for(var/mob/living/living_mob in orange(3, get_turf(holder.my_atom)))
if(living_mob.flash_act(1, length = 5)) if(living_mob.flash_act(1, length = 5))
@@ -151,7 +151,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT | REACTION_CLEAR_INVERSE reaction_flags = REACTION_PH_VOL_CONSTANT | REACTION_CLEAR_INVERSE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/hercuri/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/hercuri/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
if(off_cooldown(holder, equilibrium, 2, "hercuri_freeze")) if(off_cooldown(holder, equilibrium, 2, "hercuri_freeze"))
return return
playsound(holder.my_atom, 'sound/magic/ethereal_exit.ogg', 50, 1) playsound(holder.my_atom, 'sound/magic/ethereal_exit.ogg', 50, 1)
@@ -182,7 +182,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT reaction_flags = REACTION_PH_VOL_CONSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY
/datum/chemical_reaction/medicine/convermol/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/medicine/convermol/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
var/datum/reagent/oxy = holder.has_reagent(/datum/reagent/oxygen) var/datum/reagent/oxy = holder.has_reagent(/datum/reagent/oxygen)
if(oxy) if(oxy)
@@ -197,10 +197,10 @@
else else
explode_shockwave(holder, equilibrium, range, damage = 2) explode_shockwave(holder, equilibrium, range, damage = 2)
/datum/chemical_reaction/medicine/convermol/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/convermol/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
overheated(holder, equilibrium, impure = TRUE) overheated(holder, equilibrium, impure = TRUE)
clear_reactants(holder, vol_added*2) clear_reactants(holder, step_volume_added*2)
/datum/chemical_reaction/medicine/tirimol /datum/chemical_reaction/medicine/tirimol
@@ -223,7 +223,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT reaction_flags = REACTION_PH_VOL_CONSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OXY
/datum/chemical_reaction/medicine/tirimol/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/medicine/tirimol/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
var/datum/reagent/oxy = holder.has_reagent(/datum/reagent/oxygen) var/datum/reagent/oxy = holder.has_reagent(/datum/reagent/oxygen)
if(oxy) if(oxy)
@@ -241,7 +241,7 @@
else else
explode_invert_smoke(holder, equilibrium, 3) explode_invert_smoke(holder, equilibrium, 3)
/datum/chemical_reaction/medicine/tirimol/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/tirimol/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
overheated(holder, equilibrium, TRUE) overheated(holder, equilibrium, TRUE)
clear_reactants(holder, 2) clear_reactants(holder, 2)
@@ -269,10 +269,10 @@
reaction_flags = REACTION_PH_VOL_CONSTANT | REACTION_CLEAR_INVERSE reaction_flags = REACTION_PH_VOL_CONSTANT | REACTION_CLEAR_INVERSE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN
/datum/chemical_reaction/medicine/seiver/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/seiver/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
if(off_cooldown(holder, equilibrium, 1, "seiver_rads")) if(off_cooldown(holder, equilibrium, 1, "seiver_rads"))
return return
var/modifier = max((100 - holder.chem_temp)*0.025, 0)*vol_added //0 - 5 * volume based off temperature(colder is more) var/modifier = max((100 - holder.chem_temp)*0.025, 0)*step_volume_added //0 - 5 * volume based off temperature(colder is more)
radiation_pulse(holder.my_atom, modifier, 0.5, can_contaminate=FALSE) //Please advise on this, I don't have a good handle on the numbers radiation_pulse(holder.my_atom, modifier, 0.5, can_contaminate=FALSE) //Please advise on this, I don't have a good handle on the numbers
/datum/chemical_reaction/medicine/multiver /datum/chemical_reaction/medicine/multiver
@@ -295,7 +295,7 @@
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_PLANT | REACTION_TAG_TOXIN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_PLANT | REACTION_TAG_TOXIN
//You get nothing! I'm serious about staying under the heating requirements! //You get nothing! I'm serious about staying under the heating requirements!
/datum/chemical_reaction/medicine/multiver/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/multiver/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
var/datum/reagent/monover = holder.has_reagent(/datum/reagent/inverse/healing/monover) var/datum/reagent/monover = holder.has_reagent(/datum/reagent/inverse/healing/monover)
if(monover) if(monover)
@@ -304,7 +304,7 @@
explode_fire_square(holder, equilibrium, 1) explode_fire_square(holder, equilibrium, 1)
holder.my_atom.fire_act(holder.chem_temp, monover.volume)//I'm kinda banking on this setting the thing on fire. If you see this, then it didn't! holder.my_atom.fire_act(holder.chem_temp, monover.volume)//I'm kinda banking on this setting the thing on fire. If you see this, then it didn't!
/datum/chemical_reaction/medicine/multiver/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/medicine/multiver/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
if(delta_ph < 0.35) if(delta_ph < 0.35)
//normalise delta_ph //normalise delta_ph
@@ -331,7 +331,7 @@
reaction_flags = REACTION_PH_VOL_CONSTANT reaction_flags = REACTION_PH_VOL_CONSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN
/datum/chemical_reaction/medicine/syriniver/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/medicine/syriniver/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
reaction.delta_t = delta_t * delta_ph reaction.delta_t = delta_t * delta_ph
@@ -354,7 +354,7 @@
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_TOXIN
//overheat beats like a heart! (or is it overbeat?) //overheat beats like a heart! (or is it overbeat?)
/datum/chemical_reaction/medicine/penthrite/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/penthrite/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
if(off_cooldown(holder, equilibrium, 1, "lub")) if(off_cooldown(holder, equilibrium, 1, "lub"))
explode_shockwave(holder, equilibrium, 3, 2) explode_shockwave(holder, equilibrium, 3, 2)
@@ -365,5 +365,5 @@
explode_fire_vortex(holder, equilibrium, 1, 1) explode_fire_vortex(holder, equilibrium, 1, 1)
//enabling hardmode //enabling hardmode
/datum/chemical_reaction/medicine/penthrite/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medicine/penthrite/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
holder.chem_temp += 15 holder.chem_temp += 15

View File

@@ -20,8 +20,8 @@
rate_up_lim = 1 rate_up_lim = 1
purity_min = 0 purity_min = 0
/datum/chemical_reaction/medical_speed_catalyst/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medical_speed_catalyst/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
explode_invert_smoke(holder, equilibrium) //Will be better when the inputs have proper invert chems explode_invert_smoke(holder, equilibrium) //Will be better when the inputs have proper invert chems
/datum/chemical_reaction/medical_speed_catalyst/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/medical_speed_catalyst/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
explode_invert_smoke(holder, equilibrium) explode_invert_smoke(holder, equilibrium)

View File

@@ -36,22 +36,22 @@
reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DRUG | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DRUG | REACTION_TAG_DANGEROUS
//The less pure it is, the faster it heats up. tg please don't hate me for making your meth even more dangerous //The less pure it is, the faster it heats up. tg please don't hate me for making your meth even more dangerous
/datum/chemical_reaction/methamphetamine/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/methamphetamine/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine) var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine)
if(!meth)//First step if(!meth)//First step
reaction.thermic_mod = (1-delta_ph)*5 reaction.thermic_mod = (1-delta_ph)*5
return return
reaction.thermic_mod = (1-meth.purity)*5 reaction.thermic_mod = (1-meth.purity)*5
/datum/chemical_reaction/methamphetamine/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/methamphetamine/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
temp_meth_explosion(holder, equilibrium.reacted_vol) temp_meth_explosion(holder, equilibrium.reacted_vol)
/datum/chemical_reaction/methamphetamine/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/methamphetamine/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
temp_meth_explosion(holder, equilibrium.reacted_vol) temp_meth_explosion(holder, equilibrium.reacted_vol)
/datum/chemical_reaction/methamphetamine/reaction_finish(datum/reagents/holder, react_vol) /datum/chemical_reaction/methamphetamine/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol)
var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine) var/datum/reagent/meth = holder.get_reagent(/datum/reagent/drug/methamphetamine)
if(!meth)//Other procs before this can already blow us up if(!meth)//Other procs before this can already blow us up
return ..() return ..()

View File

@@ -219,7 +219,7 @@
required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/toxin/formaldehyde = 20, /datum/reagent/medicine/polypyr = 15) //This might be a bit much, reagent cost should be reviewed after implementation. required_reagents = list(/datum/reagent/cellulose = 10, /datum/reagent/toxin/formaldehyde = 20, /datum/reagent/medicine/polypyr = 15) //This might be a bit much, reagent cost should be reviewed after implementation.
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE
/datum/chemical_reaction/medicine/medsuture/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/medicine/medsuture/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/medical/suture/medicated(location) new /obj/item/stack/medical/suture/medicated(location)
@@ -228,7 +228,7 @@
required_reagents = list(/datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20, /datum/reagent/space_cleaner/sterilizine = 10) required_reagents = list(/datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20, /datum/reagent/space_cleaner/sterilizine = 10)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/medmesh/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/medicine/medmesh/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/medical/mesh/advanced(location) new /obj/item/stack/medical/mesh/advanced(location)
@@ -237,7 +237,7 @@
required_reagents = list(/datum/reagent/toxin/bungotoxin = 20, /datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20) required_reagents = list(/datum/reagent/toxin/bungotoxin = 20, /datum/reagent/cellulose = 20, /datum/reagent/consumable/aloejuice = 20)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE | REACTION_TAG_BURN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_BRUTE | REACTION_TAG_BURN
/datum/chemical_reaction/medicine/poultice/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/medicine/poultice/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume) for(var/i in 1 to created_volume)
new /obj/item/stack/medical/poultice(location) new /obj/item/stack/medical/poultice(location)

View File

@@ -51,7 +51,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/plasma_solidification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/plasma_solidification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/sheet/mineral/plasma(location) new /obj/item/stack/sheet/mineral/plasma(location)
@@ -62,7 +62,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/gold_solidification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/gold_solidification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/sheet/mineral/gold(location) new /obj/item/stack/sheet/mineral/gold(location)
@@ -73,7 +73,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/uranium_solidification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/uranium_solidification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/stack/sheet/mineral/uranium(location) new /obj/item/stack/sheet/mineral/uranium(location)
@@ -90,7 +90,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/soapification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/soap/homemade(location) new /obj/item/soap/homemade(location)
@@ -104,7 +104,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/omegasoapification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/omegasoapification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/soap/omega(location) new /obj/item/soap/omega(location)
@@ -116,7 +116,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/candlefication/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/candle(location) new /obj/item/candle(location)
@@ -127,7 +127,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/meatification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = 1, i <= created_volume, i++) for(var/i = 1, i <= created_volume, i++)
new /obj/item/food/meat/slab/meatproduct(location) new /obj/item/food/meat/slab/meatproduct(location)
@@ -151,7 +151,7 @@
rate_up_lim = 25 //Give a chance to pull back rate_up_lim = 25 //Give a chance to pull back
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL
/datum/chemical_reaction/nitrous_oxide/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/nitrous_oxide/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
var/turf/exposed_turf = get_turf(holder.my_atom) var/turf/exposed_turf = get_turf(holder.my_atom)
if(!exposed_turf) if(!exposed_turf)
@@ -159,7 +159,7 @@
exposed_turf.atmos_spawn_air("n2o=[equilibrium.step_target_vol/2];TEMP=[holder.chem_temp]") exposed_turf.atmos_spawn_air("n2o=[equilibrium.step_target_vol/2];TEMP=[holder.chem_temp]")
clear_products(holder, equilibrium.step_target_vol) clear_products(holder, equilibrium.step_target_vol)
/datum/chemical_reaction/nitrous_oxide/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/nitrous_oxide/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
return //This is empty because the explosion reaction will occur instead (see pyrotechnics.dm). This is just here to update the lookup ui. return //This is empty because the explosion reaction will occur instead (see pyrotechnics.dm). This is just here to update the lookup ui.
@@ -224,7 +224,7 @@
var/level_max = 2 var/level_max = 2
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/mix_virus/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B?.data) if(B?.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
@@ -291,7 +291,7 @@
required_reagents = list(/datum/reagent/medicine/synaptizine = 1) required_reagents = list(/datum/reagent/medicine/synaptizine = 1)
required_catalysts = list(/datum/reagent/blood = 1) required_catalysts = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/mix_virus/rem_virus/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B?.data) if(B?.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
@@ -302,7 +302,7 @@
required_reagents = list(/datum/reagent/toxin/formaldehyde = 1) required_reagents = list(/datum/reagent/toxin/formaldehyde = 1)
required_catalysts = list(/datum/reagent/blood = 1) required_catalysts = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B?.data) if(B?.data)
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
@@ -325,7 +325,7 @@
mob_react = FALSE mob_react = FALSE
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
/datum/chemical_reaction/foam/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.create_foam(/datum/effect_system/foam_spread,2*created_volume,notification="<span class='danger'>The solution spews out foam!</span>") holder.create_foam(/datum/effect_system/foam_spread,2*created_volume,notification="<span class='danger'>The solution spews out foam!</span>")
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
@@ -335,7 +335,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/metalfoam/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,1,"<span class='danger'>The solution spews out a metallic foam!</span>") holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,1,"<span class='danger'>The solution spews out a metallic foam!</span>")
/datum/chemical_reaction/smart_foam /datum/chemical_reaction/smart_foam
@@ -344,7 +344,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/smart_foam/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/smart_foam/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.create_foam(/datum/effect_system/foam_spread/metal/smart,5*created_volume,1,"<span class='danger'>The solution spews out metallic foam!</span>") holder.create_foam(/datum/effect_system/foam_spread/metal/smart,5*created_volume,1,"<span class='danger'>The solution spews out metallic foam!</span>")
/datum/chemical_reaction/ironfoam /datum/chemical_reaction/ironfoam
@@ -353,7 +353,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/ironfoam/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,2,"<span class='danger'>The solution spews out a metallic foam!</span>") holder.create_foam(/datum/effect_system/foam_spread/metal,5*created_volume,2,"<span class='danger'>The solution spews out a metallic foam!</span>")
/datum/chemical_reaction/foaming_agent /datum/chemical_reaction/foaming_agent
@@ -488,7 +488,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/life/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/life/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (hostile)") //defaults to HOSTILE_SPAWN chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (hostile)") //defaults to HOSTILE_SPAWN
/datum/chemical_reaction/life_friendly /datum/chemical_reaction/life_friendly
@@ -497,7 +497,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/life_friendly/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/life_friendly/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN) chemical_mob_spawn(holder, rand(1, round(created_volume, 1)), "Life (friendly)", FRIENDLY_SPAWN)
/datum/chemical_reaction/corgium /datum/chemical_reaction/corgium
@@ -506,7 +506,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/corgium/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/corgium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = rand(1, created_volume), i <= created_volume, i++) // More lulz. 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)
@@ -523,7 +523,7 @@
required_reagents = list(/datum/reagent/monkey_powder = 50, /datum/reagent/water = 1) required_reagents = list(/datum/reagent/monkey_powder = 50, /datum/reagent/water = 1)
mix_message = "<span class='danger'>Expands into a brown mass before shaping itself into a monkey!.</span>" mix_message = "<span class='danger'>Expands into a brown mass before shaping itself into a monkey!.</span>"
/datum/chemical_reaction/monkey/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/monkey/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/mob/living/carbon/M = holder.my_atom var/mob/living/carbon/M = holder.my_atom
var/location = get_turf(M) var/location = get_turf(M)
if(istype(M, /mob/living/carbon)) if(istype(M, /mob/living/carbon))
@@ -545,7 +545,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/butterflium/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/butterflium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i = rand(1, created_volume), i <= created_volume, i++) for(var/i = rand(1, created_volume), i <= created_volume, i++)
new /mob/living/simple_animal/butterfly(location) new /mob/living/simple_animal/butterfly(location)
@@ -557,7 +557,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/scream/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/scream/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
playsound(holder.my_atom, pick(list( 'sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg', 'sound/voice/human/femalescream_1.ogg', 'sound/voice/human/femalescream_2.ogg', 'sound/voice/human/femalescream_3.ogg', 'sound/voice/human/femalescream_4.ogg', 'sound/voice/human/femalescream_5.ogg', 'sound/voice/human/wilhelm_scream.ogg')), created_volume*5,TRUE) playsound(holder.my_atom, pick(list( 'sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg', 'sound/voice/human/femalescream_1.ogg', 'sound/voice/human/femalescream_2.ogg', 'sound/voice/human/femalescream_3.ogg', 'sound/voice/human/femalescream_4.ogg', 'sound/voice/human/femalescream_5.ogg', 'sound/voice/human/wilhelm_scream.ogg')), created_volume*5,TRUE)
/datum/chemical_reaction/hair_dye /datum/chemical_reaction/hair_dye
@@ -613,7 +613,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL
/datum/chemical_reaction/plastic_polymers/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume) for(var/i in 1 to created_volume)
new /obj/item/stack/sheet/plastic(location) new /obj/item/stack/sheet/plastic(location)
@@ -643,7 +643,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME
/datum/chemical_reaction/slime_extractification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime_extractification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
new /obj/item/slime_extract/grey(location) new /obj/item/slime_extract/grey(location)
@@ -653,7 +653,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/metalgen_imprint/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/metalgen_imprint/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/datum/reagent/metalgen/MM = holder.get_reagent(/datum/reagent/metalgen) var/datum/reagent/metalgen/MM = holder.get_reagent(/datum/reagent/metalgen)
for(var/datum/reagent/R in holder.reagent_list) for(var/datum/reagent/R in holder.reagent_list)
if(R.material && R.volume >= 40) if(R.material && R.volume >= 40)
@@ -710,12 +710,12 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL
/datum/chemical_reaction/silver_solidification/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/silver_solidification/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
for(var/i in 1 to created_volume) for(var/i in 1 to created_volume)
new /obj/item/stack/sheet/mineral/silver(location) new /obj/item/stack/sheet/mineral/silver(location)
//////////////////////////////////// Water //////////////////////////////////////////////// ////Ice and water
/datum/chemical_reaction/ice /datum/chemical_reaction/ice
results = list(/datum/reagent/consumable/ice = 1.09)//density results = list(/datum/reagent/consumable/ice = 1.09)//density
@@ -732,6 +732,7 @@
purity_min = 0 purity_min = 0
mix_message = "The solution freezes up into ice!" mix_message = "The solution freezes up into ice!"
reaction_flags = REACTION_COMPETITIVE reaction_flags = REACTION_COMPETITIVE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRINK
/datum/chemical_reaction/water /datum/chemical_reaction/water
results = list(/datum/reagent/water = 0.92)//rough density excahnge results = list(/datum/reagent/water = 0.92)//rough density excahnge
@@ -746,6 +747,7 @@
rate_up_lim = 50 rate_up_lim = 50
purity_min = 0 purity_min = 0
mix_message = "The ice melts back into water!" mix_message = "The ice melts back into water!"
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DRINK
//////////////////////////////////// ////////////////////////////////////
@@ -762,4 +764,83 @@
rate_up_lim = 50 rate_up_lim = 50
purity_min = 0 purity_min = 0
mix_message = "The mixture's colors swirl together." mix_message = "The mixture's colors swirl together."
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL
/datum/chemical_reaction/eigenstate
results = list(/datum/reagent/eigenstate = 1)
required_reagents = list(/datum/reagent/bluespace = 1, /datum/reagent/stable_plasma = 1, /datum/reagent/consumable/caramel = 1)
mix_message = "the reaction zaps suddenly!"
mix_sound = 'sound/chemistry/bluespace.ogg'
//FermiChem vars:
required_temp = 350
optimal_temp = 600
overheat_temp = 650
optimal_ph_min = 9
optimal_ph_max = 12
determin_ph_range = 5
temp_exponent_factor = 1.5
ph_exponent_factor = 3
thermic_constant = 12
H_ion_release = -0.05
rate_up_lim = 10
purity_min = 0.4
reaction_flags = REACTION_HEAT_ARBITARY
reaction_tags = REACTION_TAG_HARD | REACTION_TAG_UNIQUE | REACTION_TAG_OTHER
/datum/chemical_reaction/eigenstate/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol)
. = ..()
var/turf/open/location = get_turf(holder.my_atom)
if(reaction.data["ducts_teleported"] == TRUE) //If we teleported an duct, then we reconnect it at the end
for(var/obj/item/stack/ducts/duct in range(location, 3))
duct.check_attach_turf(duct.loc)
var/datum/reagent/eigenstate/eigen = holder.has_reagent(/datum/reagent/eigenstate)
if(!eigen)
return
if(location)
eigen.location_created = location
eigen.data["location_created"] = location
do_sparks(5,FALSE,location)
playsound(location, 'sound/effects/phasein.ogg', 80, TRUE)
/datum/chemical_reaction/eigenstate/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..()
if(!off_cooldown(holder, equilibrium, 0.5, "eigen"))
return
var/turf/location = get_turf(holder.my_atom)
do_sparks(3,FALSE,location)
playsound(location, 'sound/effects/phasein.ogg', 80, TRUE)
for(var/mob/living/nearby_mob in range(location, 3))
do_sparks(3,FALSE,nearby_mob)
do_teleport(nearby_mob, get_turf(holder.my_atom), 3, no_effects=TRUE)
nearby_mob.Knockdown(20, TRUE)
nearby_mob.add_atom_colour("#cebfff", WASHABLE_COLOUR_PRIORITY)
to_chat()
do_sparks(3,FALSE,nearby_mob)
clear_products(holder, step_volume_added)
/datum/chemical_reaction/eigenstate/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
if(!off_cooldown(holder, equilibrium, 1, "eigen"))
return
var/turf/location = get_turf(holder.my_atom)
do_sparks(3,FALSE,location)
holder.chem_temp += 10
playsound(location, 'sound/effects/phasein.ogg', 80, TRUE)
for(var/obj/machinery/duct/duct in range(location, 3))
do_teleport(duct, location, 3, no_effects=TRUE)
equilibrium.data["ducts_teleported"] = TRUE //If we teleported a duct - call the process in
var/lets_not_go_crazy = 15 //Teleport 15 items at max
var/list/items = list()
for(var/obj/item/item in range(location, 3))
items += item
shuffle(items)
for(var/obj/item/item in items)
do_teleport(item, location, 3, no_effects=TRUE)
lets_not_go_crazy -= 1
item.add_atom_colour("#c4b3fd", WASHABLE_COLOUR_PRIORITY)
if(!lets_not_go_crazy)
clear_products(holder, step_volume_added)
return
clear_products(holder, step_volume_added)
holder.my_atom.audible_message("<span class='notice'>[icon2html(holder.my_atom, viewers(DEFAULT_MESSAGE_RANGE, src))] The reaction gives out a fizz, teleporting items everywhere!</span>")

View File

@@ -5,7 +5,7 @@
reaction_tags = REACTION_TAG_EXPLOSIVE | REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EXPLOSIVE | REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS
required_temp = 0 //Prevent impromptu RPGs required_temp = 0 //Prevent impromptu RPGs
/datum/chemical_reaction/reagent_explosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
explode(holder, created_volume) explode(holder, created_volume)
/datum/chemical_reaction/reagent_explosion/proc/explode(datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/proc/explode(datum/reagents/holder, created_volume)
@@ -34,7 +34,7 @@
required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/toxin/acid = 1) required_reagents = list(/datum/reagent/glycerol = 1, /datum/reagent/toxin/acid/nitracid = 1, /datum/reagent/toxin/acid = 1)
strengthdiv = 2 strengthdiv = 2
/datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/nitroglycerin/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL))) if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 25, CHEMICAL_QUANTISATION_LEVEL)))
return return
@@ -53,7 +53,7 @@
required_temp = 404 required_temp = 404
strengthdiv = 8 strengthdiv = 8
/datum/chemical_reaction/reagent_explosion/rdx/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/rdx/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
holder.remove_reagent(/datum/reagent/rdx, created_volume*2) holder.remove_reagent(/datum/reagent/rdx, created_volume*2)
@@ -70,7 +70,7 @@
strengthdiv = 3.5 //actually a decrease of 1 becaused of how explosions are calculated. This is due to the fact we require 2 reagents strengthdiv = 3.5 //actually a decrease of 1 becaused of how explosions are calculated. This is due to the fact we require 2 reagents
modifier = 4 modifier = 4
/datum/chemical_reaction/reagent_explosion/rdx_explosion2/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/rdx_explosion2/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/fire_range = round(created_volume/30) var/fire_range = round(created_volume/30)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
for(var/turf/target as anything in RANGE_TURFS(fire_range,T)) for(var/turf/target as anything in RANGE_TURFS(fire_range,T))
@@ -84,7 +84,7 @@
modifier = 6 modifier = 6
/datum/chemical_reaction/reagent_explosion/rdx_explosion3/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/rdx_explosion3/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/fire_range = round(created_volume/20) var/fire_range = round(created_volume/20)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf as anything in RANGE_TURFS(fire_range,T)) for(var/turf/turf as anything in RANGE_TURFS(fire_range,T))
@@ -101,7 +101,7 @@
/datum/chemical_reaction/reagent_explosion/tatp/update_info() /datum/chemical_reaction/reagent_explosion/tatp/update_info()
required_temp = 450 + rand(-49,49) //this gets loaded only on round start required_temp = 450 + rand(-49,49) //this gets loaded only on round start
/datum/chemical_reaction/reagent_explosion/tatp/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/tatp/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 50, CHEMICAL_QUANTISATION_LEVEL))) // we like exotic stabilizer if(holder.has_reagent(/datum/reagent/exotic_stabilizer,round(created_volume / 50, CHEMICAL_QUANTISATION_LEVEL))) // we like exotic stabilizer
return return
holder.remove_reagent(/datum/reagent/tatp, created_volume) holder.remove_reagent(/datum/reagent/tatp, created_volume)
@@ -112,7 +112,7 @@
required_temp = 550 // this makes making tatp before pyro nades, and extreme pain in the ass to make required_temp = 550 // this makes making tatp before pyro nades, and extreme pain in the ass to make
strengthdiv = 3 strengthdiv = 3
/datum/chemical_reaction/reagent_explosion/tatp_explosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/tatp_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/strengthdiv_adjust = created_volume / ( 2100 / initial(strengthdiv)) var/strengthdiv_adjust = created_volume / ( 2100 / initial(strengthdiv))
strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5 ,1.5) //Slightly better than nitroglycerin strengthdiv = max(initial(strengthdiv) - strengthdiv_adjust + 1.5 ,1.5) //Slightly better than nitroglycerin
. = ..() . = ..()
@@ -138,7 +138,7 @@
required_reagents = list(/datum/reagent/water/holywater = 1, /datum/reagent/potassium = 1) required_reagents = list(/datum/reagent/water/holywater = 1, /datum/reagent/potassium = 1)
strengthdiv = 20 strengthdiv = 20
/datum/chemical_reaction/reagent_explosion/holyboom/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/holyboom/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(created_volume >= 150) if(created_volume >= 150)
strengthdiv = 8 strengthdiv = 8
///turf where to play sound ///turf where to play sound
@@ -176,7 +176,7 @@
modifier = 5 modifier = 5
mix_message = "<span class='boldannounce'>Sparks start flying around the gunpowder!</span>" mix_message = "<span class='boldannounce'>Sparks start flying around the gunpowder!</span>"
/datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
addtimer(CALLBACK(src, .proc/explode, holder, created_volume), rand(5,10) SECONDS) addtimer(CALLBACK(src, .proc/explode, holder, created_volume), rand(5,10) SECONDS)
/datum/chemical_reaction/thermite /datum/chemical_reaction/thermite
@@ -188,7 +188,7 @@
required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/iron = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/emp_pulse/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/emp_pulse/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
// 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes. // 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. // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
@@ -200,7 +200,7 @@
required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/uranium/radium = 1) required_reagents = list(/datum/reagent/consumable/honey = 1, /datum/reagent/medicine/strange_reagent = 1, /datum/reagent/uranium/radium = 1)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/beesplosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/beesplosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = holder.my_atom.drop_location() var/location = holder.my_atom.drop_location()
if(created_volume < 5) if(created_volume < 5)
playsound(location,'sound/effects/sparks1.ogg', 100, TRUE) playsound(location,'sound/effects/sparks1.ogg', 100, TRUE)
@@ -230,7 +230,7 @@
overheat_temp = 1050 overheat_temp = 1050
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DANGEROUS | REACTION_TAG_BURN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_CHEMICAL | REACTION_TAG_DANGEROUS | REACTION_TAG_BURN
/datum/chemical_reaction/clf3/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
for(var/turf/target as anything in RANGE_TURFS(1,T)) for(var/turf/target as anything in RANGE_TURFS(1,T))
new /obj/effect/hotspot(target) new /obj/effect/hotspot(target)
@@ -243,8 +243,7 @@
modifier = 5 modifier = 5
mob_react = FALSE mob_react = FALSE
/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
/datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
for(var/turf/target in RANGE_TURFS(1,T)) for(var/turf/target in RANGE_TURFS(1,T))
new /obj/effect/hotspot(target) new /obj/effect/hotspot(target)
@@ -260,7 +259,7 @@
required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1, /datum/reagent/carbon = 1) required_reagents = list(/datum/reagent/mercury = 1, /datum/reagent/oxygen = 1, /datum/reagent/nitrogen = 1, /datum/reagent/carbon = 1)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/sorium/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/sorium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
holder.remove_reagent(/datum/reagent/sorium, created_volume*4) holder.remove_reagent(/datum/reagent/sorium, created_volume*4)
@@ -273,7 +272,7 @@
required_temp = 474 required_temp = 474
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/sorium_vortex/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
var/range = clamp(sqrt(created_volume), 1, 6) var/range = clamp(sqrt(created_volume), 1, 6)
goonchem_vortex(T, 1, range) goonchem_vortex(T, 1, range)
@@ -283,7 +282,7 @@
required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/carbon = 1) required_reagents = list(/datum/reagent/stable_plasma = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/carbon = 1)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/liquid_dark_matter/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3) holder.remove_reagent(/datum/reagent/liquid_dark_matter, created_volume*3)
@@ -296,7 +295,7 @@
required_temp = 474 required_temp = 474
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/ldm_vortex/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
var/range = clamp(sqrt(created_volume/2), 1, 6) var/range = clamp(sqrt(created_volume/2), 1, 6)
goonchem_vortex(T, 0, range) goonchem_vortex(T, 0, range)
@@ -307,7 +306,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/flash_powder/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/flash_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
@@ -329,7 +328,7 @@
required_temp = 374 required_temp = 374
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/flash_powder_flash/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/flash_powder_flash/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
do_sparks(2, TRUE, location) do_sparks(2, TRUE, location)
var/range = created_volume/10 var/range = created_volume/10
@@ -349,7 +348,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/smoke_powder/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/smoke_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3) holder.remove_reagent(/datum/reagent/smoke_powder, created_volume*3)
@@ -371,7 +370,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
var/smoke_radius = round(sqrt(created_volume / 2), 1) var/smoke_radius = round(sqrt(created_volume / 2), 1)
var/datum/effect_system/smoke_spread/chem/S = new var/datum/effect_system/smoke_spread/chem/S = new
@@ -388,7 +387,7 @@
required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/consumable/space_cola = 1, /datum/reagent/phosphorus = 1) required_reagents = list(/datum/reagent/oxygen = 1, /datum/reagent/consumable/space_cola = 1, /datum/reagent/phosphorus = 1)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/sonic_powder/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/sonic_powder/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3) holder.remove_reagent(/datum/reagent/sonic_powder, created_volume*3)
@@ -402,7 +401,7 @@
required_temp = 374 required_temp = 374
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/sonic_powder_deafen/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom) var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, TRUE) playsound(location, 'sound/effects/bang.ogg', 25, TRUE)
for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location)) for(var/mob/living/carbon/C in get_hearers_in_view(created_volume/10, location))
@@ -413,7 +412,7 @@
required_reagents = list(/datum/reagent/phosphorus = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/stable_plasma = 1) required_reagents = list(/datum/reagent/phosphorus = 1, /datum/reagent/toxin/acid = 1, /datum/reagent/stable_plasma = 1)
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/phlogiston/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/phlogiston/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(holder.has_reagent(/datum/reagent/stabilizing_agent)) if(holder.has_reagent(/datum/reagent/stabilizing_agent))
return return
var/turf/open/T = get_turf(holder.my_atom) var/turf/open/T = get_turf(holder.my_atom)
@@ -449,7 +448,7 @@
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_ORGAN reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE | REACTION_TAG_ORGAN
//Halve beaker temp on reaction //Halve beaker temp on reaction
/datum/chemical_reaction/cryostylane/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/cryostylane/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/datum/reagent/oxygen = holder.has_reagent(/datum/reagent/oxygen) //If we have oxygen, bring in the old cooling effect var/datum/reagent/oxygen = holder.has_reagent(/datum/reagent/oxygen) //If we have oxygen, bring in the old cooling effect
if(oxygen) if(oxygen)
holder.chem_temp = max(holder.chem_temp - (10 * oxygen.volume * 2),0) holder.chem_temp = max(holder.chem_temp - (10 * oxygen.volume * 2),0)
@@ -457,7 +456,7 @@
return return
//purity != temp (above 50) - the colder you are the more impure it becomes //purity != temp (above 50) - the colder you are the more impure it becomes
/datum/chemical_reaction/cryostylane/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/cryostylane/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
if(holder.chem_temp < CRYOSTYLANE_UNDERHEAT_TEMP) if(holder.chem_temp < CRYOSTYLANE_UNDERHEAT_TEMP)
overheated(holder, reaction, step_reaction_vol) overheated(holder, reaction, step_reaction_vol)
@@ -467,7 +466,7 @@
return return
reaction.delta_ph *= step_temp reaction.delta_ph *= step_temp
/datum/chemical_reaction/cryostylane/reaction_finish(datum/reagents/holder, react_vol) /datum/chemical_reaction/cryostylane/reaction_finish(datum/reagents/holder, datum/equilibrium/reaction, react_vol)
. = ..() . = ..()
if(holder.chem_temp < CRYOSTYLANE_UNDERHEAT_TEMP) if(holder.chem_temp < CRYOSTYLANE_UNDERHEAT_TEMP)
overheated(holder, null, react_vol) //replace null with fix win 2.3 is merged overheated(holder, null, react_vol) //replace null with fix win 2.3 is merged
@@ -525,7 +524,7 @@
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/pyrosium_oxygen/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.chem_temp += 10*created_volume holder.chem_temp += 10*created_volume
/datum/chemical_reaction/pyrosium /datum/chemical_reaction/pyrosium
@@ -538,7 +537,7 @@
thermic_constant = 0 thermic_constant = 0
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/pyrosium/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/pyrosium/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.chem_temp = 20 // also cools the fuck down holder.chem_temp = 20 // also cools the fuck down
return return
@@ -564,8 +563,8 @@
var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN var/zap_flags = ZAP_MOB_DAMAGE | ZAP_OBJ_DAMAGE | ZAP_MOB_STUN
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_EXPLOSIVE | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/teslium_lightning/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, 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/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/T2 = created_volume * 50
var/T3 = created_volume * 120 var/T3 = created_volume * 120
var/added_delay = 0.5 SECONDS var/added_delay = 0.5 SECONDS
@@ -595,7 +594,7 @@
required_temp = 575 required_temp = 575
modifier = 1 modifier = 1
/datum/chemical_reaction/reagent_explosion/nitrous_oxide/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/reagent_explosion/nitrous_oxide/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.remove_reagent(/datum/reagent/sorium, created_volume*2) holder.remove_reagent(/datum/reagent/sorium, created_volume*2)
var/turf/turfie = get_turf(holder.my_atom) var/turf/turfie = get_turf(holder.my_atom)
//generally half as strong as sorium. //generally half as strong as sorium.

View File

@@ -80,19 +80,19 @@
reaction_flags = REACTION_COMPETITIVE //Competes with /datum/chemical_reaction/prefactor_a/competitive reaction_flags = REACTION_COMPETITIVE //Competes with /datum/chemical_reaction/prefactor_a/competitive
reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS | REACTION_TAG_CHEMICAL | REACTION_TAG_COMPETITIVE reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_DANGEROUS | REACTION_TAG_CHEMICAL | REACTION_TAG_COMPETITIVE
/datum/chemical_reaction/prefactor_b/reaction_step(datum/equilibrium/reaction, datum/reagents/holder, delta_t, delta_ph, step_reaction_vol) /datum/chemical_reaction/prefactor_b/reaction_step(datum/reagents/holder, datum/equilibrium/reaction, delta_t, delta_ph, step_reaction_vol)
. = ..() . = ..()
if(holder.has_reagent(/datum/reagent/bluespace)) if(holder.has_reagent(/datum/reagent/bluespace))
holder.remove_reagent(/datum/reagent/bluespace, 1) holder.remove_reagent(/datum/reagent/bluespace, 1)
reaction.delta_t *= 5 reaction.delta_t *= 5
/datum/chemical_reaction/prefactor_b/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/prefactor_b/overheated(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
. = ..() . = ..()
explode_shockwave(holder, equilibrium) explode_shockwave(holder, equilibrium)
var/vol = max(20, holder.total_volume/5) //Not letting you have more than 5 var/vol = max(20, holder.total_volume/5) //Not letting you have more than 5
clear_reagents(holder, vol)//Lest we explode forever clear_reagents(holder, vol)//Lest we explode forever
/datum/chemical_reaction/prefactor_b/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, vol_added) /datum/chemical_reaction/prefactor_b/overly_impure(datum/reagents/holder, datum/equilibrium/equilibrium, step_volume_added)
explode_fire(holder, equilibrium) explode_fire(holder, equilibrium)
var/vol = max(20, holder.total_volume/5) //Not letting you have more than 5 var/vol = max(20, holder.total_volume/5) //Not letting you have more than 5
clear_reagents(holder, vol) clear_reagents(holder, vol)

View File

@@ -1,10 +1,10 @@
/datum/chemical_reaction/slime /datum/chemical_reaction/slime
var/deletes_extract = TRUE var/deletes_extract = TRUE
reaction_flags = REACTION_INSTANT reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME
/datum/chemical_reaction/slime/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
use_slime_core(holder) use_slime_core(holder)
/datum/chemical_reaction/slime/proc/use_slime_core(datum/reagents/holder) /datum/chemical_reaction/slime/proc/use_slime_core(datum/reagents/holder)
@@ -23,7 +23,7 @@
required_container = /obj/item/slime_extract/grey required_container = /obj/item/slime_extract/grey
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimespawn/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/mob/living/simple_animal/slime/S = new(get_turf(holder.my_atom), "grey") var/mob/living/simple_animal/slime/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 a new baby slime emerges from it!</span>") S.visible_message("<span class='danger'>Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!</span>")
..() ..()
@@ -39,7 +39,7 @@
required_container = /obj/item/slime_extract/grey required_container = /obj/item/slime_extract/grey
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
for(var/i in 1 to 3) for(var/i in 1 to 3)
new /obj/item/food/monkeycube(get_turf(holder.my_atom)) new /obj/item/food/monkeycube(get_turf(holder.my_atom))
..() ..()
@@ -69,7 +69,7 @@
required_container = /obj/item/slime_extract/metal required_container = /obj/item/slime_extract/metal
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimemetal/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/location = get_turf(holder.my_atom) var/turf/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/plasteel(location, 5) new /obj/item/stack/sheet/plasteel(location, 5)
new /obj/item/stack/sheet/iron(location, 15) new /obj/item/stack/sheet/iron(location, 15)
@@ -80,7 +80,7 @@
required_container = /obj/item/slime_extract/metal required_container = /obj/item/slime_extract/metal
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimeglass/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/location = get_turf(holder.my_atom) var/turf/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/rglass(location, 5) new /obj/item/stack/sheet/rglass(location, 5)
new /obj/item/stack/sheet/glass(location, 15) new /obj/item/stack/sheet/glass(location, 15)
@@ -94,7 +94,7 @@
deletes_extract = FALSE //we do delete, but we don't do so instantly deletes_extract = FALSE //we do delete, but we don't do so instantly
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
summon_mobs(holder, T) summon_mobs(holder, T)
var/obj/item/slime_extract/M = holder.my_atom var/obj/item/slime_extract/M = holder.my_atom
@@ -135,7 +135,7 @@
required_container = /obj/item/slime_extract/silver required_container = /obj/item/slime_extract/silver
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimebork/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
//BORK BORK BORK //BORK BORK BORK
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
@@ -177,7 +177,7 @@
required_container = /obj/item/slime_extract/blue required_container = /obj/item/slime_extract/blue
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/stabilizer(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/stabilizer(get_turf(holder.my_atom))
..() ..()
@@ -186,7 +186,7 @@
required_container = /obj/item/slime_extract/blue required_container = /obj/item/slime_extract/blue
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimefoam/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefoam/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
holder.create_foam(/datum/effect_system/foam_spread,80, "<span class='danger'>[src] spews out foam!</span>") holder.create_foam(/datum/effect_system/foam_spread,80, "<span class='danger'>[src] spews out foam!</span>")
//Dark Blue //Dark Blue
@@ -196,7 +196,7 @@
required_other = TRUE required_other = TRUE
deletes_extract = FALSE deletes_extract = FALSE
/datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='danger'>The slime extract starts to feel extremely cold!</span>") T.visible_message("<span class='danger'>The slime extract starts to feel extremely cold!</span>")
addtimer(CALLBACK(src, .proc/freeze, holder), 50) addtimer(CALLBACK(src, .proc/freeze, holder), 50)
@@ -217,7 +217,7 @@
required_container = /obj/item/slime_extract/darkblue required_container = /obj/item/slime_extract/darkblue
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom)) new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom))
..() ..()
@@ -234,7 +234,7 @@
required_other = TRUE required_other = TRUE
deletes_extract = FALSE deletes_extract = FALSE
/datum/chemical_reaction/slime/slimefire/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>") T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
addtimer(CALLBACK(src, .proc/slime_burn, holder), 50) addtimer(CALLBACK(src, .proc/slime_burn, holder), 50)
@@ -263,7 +263,7 @@
required_other = TRUE required_other = TRUE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
empulse(get_turf(holder.my_atom), 3, 7) empulse(get_turf(holder.my_atom), 3, 7)
..() ..()
@@ -272,7 +272,7 @@
required_container = /obj/item/slime_extract/yellow required_container = /obj/item/slime_extract/yellow
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimeglow/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) 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>") T.visible_message("<span class='danger'>The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.</span>")
new /obj/item/flashlight/slime(T) new /obj/item/flashlight/slime(T)
@@ -284,7 +284,7 @@
required_container = /obj/item/slime_extract/purple required_container = /obj/item/slime_extract/purple
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/steroid(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/steroid(get_turf(holder.my_atom))
..() ..()
@@ -300,7 +300,7 @@
required_container = /obj/item/slime_extract/darkpurple required_container = /obj/item/slime_extract/darkpurple
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3) new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3)
..() ..()
@@ -310,7 +310,7 @@
required_container = /obj/item/slime_extract/red required_container = /obj/item/slime_extract/red
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimemutator/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/mutator(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/mutator(get_turf(holder.my_atom))
..() ..()
@@ -320,7 +320,7 @@
required_other = TRUE required_other = TRUE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null))
if(slime.docile) //Undoes docility, but doesn't make rabid. if(slime.docile) //Undoes docility, but doesn't make rabid.
slime.visible_message("<span class='danger'>[slime] forgets its training, becoming wild once again!</span>") slime.visible_message("<span class='danger'>[slime] forgets its training, becoming wild once again!</span>")
@@ -336,7 +336,7 @@
required_container = /obj/item/slime_extract/red required_container = /obj/item/slime_extract/red
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimespeed/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/speed(get_turf(holder.my_atom)) new /obj/item/slimepotion/speed(get_turf(holder.my_atom))
..() ..()
@@ -346,7 +346,7 @@
required_container = /obj/item/slime_extract/pink required_container = /obj/item/slime_extract/pink
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/docility/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/docility(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/docility(get_turf(holder.my_atom))
..() ..()
@@ -355,7 +355,7 @@
required_container = /obj/item/slime_extract/pink required_container = /obj/item/slime_extract/pink
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/gender/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom)) new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom))
..() ..()
@@ -374,7 +374,7 @@
deletes_extract = FALSE deletes_extract = FALSE
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS reaction_tags = REACTION_TAG_EASY | REACTION_TAG_SLIME | REACTION_TAG_DANGEROUS
/datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
var/lastkey = holder.my_atom.fingerprintslast var/lastkey = holder.my_atom.fingerprintslast
var/touch_msg = "N/A" var/touch_msg = "N/A"
@@ -407,7 +407,7 @@
required_reagents = list(/datum/reagent/toxin/plasma = 1) required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/sentience(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/sentience(get_turf(holder.my_atom))
..() ..()
@@ -416,7 +416,7 @@
required_reagents = list(/datum/reagent/water = 1) required_reagents = list(/datum/reagent/water = 1)
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/renaming/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/renaming/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location()) new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location())
..() ..()
@@ -427,7 +427,7 @@
required_container = /obj/item/slime_extract/adamantine required_container = /obj/item/slime_extract/adamantine
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/adamantine/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
..() ..()
@@ -437,7 +437,7 @@
required_container = /obj/item/slime_extract/bluespace required_container = /obj/item/slime_extract/bluespace
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25) new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25)
..() ..()
@@ -447,7 +447,7 @@
required_container = /obj/item/slime_extract/bluespace required_container = /obj/item/slime_extract/bluespace
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom)) var/obj/item/stack/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>") BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
..() ..()
@@ -457,7 +457,7 @@
required_container = /obj/item/slime_extract/bluespace required_container = /obj/item/slime_extract/bluespace
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom)) new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom))
..() ..()
@@ -467,7 +467,7 @@
required_container = /obj/item/slime_extract/cerulean required_container = /obj/item/slime_extract/cerulean
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom)) new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom))
..() ..()
@@ -476,7 +476,7 @@
required_container = /obj/item/slime_extract/cerulean required_container = /obj/item/slime_extract/cerulean
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slime_territory/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom)) new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom))
..() ..()
@@ -486,7 +486,7 @@
required_container = /obj/item/slime_extract/sepia required_container = /obj/item/slime_extract/sepia
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimestop/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
addtimer(CALLBACK(src, .proc/slime_stop, holder), 5 SECONDS) addtimer(CALLBACK(src, .proc/slime_stop, holder), 5 SECONDS)
/datum/chemical_reaction/slime/slimestop/proc/slime_stop(datum/reagents/holder) /datum/chemical_reaction/slime/slimestop/proc/slime_stop(datum/reagents/holder)
@@ -505,7 +505,7 @@
required_container = /obj/item/slime_extract/sepia required_container = /obj/item/slime_extract/sepia
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/camera(get_turf(holder.my_atom)) new /obj/item/camera(get_turf(holder.my_atom))
new /obj/item/camera_film(get_turf(holder.my_atom)) new /obj/item/camera_film(get_turf(holder.my_atom))
..() ..()
@@ -515,7 +515,7 @@
required_container = /obj/item/slime_extract/sepia required_container = /obj/item/slime_extract/sepia
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimefloor/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25) new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25)
..() ..()
@@ -525,7 +525,7 @@
required_container = /obj/item/slime_extract/pyrite required_container = /obj/item/slime_extract/pyrite
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimepaint/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/chosen = pick(subtypesof(/obj/item/paint)) var/chosen = pick(subtypesof(/obj/item/paint))
new chosen(get_turf(holder.my_atom)) new chosen(get_turf(holder.my_atom))
..() ..()
@@ -535,7 +535,7 @@
required_container = /obj/item/slime_extract/pyrite required_container = /obj/item/slime_extract/pyrite
required_other = TRUE required_other = TRUE
/datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))) var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan)))
new chosen(get_turf(holder.my_atom)) new chosen(get_turf(holder.my_atom))
..() ..()
@@ -546,7 +546,7 @@
required_other = TRUE required_other = TRUE
required_container = /obj/item/slime_extract/rainbow required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slime_rng/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slime_rng/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
if(created_volume >= 5) if(created_volume >= 5)
var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom)) var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom))
S.visible_message("<span class='danger'>Infused with plasma, the core begins to expand uncontrollably!</span>") S.visible_message("<span class='danger'>Infused with plasma, the core begins to expand uncontrollably!</span>")
@@ -563,7 +563,7 @@
required_other = TRUE required_other = TRUE
required_container = /obj/item/slime_extract/rainbow required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/turf/T = get_turf(holder.my_atom) var/turf/T = get_turf(holder.my_atom)
var/obj/item/grenade/clusterbuster/slime/volatile/S = new (T) var/obj/item/grenade/clusterbuster/slime/volatile/S = new (T)
S.visible_message("<span class='danger'>Infused with slime jelly, the core begins to expand uncontrollably!</span>") S.visible_message("<span class='danger'>Infused with slime jelly, the core begins to expand uncontrollably!</span>")
@@ -584,7 +584,7 @@
required_other = TRUE required_other = TRUE
required_container = /obj/item/slime_extract/rainbow required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/slimepotion/transference(get_turf(holder.my_atom)) new /obj/item/slimepotion/transference(get_turf(holder.my_atom))
..() ..()
@@ -593,6 +593,6 @@
required_other = TRUE required_other = TRUE
required_container = /obj/item/slime_extract/rainbow required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/flight_potion/on_reaction(datum/equilibrium/reaction, datum/reagents/holder, created_volume) /datum/chemical_reaction/slime/flight_potion/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
new /obj/item/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom)) new /obj/item/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom))
..() ..()

View File

@@ -330,6 +330,7 @@
#include "code\controllers\subsystem\discord.dm" #include "code\controllers\subsystem\discord.dm"
#include "code\controllers\subsystem\disease.dm" #include "code\controllers\subsystem\disease.dm"
#include "code\controllers\subsystem\economy.dm" #include "code\controllers\subsystem\economy.dm"
#include "code\controllers\subsystem\eigenstate.dm"
#include "code\controllers\subsystem\events.dm" #include "code\controllers\subsystem\events.dm"
#include "code\controllers\subsystem\explosions.dm" #include "code\controllers\subsystem\explosions.dm"
#include "code\controllers\subsystem\fire_burning.dm" #include "code\controllers\subsystem\fire_burning.dm"
@@ -3085,6 +3086,7 @@
#include "code\modules\reagents\chemistry\reagents\pyrotechnic_reagents.dm" #include "code\modules\reagents\chemistry\reagents\pyrotechnic_reagents.dm"
#include "code\modules\reagents\chemistry\reagents\reaction_agents_reagents.dm" #include "code\modules\reagents\chemistry\reagents\reaction_agents_reagents.dm"
#include "code\modules\reagents\chemistry\reagents\toxin_reagents.dm" #include "code\modules\reagents\chemistry\reagents\toxin_reagents.dm"
#include "code\modules\reagents\chemistry\reagents\unique\eigenstasium.dm"
#include "code\modules\reagents\chemistry\reagents\impure_reagents\impure_medicine_reagents.dm" #include "code\modules\reagents\chemistry\reagents\impure_reagents\impure_medicine_reagents.dm"
#include "code\modules\reagents\chemistry\recipes\cat2_medicines.dm" #include "code\modules\reagents\chemistry\recipes\cat2_medicines.dm"
#include "code\modules\reagents\chemistry\recipes\catalysts.dm" #include "code\modules\reagents\chemistry\recipes\catalysts.dm"