From 2f7a4082ab5ada396e8818203b22b198873cfc09 Mon Sep 17 00:00:00 2001 From: Fermi Date: Thu, 23 May 2019 23:09:32 +0100 Subject: [PATCH] woooah. --- code/modules/reagents/chemistry/holder.dm | 2 +- code/modules/surgery/organs/lungs.dm | 4 +-- .../code/datums/status_effects/chems.dm | 27 +++++++++++------- .../code/modules/arousal/organs/breasts.dm | 6 ++-- .../code/modules/arousal/organs/genitals.dm | 5 ++-- .../chemistry/reagents/fermi_reagents.dm | 11 +++++-- .../reagents/chemistry/recipes/fermi.dm | 10 +++---- .../code/modules/reagents/objects/items.dm | 2 ++ modular_citadel/icons/obj/FermiChem.dmi | Bin 1877 -> 3898 bytes .../icons/obj/genitals/breasts.dmi | Bin 703 -> 593 bytes .../icons/obj/genitals/breasts_onmob.dmi | Bin 1605 -> 3543 bytes modular_citadel/icons/obj/genitals/penis.dmi | Bin 1526 -> 1580 bytes 12 files changed, 42 insertions(+), 25 deletions(-) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index db0d79c71b..78bfe1fc9d 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -920,7 +920,7 @@ im R.data = data R.on_new(data) if(R.addProc == TRUE) - R.on_new(my_atom) + R.on_new(src) if(istype(D, /datum/reagent/fermi))//Is this a fermichem? var/datum/reagent/fermi/Ferm = D //It's Fermi time! Ferm.FermiNew(my_atom) //Seriously what is "data" ???? diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 65507043bb..12e763fafd 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -1,4 +1,4 @@ -#define LUNGS_MAX_HEALTH 500 +#define LUNGS_MAX_HEALTH 450 /obj/item/organ/lungs name = "lungs" @@ -410,8 +410,8 @@ H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type) adjustLungLoss(cold_level_2_damage*cold_modifier) if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) - adjustLungLoss(cold_level_1_damage*cold_modifier) H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type) + adjustLungLoss(cold_level_1_damage*cold_modifier) if(breath_temperature < cold_level_1_threshold) if(prob(20)) to_chat(H, "You feel [cold_message] in your [name]!") diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index c8ba8b622c..c4ea994650 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -34,8 +34,8 @@ if((fermi_Clone && fermi_Clone.stat != DEAD) || (fermi_Clone == null)) if(owner.mind) owner.mind.transfer_to(fermi_Clone) - owner.visible_message("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.") - fermi_Clone.visible_message("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.") + to_chat(owner, "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.") + to_chat(fermi_Clone, "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.") fermi_Clone = null owner.remove_status_effect(src) // to_chat(owner, "[linked_extract] desperately tries to move your soul to a living body, but can't find one!") @@ -79,7 +79,16 @@ o.dropItemToGround(W, TRUE) playsound(o.loc, 'sound/items/poster_ripped.ogg', 50, 1) to_chat(owner, "Your enormous breasts are way too large to fit anything over them!") - if (B.breast_values[B.size] > B.breast_values[B.prev_size]) + if (B.size == "huge") + if(prob(2)) + to_chat(H, "Your back is feeling a little sore.") + var/target = o.get_bodypart(BODY_ZONE_CHEST) + o.apply_damage(0.1, BRUTE, target) + if(!B.cached_size == B.breast_values[B.prev_size]) + o.add_movespeed_modifier("megamilk", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc) + o.next_move_modifier *= moveCalc + return ..() + else if (B.breast_values[B.size] > B.breast_values[B.prev_size]) o.add_movespeed_modifier("megamilk", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc) o.next_move_modifier *= moveCalc else if (B.breast_values[B.size] < B.breast_values[B.prev_size]) @@ -207,21 +216,19 @@ /datum/status_effect/chem/enthrall/on_apply() var/mob/living/carbon/M = owner var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in M.reagents.reagent_list - if(!E.creatorID) - message_admins("WARNING: FermiChem No master found in thrall, this makes me max sad.") + if(!E) + message_admins("WARNING: FermiChem: No chem found in thrall, did you bus in the chem? Someone set up the reaction incorrectly if not. Console them with a fermiplush please.") enthrallID = E.creatorID enthrallGender = E.creatorGender master = get_mob_by_key(enthrallID) - if(!E) - message_admins("WARNING: No chem found in thrall!!!!") if(!master) - message_admins("WARNING: No master! found in thrall!!!!") + message_admins("WARNING: FermiChem: No master found in thrall, did you bus in the chem? Someone set up the reaction incorrectly if not. Console them with a fermiplush please.") if(M.ckey == enthrallID) owner.remove_status_effect(src)//This shouldn't happen, but just in case redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed# //redirect_component2 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_SAY = CALLBACK(src, .proc/owner_say)))) //Do resistance calc if resist is pressed //redirect_component3 = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_HEAR = CALLBACK(src, .proc/owner_hear)))) //Do resistance calc if resist is pressed - //RegisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL, .proc/owner_say) + //RegisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL, .proc/owner_say) //to add, maybe. RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear) //Might need to add redirect component for listening too. var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //It's their brain! @@ -506,7 +513,7 @@ redirect_component = null UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) owner.remove_trait(TRAIT_PACIFISM, "MKUltra") - //UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL) + //UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL) //Should still make custom commands work after freedom, need to check. /* /datum/status_effect/chem/enthrall/mob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 8d940897d2..820b9cde66 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -139,5 +139,7 @@ H.Force_update_genitals() prev_size = size - else if (cached_size == 16.2) - to_chat(owner, "Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a hefty [uppertext(size)]cm diameter bosom.")// taking both of your hands to hold!.") + else if (cached_size >= 16) + if(size != "huge") + to_chat(owner, "Your breasts [pick("swell up to", "flourish into", "expand into", "burst forth into", "grow eagerly into", "amplify into")] a hefty [uppertext(size)]cm diameter bosom.")// taking both of your hands to hold!.") + size = "huge" diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 89251950ce..e0b56e3f8d 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -270,7 +270,7 @@ dna.species.handle_genitals(src) /mob/living/carbon/human/proc/Force_update_genitals(mob/living/carbon/human/H) //called in fermiChem - dna.species.handle_genitals(src, ignoreGenitalFlags = TRUE) + dna.species.handle_genitals(src) //dna.species.handle_breasts(src) //H.update_body() //species_traits = list(NOTRANSSTING,NOGENITALS) @@ -316,8 +316,7 @@ if(/obj/item/organ/genital/breasts) S = GLOB.breasts_shapes_list[G.shape] aroused_state = 0//Breasts don't have aroused_states, there's literally no difference in the spite. - if ((G.cached_size > 5) && (layertext == "BEHIND")) - size = "e" //I don't understand the BEHIND sprite honestly, so this is a way to just use the largest. + if(size == "huge") diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 1997df9955..b8b5be48f5 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -850,7 +850,7 @@ Buginess level: works as intended - except teleport makes sparks for some reason //M.alpha = 255//Reset addiction //antiGenetics = 255// DOesn't work for some reason? switch(current_cycle) - if(1)//Require a minimum + if(0)//Require a minimum origin = M if (G == null) G = new(get_turf(M.loc)) @@ -1072,6 +1072,8 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y (thats not written yet but thats the idea.) */ +//TODO rewrite code so that the low purity stuff is a seperate chem for clarity. + /datum/reagent/fermi/enthrall name = "MKUltra" id = "enthrall" @@ -1085,6 +1087,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y var/creatorGender var/creatorName var/mob/living/creator + pH = 10 /datum/reagent/fermi/enthrall/test name = "MKUltraTest" @@ -1305,6 +1308,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y overdose_threshold = 25 var/obj/item/clothing/head/hattip/hat DoNotSplit = TRUE + pH = 4 /datum/reagent/fermi/hatmium/on_mob_add(mob/living/carbon/human/M) @@ -1347,6 +1351,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y InverseChemVal = 0 var/obj/item/organ/tongue/nT DoNotSplit = TRUE + pH = 5 /datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M) @@ -1404,6 +1409,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y ImpureChem = "naninte_b_goneTox" //If you make an inpure chem, it stalls growth InverseChemVal = 0.25 InverseChem = "naninte_b_goneTox" //At really impure vols, it just becomes 100% inverse + pH = 9 /datum/reagent/fermi/naninte_b_gone/on_mob_life(mob/living/carbon/C) //var/component/nanites/N = M.GetComponent(/datum/component/nanites) @@ -1453,6 +1459,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y name = "Acid vapour" id = "fermiAcid" description = "Someone didn't do like an otter, and add acid to water." + pH = 0 /datum/reagent/fermi/fermiAcid/on_mob_life(mob/living/carbon/C, method) var/target = C.get_bodypart(BODY_ZONE_CHEST) @@ -1490,7 +1497,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y //data = list("Big bang" = 1, "please work" = 2) addProc = TRUE -/datum/reagent/fermi/fermiTest/on_new() +/datum/reagent/fermi/fermiTest/on_new(datum/reagents/holder) ..() if(LAZYLEN(holder.reagent_list) == 1) return diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index c16cd0e4cb..4f5c986707 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -72,7 +72,7 @@ id = "eigenstate" results = list("eigenstate" = 0.1) required_reagents = list("bluespace" = 0.1, "stable_plasma" = 0.1, "sugar" = 0.1) - mix_message = "zaps brightly into existance, diffusing the energy from the localised gravity well as light" + mix_message = "the reaction zaps suddenly!" //FermiChem vars: OptimalTempMin = 350 // Lower area of bell curve for determining heat based rate reactions OptimalTempMax = 500 // Upper end for above @@ -229,14 +229,14 @@ OptimalTempMin = 780 OptimalTempMax = 800 ExplodeTemp = 820 - OptimalpHMin = 1 - OptimalpHMax = 2 + OptimalpHMin = 12 + OptimalpHMax = 13 ReactpHLim = 2 //CatalystFact = 0 CurveSharpT = 0.5 CurveSharppH = 4 ThermicConstant = 20 - HIonRelease = 0.1 + HIonRelease = -0.1 RateUpLim = 5 FermiChem = TRUE FermiExplode = TRUE @@ -248,7 +248,7 @@ message_admins("On finish for enthral proc'd") var/datum/reagent/blood/B = locate(/datum/reagent/blood) in my_atom.reagents.reagent_list var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in my_atom.reagents.reagent_list - if(!B.data) + if(!B) var/list/seen = viewers(5, get_turf(my_atom)) for(var/mob/M in seen) to_chat(M, "The reaction splutters and fails to react.") diff --git a/modular_citadel/code/modules/reagents/objects/items.dm b/modular_citadel/code/modules/reagents/objects/items.dm index 1319048bc8..d07edaa9e1 100644 --- a/modular_citadel/code/modules/reagents/objects/items.dm +++ b/modular_citadel/code/modules/reagents/objects/items.dm @@ -20,6 +20,8 @@ numberOfPages-- playsound(user.loc, 'sound/items/poster_ripped.ogg', 50, 1) add_fingerprint(user) + if(numberOfPages == 0) + icon_state = "pHbookletEmpty" return else to_chat(user, "[src] is empty!") diff --git a/modular_citadel/icons/obj/FermiChem.dmi b/modular_citadel/icons/obj/FermiChem.dmi index 37da7f6aca27ec3b1983b161475e11aeb878c922..b11bf83f68cd5e22695c566f66f89427f4c606c4 100644 GIT binary patch literal 3898 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 IM6N<$f@JG9F8}}l literal 1877 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 JPDHLkV1ijS^Q!;= diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi index b2496f1fc1c3b9181ef7866ec23dedbd10c29ce1..c5bbbe3808eeb79cb02e3b24526697fcb11d0ffc 100644 GIT binary patch literal 3543 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