From e2c1eb1d7c504fe3054f1ba86bd0ac4f03b8477e Mon Sep 17 00:00:00 2001 From: Fermi Date: Sat, 25 May 2019 05:27:28 +0100 Subject: [PATCH] prebed fixes --- code/modules/mob/living/blood.dm | 19 ++++ code/modules/reagents/chemistry/holder.dm | 2 +- code/modules/surgery/organs/vocal_cords.dm | 9 +- .../code/datums/status_effects/chems.dm | 18 ++-- .../code/modules/arousal/organs/breasts.dm | 12 +-- .../code/modules/arousal/organs/genitals.dm | 15 +-- .../code/modules/arousal/organs/penis.dm | 57 ++++------- .../chemistry/reagents/fermi_reagents.dm | 92 ++++++++---------- .../reagents/chemistry/recipes/fermi.dm | 11 ++- .../icons/obj/genitals/breasts.dmi | Bin 593 -> 944 bytes modular_citadel/icons/obj/genitals/penis.dmi | Bin 1580 -> 2800 bytes .../icons/obj/genitals/penis_onmob.dmi | Bin 1341 -> 3880 bytes modular_citadel/icons/obj/genitals/vagina.dmi | Bin 405 -> 510 bytes .../icons/obj/genitals/vagina_onmob.dmi | Bin 644 -> 939 bytes 14 files changed, 107 insertions(+), 128 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index dcdbeb13ad..8acaa4e00c 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -300,3 +300,22 @@ var/obj/effect/decal/cleanable/oil/B = locate() in T.contents if(!B) B = new(T) + +//I think I had a plan, but it went out the window. +/mob/living/proc/IncreaseBloodVol(var/value) + blood_ratio += value + return + +/mob/living/proc/DecreaseBloodVol(var/value) + blood_ratio -= value + +/mob/living/proc/ResetBloodVol() + if(ishuman(src)) + if src.has_quirk(/datum/quirk/BloodPressure) + blood_ratio = 1.2 + blood_ratio = 1 + +/mob/living/proc/AdjustBloodVol(var/value) + if(blood_ratio == value) + return + blood_ratio = value diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 30219cc2c2..e9ef720616 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -886,7 +886,7 @@ im for (var/datum/reagent/reagentgas in reagent_list) R.add_reagent(reagentgas, amount/5) remove_reagent(reagentgas, amount/5) - s.set_up(R, CLAMP(amount/10, 0, 1), T) + s.set_up(R, CLAMP(amount/10, 0, 2), T) s.start() return FALSE diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index f333372283..aca74359fc 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -884,13 +884,12 @@ descmessage += " And yet, it feels good..!" E.enthrallTally += power_multiplier E.resistanceTally -= power_multiplier - E.cooldown += 1 */ else addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, L, "I've failed [E.master]..."), 5) + E.resistanceTally += power_multiplier + E.enthrallTally += power_multiplier E.cooldown += 1 - E.resistanceTally += power_multiplier - E.enthrallTally += power_multiplier SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "enthrallscold", /datum/mood_event/enthrallscold, descmessage) E.cooldown += 1 @@ -1126,6 +1125,7 @@ return else user.emote(user, 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'") + user.SetStun(1000)//Hands are handy, so you have to stay still H.SetStun(1000) if (E.mental_capacity >= 10) var/trigger = stripped_input(user, "Enter the trigger phrase", MAX_MESSAGE_LEN) @@ -1145,6 +1145,7 @@ to_chat(user, "Your pet looks at you confused, it seems they don't understand that effect!") else to_chat(user, "Your pet looks at you with a vacant blase expression, you don't think you can program anything else into them") + user.SetStun(0) H.SetStun(0) //CUSTOM OBJECTIVE @@ -1158,6 +1159,7 @@ return else user.emote(user, 1, "puts their hands upon [H.name]'s head and looks deep into their eyes, whispering something to them.'") + user.SetStun(1000)//So you can't run away! H.SetStun(1000) if (E.mental_capacity >= 250 || message == "objective") var/datum/objective/brainwashing/objective = stripped_input(user, "Add an objective to give your pet.", MAX_MESSAGE_LEN) @@ -1177,6 +1179,7 @@ //else if (E.mental_capacity >= 150) else to_chat(user, "Your pet looks at you with a vacant blasé expression, you don't think you can program anything else into them") + user.SetStun(0) H.SetStun(0) diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 19ee869c25..1e7d6696de 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -140,9 +140,8 @@ bloodCalc = 1+((round(P.length) - 21)/10) //effects how much blood you need (I didn' bother adding an arousal check because I'm spending too much time on this organ already.) if(!P) o.remove_movespeed_modifier("hugedick") - o.blood_ratio /= bloodCalc //If someone else uses blood_ratio, turn this into a multiplier(I should make a handler huh) + o.ResetBloodVol() owner.remove_status_effect(src) - message_admins("PElarge tick!") var/items = o.get_contents() for(var/obj/item/W in items) if(W == o.w_uniform || W == o.wear_suit) @@ -151,20 +150,19 @@ to_chat(owner, "Your enormous package is way to large to fit anything over!") switch(round(P.cached_length)) if(21) - if (P.prev_size > P.size) - to_chat(o, "Your rascally willy has become a more managable size, liberating your movements.") - o.remove_movespeed_modifier("hugedick") - o.blood_ratio /= bloodCalc + to_chat(o, "Your rascally willy has become a more managable size, liberating your movements.") + o.remove_movespeed_modifier("hugedick") + o.AdjustBloodVol(bloodCalc) if(22 to INFINITY) - if (!(P.prev_size == P.size)) - to_chat(o, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements!") + if(prob(2)) + to_chat(o, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements!") o.add_movespeed_modifier("hugedick", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc) - o.blood_ratio *= bloodCalc + o.AdjustBloodVol(bloodCalc) ..() /datum/status_effect/chem/PElarger/on_remove(mob/living/carbon/human/o) owner.remove_movespeed_modifier("hugedick") - o.blood_ratio /= bloodCalc + o.ResetBloodVol() /*////////////////////////////////////////// diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index b526312b1a..17eb332485 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -92,31 +92,25 @@ //var/mob/living/carbon/human/o = owner //var/obj/item/organ/genital/breasts/B = o.getorganslot("breasts") //message_admins("Breast size at start: [size], [cached_size], [owner]") - if(!isnum(cached_size)) - cached_size = breast_values[cached_size] if(cached_size < 0)//I don't actually know what round() does to negative numbers, so to be safe!!(Why does this runtime??) to_chat(owner, "You feel your breasts shrinking away from your body as your chest flattens out.") src.Remove(owner) switch(round(cached_size)) if(0) //If flatchested size = "flat" - if(statuscheck == TRUE) - message_admins("Attempting to remove.") + if(owner.has_status_effect(/datum/status_effect/chem/BElarger)) owner.remove_status_effect(/datum/status_effect/chem/BElarger) statuscheck = FALSE if(1 to 8) //If modest size size = breast_sizes[round(cached_size)] - if(statuscheck == TRUE) - message_admins("Attempting to remove.") + if(owner.has_status_effect(/datum/status_effect/chem/BElarger)) owner.remove_status_effect(/datum/status_effect/chem/BElarger) statuscheck = FALSE if(9 to 15) //If massive size = breast_sizes[round(cached_size)] - if(statuscheck == FALSE) - message_admins("Attempting to apply.") + if(!owner.has_status_effect(/datum/status_effect/chem/BElarger)) owner.apply_status_effect(/datum/status_effect/chem/BElarger) statuscheck = TRUE - if(16 to INFINITY) //if Rediculous size = cached_size //message_admins("1. [breast_values[size]] vs [breast_values[prev_size]] || [size] vs [prev_size]") diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 47fc332d91..4b54ea38f0 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -168,6 +168,8 @@ P.length = dna.features["cock_length"] P.girth_ratio = dna.features["cock_girth_ratio"] P.shape = dna.features["cock_shape"] + P.prev_size = P.length + P.cached_length = P.length P.update() /mob/living/carbon/human/proc/give_balls() @@ -205,6 +207,8 @@ else B.color = "#[dna.features["breasts_color"]]" B.size = dna.features["breasts_size"] + B.prev_size = B.size + B.cached_size = B.breast_values[B.size] B.shape = dna.features["breasts_shape"] B.fluid_id = dna.features["breasts_fluid"] B.update() @@ -271,17 +275,8 @@ //fermichem procs /mob/living/carbon/human/proc/Force_update_genitals(mob/living/carbon/human/H) //called in fermiChem - var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts") - - if (cached_size == null) //MOVE THIS TO FORCE UPDATE I have to do this because Pooj's latest commit broke everthing. I give up and I hate genitals. - prev_size = size - cached_size = breast_values[size] - if(!isnum(cached_size)) - cached_size = breast_values[cached_size] - dna.species.handle_genitals(src) + dna.species.handle_genitals(src)//should work. //dna.species.handle_breasts(src) - //H.update_body() -//species_traits = list(NOTRANSSTING,NOGENITALS) /mob/living/carbon/human/proc/emergent_genital_call() var/organCheck = FALSE diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index 409d27aace..fb5f7739f0 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -18,23 +18,14 @@ var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF var/list/dickflags = list() var/list/knotted_types = list("knotted", "barbed, knotted") - var/statuscheck = FALSE var/prev_size = 6 //really should be renamed to prev_length /obj/item/organ/genital/penis/Initialize() . = ..() - /* I hate genitals. - var/mob/living/carbon/human/o = owner - length = o.dna.features["cock_length"] //for whatever reason, this doesn't set up correctly. - prev_size = length - cached_length = length - */ + /* I hate genitals.*/ /obj/item/organ/genital/penis/update_size() var/mob/living/carbon/human/o = owner - if(!cached_length) - prev_size = length - cached_length = length if(cached_length < 0)//I don't actually know what round() does to negative numbers, so to be safe!! var/obj/item/organ/genital/penis/P = o.getorganslot("penis") to_chat(o, "You feel your tallywacker shrinking away from your body as your groin flattens out!") @@ -43,59 +34,41 @@ if(0 to 4) //If modest size length = cached_length size = 1 - if(statuscheck == TRUE) - //message_admins("Attempting to remove.") + if(owner.has_status_effect(/datum/status_effect/chem/PElarger)) o.remove_status_effect(/datum/status_effect/chem/PElarger) - statuscheck = FALSE if(5 to 10) //If modest size length = cached_length size = 2 - if(statuscheck == TRUE) - //message_admins("Attempting to remove.") + if(owner.has_status_effect(/datum/status_effect/chem/PElarger)) o.remove_status_effect(/datum/status_effect/chem/PElarger) - statuscheck = FALSE if(11 to 20) //If massive length = cached_length - size = 3 - if(statuscheck == FALSE) - //message_admins("Attempting to apply.") + size = 3 + if(owner.has_status_effect(/datum/status_effect/chem/PElarger)) o.remove_status_effect(/datum/status_effect/chem/PElarger) - statuscheck = TRUE - if(21 to 29) + if(21 to 29) //If massive and due for large effects length = cached_length size = 3 - if(statuscheck == FALSE) - //message_admins("Attempting to apply.") + if(!owner.has_status_effect(/datum/status_effect/chem/PElarger)) o.apply_status_effect(/datum/status_effect/chem/PElarger) - statuscheck = TRUE - if(30 to INFINITY) + if(30 to INFINITY) //If comical length = cached_length size = 4 //no new sprites for anything larger yet - if(statuscheck == FALSE) - //message_admins("Attempting to apply.") + if(!owner.has_status_effect(/datum/status_effect/chem/PElarger)) o.apply_status_effect(/datum/status_effect/chem/PElarger) - statuscheck = TRUE - //message_admins("Pinas size: [length], [cached_length], [o]") - //message_admins("2. size vs prev_size") + if (round(length) > round(prev_size)) to_chat(o, "Your [pick("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "Chase Redtail", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger")] [pick("swells up to", "flourishes into", "expands into", "bursts forth into", "grows eagerly into", "amplifys into")] a [uppertext(round(length))] inch penis.") else if (round(length) < round(prev_size)) to_chat(o, "Your [pick("phallus", "willy", "dick", "prick", "member", "tool", "gentleman's organ", "cock", "wang", "knob", "dong", "joystick", "pecker", "johnson", "Chase Redtail", "weenie", "tadger", "schlong", "thirsty ferret", "baloney pony", "schlanger")] [pick("shrinks down to", "decreases into", "diminishes into", "deflates into", "shrivels regretfully into", "contracts into")] a [uppertext(round(length))] inch penis.") prev_size = length icon_state = sanitize_text("penis_[shape]_[size]") - //update_body() - //P.update_icon() //Either of these don't work, why??? girth = (length * girth_ratio)//Is it just me or is this ludicous, why not make it exponentially decay? - //var/mob/living/carbon/human/H = owner - //H.update_genitals() - //owner.update_genitals() //I have no idea on how to update sprites and I hate it /obj/item/organ/genital/penis/update_appearance() - //var/mob/living/carbon/o = owner - var/string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]" - icon_state = sanitize_text(string) + var/string var/lowershape = lowertext(shape) desc = "You see [aroused_state ? "an erect" : "a flaccid"] [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[round(length, 0.25) != 1 ? "es" : ""] long and [round(girth, 0.25)] inch[round(girth, 0.25) != 1 ? "es" : ""] in girth." @@ -104,9 +77,15 @@ if(ishuman(owner)) // Check before recasting type, although someone fucked up if you're not human AND have use_skintones somehow... var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need. color = "#[skintone2hex(H.skin_tone)]" + string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]-s" else color = "#[owner.dna.features["cock_color"]]" - //owner.update_body() + string = "penis_[GLOB.cock_shapes_icons[shape]]_[size]" + if(ishuman(owner)) + var/mob/living/carbon/human/H = owner + H.update_genitals() + + icon_state = sanitize_text(string) /obj/item/organ/genital/penis/update_link() if(owner) 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 249190cfd7..759232327e 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -572,7 +572,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING ZI.real_name = M.real_name//Give your offspring a big old kiss. ZI.name = M.real_name ZI.desc = "[M]'s clone, gone horribly wrong." - ZI.zombiejob = null + ZI.zombiejob = FALSE //ZI.updateappearance(mutcolor_update=1) M.reagents.remove_reagent(src.id, 20) else//easier to deal with @@ -1086,17 +1086,14 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y color = "#2C051A" // rgb: , 0, 255 taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses" overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please. - InverseChemVal = 0.5 - InverseChem = "enthrallInverse" //At really impure vols, it just becomes 100% inverse - //DoNotSplit = TRUE + DoNotSplit = TRUE data = list("creatorID" = null, "creatorGender" = null, "creatorName" = null) var/creatorID //ckey var/creatorGender var/creatorName var/mob/living/creator pH = 10 - DoNotSplit = TRUE - //OnMobMergeCheck = TRUE //Procs on_mob_add when merging into a human + OnMobMergeCheck = TRUE //Procs on_mob_add when merging into a human /datum/reagent/fermi/enthrall/test name = "MKUltraTest" @@ -1111,6 +1108,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y creatorGender = "Mistress" creatorName = "Fermis Yakumo" purity = 1 + DoNotSplit = TRUE /datum/reagent/fermi/enthrall/test/on_new() id = "enthrall" @@ -1166,6 +1164,29 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y /datum/reagent/fermi/enthrall/on_mob_life(mob/living/carbon/M) + if(purity < 0.5)//DO NOT SPLIT INTO DIFFERENT CHEM: This relies on DoNotSplit - has to be done this way. + if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. + if(M.has_status_effect(STATUS_EFFECT_INLOVE)) + return + var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers + for(var/victim in seen) + if((victim == /mob/living/simple_animal/pet/) || (victim == M)) + seen = seen - victim + if(!seen) + return + M.reagents.remove_reagent(src.id, src.volume) + FallInLove(M, pick(seen)) + return + else // If someone else drinks it, the creator falls in love with them! + var/mob/living/carbon/C = get_mob_by_key(creatorID) + if(C.has_status_effect(STATUS_EFFECT_INLOVE)) + return + if(C in viewers(7, get_turf(M))) + M.reagents.remove_reagent(src.id, src.volume) + FallInLove(C, M) + return + if(volume < 1)//You don't get to escape that easily + FallInLove(pick(GLOB.player_list), M) if (M.ckey == creatorID && creatorName == M.real_name)//If you yourself drink it, it does nothing. return if(!M.client) @@ -1180,7 +1201,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y message_admins("No enthrall status found in [M]!") else E.enthrallTally += 1 - if(prob(50)) + if(prob(25)) M.adjustBrainLoss(0.1)//Honestly this could be removed, in testing it made everyone brain damaged, but on the other hand, we were chugging tons of it. ..() @@ -1204,8 +1225,8 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y M.add_trait(TRAIT_PACIFISM, "MKUltra") var/datum/status_effect/chem/enthrall/E if (!M.has_status_effect(/datum/status_effect/chem/enthrall)) - E = M.has_status_effect(/datum/status_effect/chem/enthrall) M.apply_status_effect(/datum/status_effect/chem/enthrall) + E = M.has_status_effect(/datum/status_effect/chem/enthrall) E.enthrallID = creatorID E.enthrallGender = creatorGender E.master = creator @@ -1222,39 +1243,6 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y M.adjustBrainLoss(0.1)//should be 15 in total ..() -/datum/reagent/fermi/enthrall/Inverse - name = "MKUltra" - id = "enthrall" - description = "A forbidden deep red mixture that overwhelms a foreign body with waves of pleasure, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it." - color = "#2C051A" // rgb: , 0, 255 - taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses" - DoNotSplit = TRUE - -/datum/reagent/fermi/enthrall/Inverse/on_mob_life(mob/living/carbon/M) - if(purity < 0.5)//Placeholder for now. I'd like to get this done. - if (M.ckey == creatorID && creatorName == M.real_name)//If the creator drinks it, they fall in love randomly. If someone else drinks it, the creator falls in love with them. - if(M.has_status_effect(STATUS_EFFECT_INLOVE)) - return - var/list/seen = viewers(7, get_turf(M))//Sound and sight checkers - for(var/victim in seen) - if((victim == /mob/living/simple_animal/pet/) || (victim == M)) - seen = seen - victim - if(!seen) - return - M.reagents.remove_reagent(src.id, src.volume) - FallInLove(M, pick(seen)) - return - else // If someone else drinks it, the creator falls in love with them! - var/mob/living/carbon/C = get_mob_by_key(creatorID) - if(C.has_status_effect(STATUS_EFFECT_INLOVE)) - return - if(C in viewers(7, get_turf(M))) - M.reagents.remove_reagent(src.id, src.volume) - FallInLove(C, M) - return - if(volume < 1)//You don't get to escape that easily - FallInLove(pick(GLOB.player_list), M) - //Creates a gas cloud when the reaction blows up, causing everyone in it to fall in love with someone/something while it's in their system. /datum/reagent/fermi/enthrallExplo//Created in a gas cloud when it explodes name = "MKUltra" @@ -1291,7 +1279,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y if(prob(10)) M.Stun(10) M.emote("whimper")//does this exist? - to_chat(M, "You're overcome with a desire to see [love].") + to_chat(M, " You're overcome with a desire to see [love].") M.adjustBrainLoss(5) ..() @@ -1299,6 +1287,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y M.remove_status_effect(STATUS_EFFECT_INLOVE) SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "InLove") SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "MissingLove") + to_chat(M, "Your feelings for [love] suddenly vanish!") ..() /datum/reagent/fermi/proc/FallInLove(mob/living/carbon/Lover, mob/living/carbon/Love) @@ -1445,24 +1434,24 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y //var/component/nanites/N = M.GetComponent(/datum/component/nanites) GET_COMPONENT_FROM(N, /datum/component/nanites, C) if(isnull(N)) - return + return ..() N.regen_rate = -0.25//This seems really high ..() /datum/reagent/fermi/naninte_b_gone/overdose_process(mob/living/carbon/C) //var/component/nanites/N = M.GetComponent(/datum/component/nanites) GET_COMPONENT_FROM(N, /datum/component/nanites, C) - if(isnull(N)) - return - N.regen_rate = -1//12.5 seems crazy high? if(prob(20)) to_chat(C, "The residual voltage from the nanites causes you to seize up!") C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE) if(prob(10)) //empulse((get_turf(C)), 3, 2)//So the nanites randomize - var/T = get_turf(C) + var/atom/T = C T.emp_act(EMP_HEAVY) to_chat(C, "The nanintes short circuit within your system!") + if(isnull(N)) + return ..() + N.regen_rate = -1//12.5 seems crazy high? ..() //Unobtainable, used if SDGF is impure but not too impure @@ -1479,7 +1468,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y C.electrocute_act(10, (get_turf(C)), 1, FALSE, FALSE, FALSE, TRUE) if(prob(10)) //empulse((get_turf(C)), 2, 1, 1)//So the nanites randomize - var/T = get_turf(C) + var/atom/T = C T.emp_act(EMP_HEAVY) to_chat(C, "You feel your hair stand on end as you glow brightly for a moment!") ..() @@ -1565,6 +1554,7 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y name = ""//defined on setup id = "fermiTox" description = "You should be really careful with this...! Also, how did you get this?" + data = "merge" /datum/reagent/fermi/fermiTox/on_mob_life(mob/living/carbon/C, method) if(C.dna && istype(C.dna.species, /datum/species/jelly)) @@ -1578,12 +1568,11 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y id = "fermiABuffer" description = "This reagent will consume itself and move the pH of a beaker towards 3 when added to another." taste_description = "an acidy sort of taste, blech." + color = "#fbc314" addProc = FALSE pH = 3 /datum/reagent/fermi/fermiABuffer/on_new() - if(addProc == FALSE)//This is so it doesn't react when made. - addProc = TRUE if(LAZYLEN(holder.reagent_list) == 1) return pH = ((holder.pH * holder.total_volume)+(3 * src.volume))/(holder.total_volume + src.volume) @@ -1595,12 +1584,11 @@ And as stated earlier, this chem is hard to make, and is punishing on failure. Y id = "fermiBBuffer" description = "This reagent will consume itself and move the pH of a beaker towards 11 when added to another." taste_description = "an soapy sort of taste, blech." + color = "#3853a4" addProc = FALSE pH = 11 /datum/reagent/fermi/fermiBBuffer/on_new() - if(addProc == FALSE)//This is so it doesn't react when made. - addProc = TRUE if(LAZYLEN(holder.reagent_list) == 1) return pH = ((holder.pH * holder.total_volume)+(11 * src.volume))/(holder.total_volume + src.volume) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index 89379617b3..b6d888ef88 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -14,7 +14,6 @@ //Called when temperature is above a certain threshold //....Is this too much? /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??? - message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot], containing [my_atom.reagents.reagent_list]") if (Exploding == TRUE) return if(!pH)//Dunno how things got here without a pH. @@ -22,7 +21,7 @@ var/ImpureTot = 0 var/pHmod = 1 var/turf/T = get_turf(my_atom) - + message_admins("Fermi explosion at [T], with a temperature of [temp], pH of [pH], Impurity tot of [ImpureTot], containing [my_atom.reagents.reagent_list]") var/datum/reagents/R = new/datum/reagents(3000)//Hey, just in case. var/datum/effect_system/smoke_spread/chem/s = new() if(pH < 4) //if acidic, make acid spray @@ -377,7 +376,9 @@ RateUpLim = 20 FermiChem = TRUE -//datum/chemical_reaction/fermi/fermiABuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this +/datum/chemical_reaction/fermi/fermiABuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this + var/datum/reagent/fermi/fermiABuffer/Fa = locate(/datum/reagent/fermi/fermiABuffer) in my_atom.reagents.reagent_list + Fa.data = "merge" /datum/chemical_reaction/fermi/fermiBBuffer//done test name = "Ethyl Ethanoate buffer" @@ -400,4 +401,6 @@ RateUpLim = 20 FermiChem = TRUE -///datum/chemical_reaction/fermi/fermiBBuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this +/datum/chemical_reaction/fermi/fermiBBuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this + var/datum/reagent/fermi/fermiBBuffer/Fb = locate(/datum/reagent/fermi/fermiBBuffer) in my_atom.reagents.reagent_list + Fb.data = "merge" diff --git a/modular_citadel/icons/obj/genitals/breasts.dmi b/modular_citadel/icons/obj/genitals/breasts.dmi index c02a230bdb42164dec3bd530e8d4be97c977500b..86eac3196a101aa4f626178d89e5bd54382b67e0 100644 GIT binary patch delta 835 zcmV-J1HAmv1h5BRiBL{Q4GJ0x0000DNk~Le0001h0001h1Oos705K4J_y7O^Ay7e<}?fd3H8OA7!100DGTPE!Ct=GbNc z005eiQ+t2JD%T}7P)OB~LaK&jQZ*!zsv!}#24w|TKNoNs1OUuy!lgbAFDU>30+&fd zK~!jg?N~8x<1i4Uqz{+^@&K;lz}E#L@&H$|3D3a`sHy2 zc5v)qLr62O&}0G#p=APcX#5TcS|;e?2n61PgZe)JLF0QQ&>gS@I-r;R%5+QE$z&S> z6Ug`k1Y!T}{}u4VdJF#j;|FfR@DBZ9+CsNBcxVW(jtHKSz<*d%8@9NIfmUFTf%dQ8 zkRE>r2p@ygaQHSGk-b^)nc$85t=*};F{(ZaLs2JrK}^wMgHAgd=_TVhh%C)6sgC!kFcwika0 zvU&p95K$L*Kyb01KsK%T1qisF!1+KIks$Hy?AtT1Cyeq5D;zgQ+`a;S+2H%1>IuW= zO!hkw40D7AswWIH4j5+IavgwsNc9BB2lTCeFrV@Kyr%(FPuPH*>xS63_L;zXkgfRu z4A6#|4+%WqvwFga1Na;!fArvb!nIp`U`!LjfaQ8Z1`T1xDVFOAIbuy&Dk>`eCER-_ zWf@5+vW%n3ummmhWOzZLIk5_zRwCkDRG^Fed;2 N002ovPDHLkV1k*Xh&ccN delta 482 zcmV<80UiFZ2hjvmiBL{Q4GJ0x0000DNk~Le0001B0001B1Oos701&on3jhEB6;Mo6 zMgM^RzrVl#|Nq+B+VJr3va+)OfdAnj!$<%C00DGTPE!Ct=GbNc004%OUwePJlq)N^ z`niAu834!GYk1y2Zsh;~0a!^yK~z|U?N`gOgD?!VT>0V_1XAq6C+0Q#@y*>KSZ zq{rm&X5M&j)=EMK&2AFHzzsy0?(qqWS)q7DELMT!lMILv6yMJHoLIo*(^9)78Nej&v*bU-{%Jg{u%CWd}7)g zd<#r2Y`P{Il1J{3Qr~=;F!-Its4+p$FJNyPg~V5cGF$AAw~=ZxtiX zFFQj5oZTE482Dp+?LZ#9zd#a7|NRFD{db`B|2G9fO}&YP{(DgR??LLnkMY}j;A{K< YNMJ$^4oFaK00000Nks-uM6N<$f}2m-lK=n! diff --git a/modular_citadel/icons/obj/genitals/penis.dmi b/modular_citadel/icons/obj/genitals/penis.dmi index cb9ce6535f5655efc30d2312572c129073da526b..e33d3ad24c00026a30122c2ab53aa92eaa84613a 100644 GIT binary patch delta 2799 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 delta 1553 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 literal 1341 zcmXw1c~sI_82vexG#X|$)g&TKX{FgNiROkLVXQ$d8?j?a zIVCzMWSI*d1!C06Q(1{(DT1jLkqZHeATUU0{&?qo=f3aVd%yc$X>gz~*x14t006Mx zG4D_SFc9h%YmK1}`TbOVg>JJ7J`sNO;K74ht(ME>PESvZM52a<28l$X1K$F`c>q|4 z9J{aUG{^`I3nu!%4LZKH%}dg@VS$A93L_WI;3HN_cK<&cmcO9CSd-)*pS}-hRuo^SA6bJ~O9%NrF#A_nP{-Uax>urtSF2dCyG5Q^O7p@VKVT^VW^C znQI1aj?;ElJdnM*w<(u;bJO>oCvA6|r`3d(*&v*@+a7l)EgP$hG>5kDVq@D0Bb>P6 zbl1v-Eszev%#JX^${}hv(aK5}K2S(q2&l%AulB1PdCV?+P!!u{bNP}RPtBr;^M$J& z05Ja0*+Z+MYNJs_ERmO;m620^>0zuiPgjlDtg{?j5J|i$B4Fg%AN#bNe19_+1+*4j zki(u+4w+o$&DZ{$#RKVy&Jb&P_4@`fTo70SEaswBiJ8nKch|(LxhjQMg+eW9_eM;> zYX)Cj^OAzN{Uhbg{$?GIBqCW+lu)Q6!{ds@1O|vJHeci8Jf18w)YBF=;s+Cb1@q8z z9&YqmD{|GxVG-{0M~@=b7%WWUaFM2A@nTePc7BLP7=L~l7X+{7r|M?$l(9JAHdRUK zV=$pSh{ELX2R4j*Zq_^9#gJr6UMf`G{S)w)ro2ThKbPr@q@zjO%?{nR!sM43_aI>y z{M66|Ced-g7fgU8Nkc#ssU)T~uS4JjOLkF0HMaJOI9*037fts3P!FPba|&s%^+50h^{4t?h#JDCoYXhP}C`mlPSOx_^lKF-EI*gpVu{ zbQEd3L!RsnQv7=1wcHWWChXr+psc=1z!5V^9vzb@Dp1B0m>HR^d8$V1g!lV}XLWDlK%Z=pWA?aQ@$7Cch@Kkz-w#mMYR~J|gtcm9Gb?fumO^JT41eWe_&BPVKF1oC4~r?ihJ!uHR|w!$5Y*9yr!FOv w-YdW62|gR>{R)p^v~%w4-vpU30O&w!firgGuHyL8>#L`JM+3cSM<1KK~C4FCWD diff --git a/modular_citadel/icons/obj/genitals/vagina.dmi b/modular_citadel/icons/obj/genitals/vagina.dmi index a57392868f02552195d305b7ba9a51dab09d6df4..00891888a44047465c86f73ba5b441a0f56e884a 100644 GIT binary patch delta 403 zcmV;E0c`%21O5Y$7g0b20{{R3SVwH_0000gP)t-s{{Vp3*Vpv)^yS9O`R?+wv$NW? zvVwww&vsw`0DzQ3Mf$Fs;DvDcn}{?j0$Kn700DGTPE!Ct=GbNc004H8Tw#BsDbp<` zsIWXgHwl*_Wd&D17qBYD?z- zi;=}r4A^gB|6m|D@C1U$gLj9Nvg!r=(~Ecm&0XBioh`=3LLtBI$A0-{GD6gOXCm1l zy)hV5AT^S7jl%$#8=}xlqzZp!QljXhCW=@Y@D*{68Br*iN?*|%>Jd=@D5E?@fjKUS z0-V5~Q8)$qYe%4FY5Un*m>0V5uL%-n9^e#NK>!6m;P)v`GC_eh>C=pSFXG_6iNB<~ zC24PH5hMzFD+KC%Q>Hr1US@DfO>*FZP5=YZXL^?&0O x+dsQz72DEH;r`MA{HYUn#Dv>{Jz|~D$pc|*Vpv) z^s}?Gf`Wq2c3(TKd6EDC00DGTPE!Ct=GbNc00454XkmZDm6hk`CgD<~tl;YB0=66g z84@JaUvBhs0001|Nkl zlBh<6hNfATrXq|G7696U8j_(v15gy82Q_PGYI%47+>yXQWJL2uXjo`DTmb`?h)NAj v3&j*gQ4oMvo{fM!(2@A%fhq_o814W7@c|x3X&02z00000NkvXXu0mjfn?rKP diff --git a/modular_citadel/icons/obj/genitals/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi index 41bc818719b8e982409fbdcac322fc6990316193..c22c12ded338f74567d6521f524ebb9a64d1ae81 100644 GIT binary patch delta 917 zcmV;G18V$)1*-=oiBL{Q4GJ0x0000DNk~Le0004i0004C1Oos706?v?4gdfEEs-T9 zf91x@+O)Fj+1&Z=@@M%DXaE2J0d!JMQvg8b*k%9#0PlKKSad{Xb7OL8aCB*JZU6vy zoUN2k3xY5h#?S6k482yU{ke4sD>`Hl-Q}fC9q5W}8Giew9xNnbD|UI`!Sn3*?ius& zX1hPcI659sMTKNHj@NiG^O5spMCH1fe}~A)Da&%zHBy11x^yeZ7>6W(l)#f9@sr*8 z6klBA5GG{ff}B)9Nt-(ODhtMBE4@n#sC60olV!WY$&ev~JL8!-grZ!*wV*#KM<-bH z6Lk2?ffZ@26qqyg!cm0q17R2hFi{&HK9!cizX|^ly|%LqUn}k7x4yLWAp|8he@b}= zVov%wrRh`k@HURx&*24qM>)nSH#&^~00J>dL_t(|obBB|ZWB=u2jGPT3Bg9f;vzP_ z2o*IQ*P*1Oq@;I{wzm(#1-JvGik&4pNq#8Lt9)OYtn}u+dHcu3%*N?D0001B(Vi_l zzI)y{{{1?f000000DuMRTPKj(e}v`j=KX=RKHs{(5PQ)&0Ya`I00000JW0*_3u%46 zb$=nQ&!-z`-X8!O)8YXD005q-*59p?uAi3Y`+S0E3-S8hW*dd~t1|zS6mO1Ruh!)R zM+2tY?N@KB`0cF+SCiK#;3UCG2Ag-$`ggg9=M$)Jf%*74fg(PB2JSavf0Azf2o)Ph zwf+S7)h#q%pHJWaPdCuMyq!wx z`%5tU3;+NC000fV`uo#XTA%;=<-erya34Qp@!!8?@o%#5d;_n;^?kn(000000FN&& zucs5F@s~fs35LcA{7g3he*gdg0057#b$=jkaHRc#i^lQ(wdvxyf;8q91ONa4c!-O* zx|>#~Q@?+O6YR$6K9Bw^03*-GpwC;#aonJ-(000262;;)n&r5@02E!0dkk^WQP4^6+c_wA9jban^*J)>MMA%z&}nw7GK}N#rpLI rW^bW5fpq=mpMrNVUjM2c0-TLMx%@^czS6x%00000NkvXXu0mjf=FzFI delta 620 zcmV-y0+ao#2ZRMBiBL{Q4GJ0x0000DNk~Le0003X000311Oos70O0|)g#Z8mA(15| ze@(M1g#Z8m0d!JMQvg8b*k%9#0Lgk(Sad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1 zGke*nOnU_wwBT7>9N)nTEQYq4j*9RsDA3&UMieXd=$f%M;(%pd2h}Q{5C{DnP zh{VjIO2U>aE4cc(fYS*8^OK~M8GP|#0003zNkld%7{M(gkT-~<2w z005gxts9sdg7HZ-Ps&8|oM@i3xr^2f00000Otd~Q!)^;rYqJ+y2@cKxv}_zQ1*0ssJDZ}#