mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-14 11:42:27 +00:00
[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:
@@ -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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 //
|
||||||
/////////////
|
/////////////
|
||||||
|
|||||||
112
code/controllers/subsystem/eigenstate.dm
Normal file
112
code/controllers/subsystem/eigenstate.dm
Normal 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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
switch(processing_speed)
|
||||||
|
if(STATUS_EFFECT_FAST_PROCESS)
|
||||||
START_PROCESSING(SSfastprocess, src)
|
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()
|
||||||
|
switch(processing_speed)
|
||||||
|
if(STATUS_EFFECT_FAST_PROCESS)
|
||||||
STOP_PROCESSING(SSfastprocess, src)
|
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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
107
code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
Normal file
107
code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
Normal 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)
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 ..()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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>")
|
||||||
|
|||||||
@@ -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,7 +563,7 @@
|
|||||||
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
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -4,7 +4,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/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))
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user