Ramping up to logging and a few more fixes.

This commit is contained in:
Fermi
2019-06-13 05:51:28 +01:00
parent da6f1da624
commit 378af882d3
6 changed files with 66 additions and 77 deletions
+1
View File
@@ -16,6 +16,7 @@
#define INVESTIGATE_EXONET "exonet" #define INVESTIGATE_EXONET "exonet"
#define INVESTIGATE_NANITES "nanites" #define INVESTIGATE_NANITES "nanites"
#define INVESTIGATE_CIRCUIT "circuit" #define INVESTIGATE_CIRCUIT "circuit"
#define INVESTIGATE_FERMICHEM "fermichem"
// Logging types for log_message() // Logging types for log_message()
#define LOG_ATTACK (1 << 0) #define LOG_ATTACK (1 << 0)
+1 -1
View File
@@ -35,7 +35,7 @@
//FermiChem - How to check pH of a beaker without a meter/pH paper. //FermiChem - How to check pH of a beaker without a meter/pH paper.
//Basically checks the pH of the holder and burns your poor tongue if it's too acidic! //Basically checks the pH of the holder and burns your poor tongue if it's too acidic!
//TRAIT_AGEUSIA players can't taste, unless it's burning them. //TRAIT_AGEUSIA players can't taste, unless it's burning them.
//10 sips of a strongly acidic substance will burn your tongue. //taking sips of a strongly acidic/alkaline substance will burn your tongue.
/mob/living/carbon/taste(datum/reagents/from) /mob/living/carbon/taste(datum/reagents/from)
var/obj/item/organ/tongue/T = getorganslot("tongue") var/obj/item/organ/tongue/T = getorganslot("tongue")
if (!T) if (!T)
+1 -1
View File
@@ -1230,7 +1230,7 @@
if(message_admins) if(message_admins)
message_admins("[ADMIN_LOOKUPFLW(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") message_admins("[ADMIN_LOOKUPFLW(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
log_game("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") log_game("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].")
investigate_log("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].") investigate_log("[key_name(user)] has said '[log_message]' with a Velvet Voice, affecting [english_list(listeners)], with a power multiplier of [power_multiplier].", INVESTIGATE_FERMICHEM)
//SSblackbox.record_feedback("tally", "Velvet_voice", 1, log_message) If this is on, it fills the thing up and OOFs the server //SSblackbox.record_feedback("tally", "Velvet_voice", 1, log_message) If this is on, it fills the thing up and OOFs the server
return return
@@ -4,7 +4,7 @@
alert_type = null alert_type = null
/datum/status_effect/chem/SGDF/on_apply() /datum/status_effect/chem/SGDF/on_apply()
investigate_log("SGDF status appied on [owner], ID: [owner.id]") investigate_log("SGDF status appied on [owner], ID: [owner.key]", INVESTIGATE_FERMICHEM)
var/typepath = owner.type var/typepath = owner.type
fermi_Clone = new typepath(owner.loc) fermi_Clone = new typepath(owner.loc)
var/mob/living/carbon/M = owner var/mob/living/carbon/M = owner
@@ -20,7 +20,7 @@
if(owner.stat == DEAD) if(owner.stat == DEAD)
if((fermi_Clone && fermi_Clone.stat != DEAD) || (fermi_Clone == null)) if((fermi_Clone && fermi_Clone.stat != DEAD) || (fermi_Clone == null))
if(owner.mind) if(owner.mind)
investigate_log("SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.id]") investigate_log("SGDF mind shift applied. [owner] is now playing as their clone and should not have memories after their clone split (look up SGDF status applied). ID: [owner.key]", INVESTIGATE_FERMICHEM)
owner.mind.transfer_to(fermi_Clone) owner.mind.transfer_to(fermi_Clone)
to_chat(owner, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.</span>") to_chat(owner, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.</span>")
to_chat(fermi_Clone, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.</span>") to_chat(fermi_Clone, "<span class='warning'>Lucidity shoots to your previously blank mind as your mind suddenly finishes the cloning process. You marvel for a moment at yourself, as your mind subconciously recollects all your memories up until the point when you cloned yourself. curiously, you find that you memories are blank after you ingested the sythetic serum, leaving you to wonder where the other you is.</span>")
@@ -37,7 +37,7 @@
var/cachedmoveCalc = 1 var/cachedmoveCalc = 1
/datum/status_effect/chem/breast_enlarger/on_apply(mob/living/carbon/human/H)//Removes clothes, they're too small to contain you. You belong to space now. /datum/status_effect/chem/breast_enlarger/on_apply(mob/living/carbon/human/H)//Removes clothes, they're too small to contain you. You belong to space now.
investigate_log("[owner]'s breasts has reached comical sizes. ID: [owner.id]") investigate_log("[owner]'s breasts has reached comical sizes. ID: [owner.key]", INVESTIGATE_FERMICHEM)
var/mob/living/carbon/human/o = owner var/mob/living/carbon/human/o = owner
var/items = o.get_contents() var/items = o.get_contents()
for(var/obj/item/W in items) for(var/obj/item/W in items)
@@ -92,7 +92,7 @@
..() ..()
/datum/status_effect/chem/breast_enlarger/on_remove(mob/living/carbon/M) /datum/status_effect/chem/breast_enlarger/on_remove(mob/living/carbon/M)
investigate_log("[owner]'s breasts has reduced to an acceptable size. ID: [owner.id]") investigate_log("[owner]'s breasts has reduced to an acceptable size. ID: [owner.key]", INVESTIGATE_FERMICHEM)
owner.remove_movespeed_modifier("megamilk") owner.remove_movespeed_modifier("megamilk")
sizeMoveMod(1) sizeMoveMod(1)
@@ -112,7 +112,7 @@
var/moveCalc var/moveCalc
/datum/status_effect/chem/penis_enlarger/on_apply(mob/living/carbon/human/H)//Removes clothes, they're too small to contain you. You belong to space now. /datum/status_effect/chem/penis_enlarger/on_apply(mob/living/carbon/human/H)//Removes clothes, they're too small to contain you. You belong to space now.
investigate_log("[owner]'s dick has reached comical sizes. ID: [owner.id]") investigate_log("[owner]'s dick has reached comical sizes. ID: [owner.key]", INVESTIGATE_FERMICHEM)
var/mob/living/carbon/human/o = owner var/mob/living/carbon/human/o = owner
var/items = o.get_contents() var/items = o.get_contents()
if(o.w_uniform || o.wear_suit) if(o.w_uniform || o.wear_suit)
@@ -155,7 +155,7 @@
..() ..()
/datum/status_effect/chem/penis_enlarger/on_remove(mob/living/carbon/human/o) /datum/status_effect/chem/penis_enlarger/on_remove(mob/living/carbon/human/o)
investigate_log("[owner]'s dick has reduced to an acceptable size. ID: [owner.id]") investigate_log("[owner]'s dick has reduced to an acceptable size. ID: [owner.key]", INVESTIGATE_FERMICHEM)
owner.remove_movespeed_modifier("hugedick") owner.remove_movespeed_modifier("hugedick")
owner.ResetBloodVol() owner.ResetBloodVol()
@@ -231,7 +231,7 @@
var/message = "[(owner.lewd?"I am a good pet for [enthrallGender].":"[master] is a really inspirational person!")]" var/message = "[(owner.lewd?"I am a good pet for [enthrallGender].":"[master] is a really inspirational person!")]"
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall, message) SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "enthrall", /datum/mood_event/enthrall, message)
to_chat(owner, "<span class='[(owner.lewd?"big love":"big warning")]'><b>You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can resist their effects by repeatedly resisting as much as you can!</b></span>") to_chat(owner, "<span class='[(owner.lewd?"big love":"big warning")]'><b>You feel inexplicably drawn towards [master], their words having a demonstrable effect on you. It seems the closer you are to them, the stronger the effect is. However you aren't fully swayed yet and can resist their effects by repeatedly resisting as much as you can!</b></span>")
investigate_log("MKULTRA: Status applied on [owner] ckey: [owner.id] with a master of [master] ckey: [enthrallID].") investigate_log("MKULTRA: Status applied on [owner] ckey: [owner.key] with a master of [master] ckey: [enthrallID].", INVESTIGATE_FERMICHEM)
return ..() return ..()
/datum/status_effect/chem/enthrall/tick() /datum/status_effect/chem/enthrall/tick()
@@ -265,7 +265,7 @@
if(-1)//fully removed if(-1)//fully removed
SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall") SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "enthrall")
owner.remove_status_effect(src) owner.remove_status_effect(src)
investigate_log("MKULTRA: Status REMOVED from [owner] ckey: [owner.id] with a master of [master] ckey: [enthrallID].") investigate_log("MKULTRA: Status REMOVED from [owner] ckey: [owner.key] with a master of [master] ckey: [enthrallID].", INVESTIGATE_FERMICHEM)
if(0)// sleeper agent if(0)// sleeper agent
if (cooldown > 0) if (cooldown > 0)
cooldown -= 1 cooldown -= 1
@@ -301,7 +301,7 @@
else else
to_chat(owner, "<span class='big nicegreen'><i>You are unable to put up a resistance any longer, and now are under the control of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [master] in death. </i></span>") to_chat(owner, "<span class='big nicegreen'><i>You are unable to put up a resistance any longer, and now are under the control of [master]. However you find that in your intoxicated state you are unable to resort to violence. Equally you are unable to commit suicide, even if ordered to, as you cannot serve your [master] in death. </i></span>")
owner.add_trait(TRAIT_PACIFISM, "MKUltra") //IMPORTANT owner.add_trait(TRAIT_PACIFISM, "MKUltra") //IMPORTANT
investigate_log("MKULTRA: Status on [owner] ckey: [owner.id] has been fully entrhalled (state 3) with a master of [master] ckey: [enthrallID].") investigate_log("MKULTRA: Status on [owner] ckey: [owner.key] has been fully entrhalled (state 3) with a master of [master] ckey: [enthrallID].", INVESTIGATE_FERMICHEM)
else if (resistanceTally > 200) else if (resistanceTally > 200)
enthrallTally *= 0.5 enthrallTally *= 0.5
phase -= 1 phase -= 1
@@ -540,7 +540,7 @@
var/cached_trigger = lowertext(trigger) var/cached_trigger = lowertext(trigger)
if (findtext(raw_message, cached_trigger))//if trigger1 is the message if (findtext(raw_message, cached_trigger))//if trigger1 is the message
cTriggered = TRUE cTriggered = TRUE
investigate_log("MKULTRA: [owner] ckey: [owner.id] has been triggered with [cached_trigger] from [speaker] saying: \"[message]\". (their master being [master] ckey: [enthrallID].)") investigate_log("MKULTRA: [owner] ckey: [owner.key] has been triggered with [cached_trigger] from [speaker] saying: \"[message]\". (their master being [master] ckey: [enthrallID].)", INVESTIGATE_FERMICHEM)
//Speak (Forces player to talk) works //Speak (Forces player to talk) works
if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2 if (lowertext(customTriggers[trigger][1]) == "speak")//trigger2
@@ -549,14 +549,14 @@
saytext += " You find yourself fully believing in the validity of what you just said and don't think to question it." saytext += " You find yourself fully believing in the validity of what you just said and don't think to question it."
to_chat(C, "<span class='notice'><i>[saytext]</i></span>") to_chat(C, "<span class='notice'><i>[saytext]</i></span>")
(C.say(customTriggers[trigger][2]))//trigger3 (C.say(customTriggers[trigger][2]))//trigger3
investigate_log("MKULTRA: [owner] ckey: [owner.id] has been forced to say: \"[customTriggers[trigger][2]]\" from previous trigger.") investigate_log("MKULTRA: [owner] ckey: [owner.key] has been forced to say: \"[customTriggers[trigger][2]]\" from previous trigger.", INVESTIGATE_FERMICHEM)
//Echo (repeats message!) works //Echo (repeats message!)
else if (lowertext(customTriggers[trigger][1]) == "echo")//trigger2 else if (lowertext(customTriggers[trigger][1]) == "echo")//trigger2
(to_chat(owner, "<span class='hypnophrase'><i>[customTriggers[trigger][2]]</i></span>"))//trigger3 (to_chat(owner, "<span class='hypnophrase'><i>[customTriggers[trigger][2]]</i></span>"))//trigger3
//Shocking truth! works //Shocking truth!
else if (lowertext(customTriggers[trigger]) == "shock") else if (lowertext(customTriggers[trigger]) == "shock")
if (C.canbearoused) if (C.canbearoused)
C.electrocute_act(10, src, 1, FALSE, FALSE, FALSE, TRUE)//I've no idea how strong this is C.electrocute_act(10, src, 1, FALSE, FALSE, FALSE, TRUE)//I've no idea how strong this is
@@ -595,7 +595,7 @@
var/mob/living/carbon/human/o = owner var/mob/living/carbon/human/o = owner
o.apply_status_effect(/datum/status_effect/trance, 200, TRUE) o.apply_status_effect(/datum/status_effect/trance, 200, TRUE)
tranceTime = 50 tranceTime = 50
investigate_log("MKULTRA: [owner] ckey: [owner.id] has been tranced from previous trigger.") investigate_log("MKULTRA: [owner] ckey: [owner.key] has been tranced from previous trigger.", INVESTIGATE_FERMICHEM)
cTriggered = FALSE cTriggered = FALSE
@@ -1235,31 +1235,30 @@ Creating a chem with a low purity will make you permanently fall in love with so
/datum/reagent/fermi/hatmium //for hatterhat /datum/reagent/fermi/hatmium //for hatterhat
name = "Hat growth serium" name = "Hat growth serium"
id = "hatmium" id = "hatmium"
description = "A strange substance that draws in a hat from the hat dimention, " description = "A strange substance that draws in a hat from the hat dimention."
color = "#A080H4" // rgb: , 0, 255 color = "#A080H4" // rgb: , 0, 255
taste_description = "like jerky, whiskey and an off aftertaste of a crypt" taste_description = "like jerky, whiskey and an off aftertaste of a crypt."
overdose_threshold = 25 overdose_threshold = 25
var/obj/item/clothing/head/hattip/hat
DoNotSplit = TRUE DoNotSplit = TRUE
pH = 4 pH = 4
/datum/reagent/fermi/hatmium/on_mob_add(mob/living/carbon/human/M) /datum/reagent/fermi/hatmium/on_mob_add(mob/living/carbon/human/M)
. = ..() . = ..()
var/items = M.get_contents() if(M.head)
for(var/obj/item/W in items) var/obj/item/W = M.head
if(W == M.head) if(W == /obj/item/clothing/head/hattip)
if(W == /obj/item/clothing/head/hattip) qdel(W)
qdel(W) else
else M.dropItemToGround(W, TRUE)
M.dropItemToGround(W, TRUE)
hat = new /obj/item/clothing/head/hattip() hat = new /obj/item/clothing/head/hattip()
M.equip_to_slot(hat, SLOT_HEAD, 1, 1) M.equip_to_slot(hat, SLOT_HEAD, 1, 1)
/datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M) /datum/reagent/fermi/hatmium/on_mob_life(mob/living/carbon/human/M)
//hat.armor = list("melee" = (1+(current_cycle/20)), "bullet" = (1+(current_cycle/20)), "laser" = (1+(current_cycle/20)), "energy" = (1+(current_cycle/20)), "bomb" = (1+(current_cycle/20)), "bio" = (1+(current_cycle/20)), "rad" = (1+(current_cycle/20)), "fire" = (1+(current_cycle/20)), "acid" = (1+(current_cycle/20))) M.head
var/hatArmor = (1+(current_cycle/30))*purity var/hatArmor = (1+(current_cycle/30))*purity
for(var/datum/armor in )
if(!overdosed) if(!overdosed)
hat.armor = list("melee" = hatArmor, "bullet" = hatArmor, "laser" = hatArmor, "energy" = hatArmor, "bomb" = hatArmor, "bio" = hatArmor, "rad" = hatArmor, "fire" = hatArmor) hat.armor = list("melee" = hatArmor, "bullet" = hatArmor, "laser" = hatArmor, "energy" = hatArmor, "bomb" = hatArmor, "bio" = hatArmor, "rad" = hatArmor, "fire" = hatArmor)
else else
@@ -1341,19 +1340,19 @@ Creating a chem with a low purity will make you permanently fall in love with so
//Nanite removal //Nanite removal
//Writen by Trilby!! Embellsished a little by me. //Writen by Trilby!! Embellsished a little by me.
/datum/reagent/fermi/naninte_b_gone /datum/reagent/fermi/nanite_b_gone
name = "Naninte bain" name = "Naninte bain"
id = "naninte_b_gone" id = "nanite_b_gone"
description = "A rather simple toxin to small nano machines that will kill them off at a rapid rate well in system." description = "A rather simple toxin to small nano machines that will kill them off at a rapid rate well in system."
color = "#5a7267" // rgb: 90, 114, 103 color = "#5a7267" // rgb: 90, 114, 103
overdose_threshold = 15 overdose_threshold = 15
ImpureChem = "naninte_b_goneTox" //If you make an inpure chem, it stalls growth ImpureChem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth
InverseChemVal = 0.25 InverseChemVal = 0.25
InverseChem = "naninte_b_goneTox" //At really impure vols, it just becomes 100% inverse InverseChem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse
taste_description = "what can only be described as licking a battery." taste_description = "what can only be described as licking a battery."
pH = 9 pH = 9
/datum/reagent/fermi/naninte_b_gone/on_mob_life(mob/living/carbon/C) /datum/reagent/fermi/nanite_b_gone/on_mob_life(mob/living/carbon/C)
//var/component/nanites/N = M.GetComponent(/datum/component/nanites) //var/component/nanites/N = M.GetComponent(/datum/component/nanites)
GET_COMPONENT_FROM(N, /datum/component/nanites, C) GET_COMPONENT_FROM(N, /datum/component/nanites, C)
if(isnull(N)) if(isnull(N))
@@ -1361,7 +1360,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
N.nanite_volume = -0.55//0.5 seems to be the default to me, so it'll neuter them. N.nanite_volume = -0.55//0.5 seems to be the default to me, so it'll neuter them.
..() ..()
/datum/reagent/fermi/naninte_b_gone/overdose_process(mob/living/carbon/C) /datum/reagent/fermi/nanite_b_gone/overdose_process(mob/living/carbon/C)
//var/component/nanites/N = M.GetComponent(/datum/component/nanites) //var/component/nanites/N = M.GetComponent(/datum/component/nanites)
GET_COMPONENT_FROM(N, /datum/component/nanites, C) GET_COMPONENT_FROM(N, /datum/component/nanites, C)
if(prob(5)) if(prob(5))
@@ -1371,21 +1370,21 @@ Creating a chem with a low purity will make you permanently fall in love with so
//empulse((get_turf(C)), 3, 2)//So the nanites randomize //empulse((get_turf(C)), 3, 2)//So the nanites randomize
var/atom/T = C var/atom/T = C
T.emp_act(EMP_HEAVY) T.emp_act(EMP_HEAVY)
to_chat(C, "<span class='warning'>The nanintes short circuit within your system!</b></span>") to_chat(C, "<span class='warning'>The nanites short circuit within your system!</b></span>")
if(isnull(N)) if(isnull(N))
return ..() return ..()
N.nanite_volume = -2//12.5 seems crazy high? N.nanite_volume = -2//12.5 seems crazy high?
..() ..()
//Unobtainable, used if SDGF is impure but not too impure //Unobtainable, used if SDGF is impure but not too impure
/datum/reagent/fermi/naninte_b_goneTox /datum/reagent/fermi/nanite_b_goneTox
name = "Naninte bain" name = "Naninte bain"
id = "naninte_b_goneTox" id = "nanite_b_goneTox"
description = "Poorly made, and shocks you!" description = "Poorly made, and shocks you!"
metabolization_rate = 1 metabolization_rate = 1
//Increases shock events. //Increases shock events.
/datum/reagent/fermi/naninte_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good) /datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
if(prob(15)) if(prob(15))
to_chat(C, "<span class='warning'>The residual voltage in your system causes you to seize up!</b></span>") to_chat(C, "<span class='warning'>The residual voltage in your system causes you to seize up!</b></span>")
C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE) C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE)
@@ -1548,19 +1547,10 @@ Creating a chem with a low purity will make you permanently fall in love with so
/datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H) /datum/reagent/fermi/secretcatchem/on_mob_add(mob/living/carbon/human/H)
. = ..() . = ..()
var/current_species = H.dna.species.type var/current_species = H.dna.species.type
var/datum/species/mutation = /datum/species/human/felinid
if((mutation != current_species) && (purity >= 0.8))//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. It already requires felind too, so no new functionality there. if((mutation != current_species) && (purity >= 0.8))//ONLY if purity is high, and given the stuff is random. It's very unlikely to get this to 1. It already requires felind too, so no new functionality there.
H.set_species(mutation)
H.gender = FEMALE
//exception(al) handler: //exception(al) handler:
H.dna.features["mam_tail"] = "Cat"
H.dna.features["tail_human"] = "Cat"
H.dna.features["ears"] = "Cat" H.dna.features["ears"] = "Cat"
H.dna.features["mam_ears"] = "Cat" H.dna.features["mam_ears"] = "Cat"
H.dna.features["tail_lizard"] = "Cat"
H.dna.features["mam_tail"] = "Cat"
H.dna.features["mam_tail_animated"] = "Cat"
H.facial_hair_style = "Shaved"
H.verb_say = "mewls" H.verb_say = "mewls"
catshift = TRUE catshift = TRUE
playsound(get_turf(H), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1) playsound(get_turf(H), 'modular_citadel/sound/voice/merowr.ogg', 50, 1, -1)
@@ -1583,7 +1573,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
H.forceMove(catto.loc) H.forceMove(catto.loc)
catto.mind.transfer_to(H) catto.mind.transfer_to(H)
if(catshift == TRUE) if(catshift == TRUE)
words += " ...But wait, are those ears and a tail?" words += " ...But wait, are those cat ears?"
H.say("*wag")//force update sprites. H.say("*wag")//force update sprites.
to_chat(H, "<span class='notice'>[words]</span>") to_chat(H, "<span class='notice'>[words]</span>")
qdel(catto) qdel(catto)
@@ -1,22 +1,20 @@
//TO TWEAK:
/datum/chemical_reaction/fermi /datum/chemical_reaction/fermi
mix_sound = 'sound/effects/bubbles.ogg' mix_sound = 'sound/effects/bubbles.ogg'
//Called for every reaction step //Called for every reaction step
/datum/chemical_reaction/fermi/proc/FermiCreate(holder) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? /datum/chemical_reaction/fermi/proc/FermiCreate(holder)
return return
//Called when reaction STOP_PROCESSING //Called when reaction STOP_PROCESSING
/datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder, multipler) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? /datum/chemical_reaction/fermi/proc/FermiFinish(datum/reagents/holder, multipler)
return return
//Called when temperature is above a certain threshold, or if purity is too low. //Called when temperature is above a certain threshold, or if purity is too low.
/datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE) //You can get holder by reagents.holder WHY DID I LEARN THIS NOW??? /datum/chemical_reaction/fermi/proc/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH, Exploding = FALSE)
if (Exploding == TRUE) if (Exploding == TRUE)
return return
if(!pH)//Dunno how things got here without a pH. if(!pH)//Dunno how things got here without a pH, but just in case
pH = 7 pH = 7
var/ImpureTot = 0 var/ImpureTot = 0
//var/pHmod = 1 //var/pHmod = 1
@@ -66,27 +64,27 @@
my_atom.reagents.clear_reagents() //just in case my_atom.reagents.clear_reagents() //just in case
return return
/datum/chemical_reaction/fermi/eigenstate//done /datum/chemical_reaction/fermi/eigenstate
name = "Eigenstasium" name = "Eigenstasium"
id = "eigenstate" id = "eigenstate"
results = list("eigenstate" = 0.1) results = list("eigenstate" = 0.1)
required_reagents = list("bluespace" = 0.1, "stable_plasma" = 0.1, "sugar" = 0.1) required_reagents = list("bluespace" = 0.1, "stable_plasma" = 0.1, "sugar" = 0.1)
mix_message = "the reaction zaps suddenly!" mix_message = "the reaction zaps suddenly!"
//FermiChem vars: //FermiChem vars:
OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions
OptimalTempMax = 600 // Upper end for above OptimalTempMax = 600 // Upper end for above
ExplodeTemp = 750 //Temperature at which reaction explodes ExplodeTemp = 750 //Temperature at which reaction explodes
OptimalpHMin = 6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase) OptimalpHMin = 6 // Lowest value of pH determining pH a 1 value for pH based rate reactions (Plateu phase)
OptimalpHMax = 8 // Higest value for above OptimalpHMax = 8 // Higest value for above
ReactpHLim = 4 // How far out pH wil react, giving impurity place (Exponential phase) ReactpHLim = 4 // How far out pH wil react, giving impurity place (Exponential phase)
CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst) CatalystFact = 0 // How much the catalyst affects the reaction (0 = no catalyst)
CurveSharpT = 0.6 // How sharp the temperature exponential curve is (to the power of value) CurveSharpT = 0.6 // How sharp the temperature exponential curve is (to the power of value)
CurveSharppH = 2 // How sharp the pH exponential curve is (to the power of value) CurveSharppH = 2 // How sharp the pH exponential curve is (to the power of value)
ThermicConstant = 5 //Temperature change per 1u produced ThermicConstant = 5 //Temperature change per 1u produced
HIonRelease = -0.05 //pH change per 1u reaction HIonRelease = -0.05 //pH change per 1u reaction
RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect RateUpLim = 5 //Optimal/max rate possible if all conditions are perfect
FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics
FermiExplode = FALSE //If the chemical explodes in a special way FermiExplode = FALSE //If the chemical explodes in a special way
/datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does. /datum/chemical_reaction/fermi/eigenstate/FermiFinish(datum/reagents/holder, var/atom/my_atom)//Strange how this doesn't work but the other does.
var/turf/open/location = get_turf(my_atom) var/turf/open/location = get_turf(my_atom)
@@ -95,7 +93,7 @@
//serum //serum
/datum/chemical_reaction/fermi/SDGF //DONE /datum/chemical_reaction/fermi/SDGF
name = "Synthetic-derived growth factor" name = "Synthetic-derived growth factor"
id = "SDGF" id = "SDGF"
results = list("SDGF" = 0.3) results = list("SDGF" = 0.3)
@@ -118,7 +116,7 @@
FermiExplode = TRUE // If the chemical explodes in a special way FermiExplode = TRUE // If the chemical explodes in a special way
PurityMin = 0.2 PurityMin = 0.2
/datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!! Spooky..! be careful!! TODO: Add teratoma slime subspecies /datum/chemical_reaction/fermi/SDGF/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH)//Spawns an angery teratoma!
var/turf/T = get_turf(my_atom) var/turf/T = get_turf(my_atom)
var/mob/living/simple_animal/slime/S = new(T,"grey") var/mob/living/simple_animal/slime/S = new(T,"grey")
S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) S.damage_coeff = list(BRUTE = 0.9 , BURN = 2, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
@@ -158,7 +156,7 @@
var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(get_turf(my_atom)) var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(get_turf(my_atom))
var/list/seen = viewers(8, get_turf(my_atom)) var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen) for(var/mob/M in seen)
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")//OwO to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a pair of breasts!</b></span>")
var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list var/datum/reagent/fermi/breast_enlarger/BE = locate(/datum/reagent/fermi/breast_enlarger) in my_atom.reagents.reagent_list
B.size = ((BE.volume * BE.purity) / 10) //half as effective. B.size = ((BE.volume * BE.purity) / 10) //half as effective.
my_atom.reagents.clear_reagents() my_atom.reagents.clear_reagents()
@@ -190,7 +188,7 @@
var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(get_turf(my_atom)) var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(get_turf(my_atom))
var/list/seen = viewers(8, get_turf(my_atom)) var/list/seen = viewers(8, get_turf(my_atom))
for(var/mob/M in seen) for(var/mob/M in seen)
to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")//OwO to_chat(M, "<span class='warning'>The reaction suddenly condenses, creating a penis!</b></span>")
var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list var/datum/reagent/fermi/penis_enlarger/PE = locate(/datum/reagent/fermi/penis_enlarger) in my_atom.reagents.reagent_list
P.length = ((PE.volume * PE.purity) / 10)//half as effective. P.length = ((PE.volume * PE.purity) / 10)//half as effective.
my_atom.reagents.clear_reagents() my_atom.reagents.clear_reagents()
@@ -249,7 +247,7 @@
if(!B.data) if(!B.data)
var/list/seen = viewers(5, get_turf(my_atom)) var/list/seen = viewers(5, get_turf(my_atom))
for(var/mob/M in seen) for(var/mob/M in seen)
to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>") //if this appears, WHAT?! to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>") //Just in case
E.purity = 0 E.purity = 0
if (B.data.["gender"] == "female") if (B.data.["gender"] == "female")
E.data.["creatorGender"] = "Mistress" E.data.["creatorGender"] = "Mistress"
@@ -272,7 +270,7 @@
if(!B.data) if(!B.data)
var/list/seen = viewers(5, get_turf(my_atom)) var/list/seen = viewers(5, get_turf(my_atom))
for(var/mob/M in seen) for(var/mob/M in seen)
to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>") //if this appears, WHAT?! to_chat(M, "<span class='warning'>The reaction splutters and fails to react.</span>") //Just in case
E.purity = 0 E.purity = 0
if (B.data.["gender"] == "female") if (B.data.["gender"] == "female")
E.data.["creatorGender"] = "Mistress" E.data.["creatorGender"] = "Mistress"
@@ -351,10 +349,10 @@
//There's a weird rounding error or something ugh. //There's a weird rounding error or something ugh.
//Nano-b-gone //Nano-b-gone
/datum/chemical_reaction/fermi/naninte_b_gone//done test /datum/chemical_reaction/fermi/nanite_b_gone//done test
name = "Naninte bain" name = "Naninte bain"
id = "naninte_b_gone" id = "nanite_b_gone"
results = list("naninte_b_gone" = 4) results = list("nanite_b_gone" = 4)
required_reagents = list("synthflesh" = 1, "uranium" = 1, "iron" = 1, "salglu_solution" = 1) required_reagents = list("synthflesh" = 1, "uranium" = 1, "iron" = 1, "salglu_solution" = 1)
mix_message = "the reaction gurgles, encapsulating the reagents in flesh before the emp can be set off." mix_message = "the reaction gurgles, encapsulating the reagents in flesh before the emp can be set off."
required_temp = 499//To force fermireactions before EMP. required_temp = 499//To force fermireactions before EMP.