diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index b9c822bfcb..551e01c3ef 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -53,24 +53,24 @@ //Effects of bloodloss var/word = pick("dizzy","woozy","faint") - switch(blood_volume) - if((BLOOD_VOLUME_OKAY * blood_ratio) to (BLOOD_VOLUME_SAFE * blood_ratio)) - if(prob(5)) - to_chat(src, "You feel [word].") - adjustOxyLoss(round(((BLOOD_VOLUME_NORMAL * blood_ratio) - blood_volume) * 0.01, 1)) - if((BLOOD_VOLUME_BAD * blood_ratio) to (BLOOD_VOLUME_OKAY*blood_ratio)) - adjustOxyLoss(round(((BLOOD_VOLUME_NORMAL * blood_ratio) - blood_volume) * 0.02, 1)) - if(prob(5)) - blur_eyes(6) - to_chat(src, "You feel very [word].") - if((BLOOD_VOLUME_SURVIVE * blood_ratio) to (BLOOD_VOLUME_BAD * blood_ratio)) - adjustOxyLoss(5) - if(prob(15)) - Unconscious(rand(20,60)) - to_chat(src, "You feel extremely [word].") - if(-INFINITY to (BLOOD_VOLUME_SURVIVE * blood_ratio)) - if(!has_trait(TRAIT_NODEATH)) - death() + //switch(blood_volume) Used to be a switch statement; now it uses ifs (so blood ratio can work.) Check my logic please. + if(((BLOOD_VOLUME_OKAY * blood_ratio) < blood_volume) && (blood_volume <= (BLOOD_VOLUME_SAFE * blood_ratio))) + if(prob(5)) + to_chat(src, "You feel [word].") + adjustOxyLoss(round(((BLOOD_VOLUME_NORMAL * blood_ratio) - blood_volume) * 0.01, 1)) + else if(((BLOOD_VOLUME_BAD * blood_ratio) < blood_volume) && (blood_volume <=(BLOOD_VOLUME_OKAY*blood_ratio))) + adjustOxyLoss(round(((BLOOD_VOLUME_NORMAL * blood_ratio) - blood_volume) * 0.02, 1)) + if(prob(5)) + blur_eyes(6) + to_chat(src, "You feel very [word].") + else if( ((BLOOD_VOLUME_SURVIVE * blood_ratio) < blood_volume) && (blood_volume <= (BLOOD_VOLUME_BAD * blood_ratio))) + adjustOxyLoss(5) + if(prob(15)) + Unconscious(rand(20,60)) + to_chat(src, "You feel extremely [word].") + else if((-INFINITY < blood_volume) && (blood_volume <= (BLOOD_VOLUME_SURVIVE * blood_ratio))) + if(!has_trait(TRAIT_NODEATH)) + death() var/temp_bleed = 0 //Bleeding out @@ -309,12 +309,23 @@ /mob/living/proc/DecreaseBloodVol(var/value) blood_ratio -= value +//This is a terrible way of handling it. /mob/living/proc/ResetBloodVol() - if(ishuman(src) && src.has_trait(TRAIT_HIGH_BLOOD)) - blood_ratio = 1.2 + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if (src.has_trait(TRAIT_HIGH_BLOOD)) + blood_ratio = 1.2 + H.handle_blood() + return + blood_ratio = 1 + H.handle_blood() + return blood_ratio = 1 /mob/living/proc/AdjustBloodVol(var/value) if(blood_ratio == value) return blood_ratio = value + if(ishuman(src)) + var/mob/living/carbon/human/H = src + H.handle_blood() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index e9ef720616..96e8c5fa1b 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -353,7 +353,8 @@ im var/iconhtml = icon2html(A, seen) for(var/mob/M in seen) to_chat(M, "[iconhtml] \The [my_atom]'s melts from the temperature!") - playsound(get_turf(A), 'sound/effects/bubbles.ogg', 80, 1) + playsound(get_turf(A), 'sound/FermiChem/heatmelt.ogg', 80, 1) + qdel(A) return else if(istype(A, /obj/item/reagent_containers/glass) && ((pH < 0.5) || (pH > 13.5)))//maybe make it higher? Though..Hmm! @@ -361,7 +362,7 @@ im var/iconhtml = icon2html(A, seen) for(var/mob/M in seen) to_chat(M, "[iconhtml] \The [my_atom]'s melts from the extreme pH!") - playsound(get_turf(A), 'sound/effects/bubbles.ogg', 80, 1) + playsound(get_turf(A), 'sound/FermiChem/acidmelt.ogg', 80, 1) qdel(A) return diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 1aba4c5a95..73b221866d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -167,12 +167,12 @@ /obj/item/reagent_containers/glass/beaker/plastic name = "x-large beaker" - desc = "An extra-large beaker. Can hold up to 150 units." + desc = "An extra-large beaker. Can hold up to 150 units. Is able to resist acid and alkaline solutions, but melts at 444K" icon_state = "beakerwhite" materials = list(MAT_GLASS=2500, MAT_PLASTIC=3000) volume = 150 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,60,120,150) + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,150) /obj/item/reagent_containers/glass/beaker/plastic/update_icon() icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states @@ -186,7 +186,7 @@ materials = list(MAT_GLASS=2500, MAT_PLASTIC=3000, MAT_GOLD=1000, MAT_TITANIUM=1000) volume = 200 amount_per_transfer_from_this = 10 - possible_transfer_amounts = list(5,10,15,20,25,30,60,120,150,200) + possible_transfer_amounts = list(5,10,15,20,25,30,50,100,200) /obj/item/reagent_containers/glass/beaker/noreact name = "cryostasis beaker" diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index a7d77be496..8008c4a422 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -121,15 +121,15 @@ message_admins("PElarge started!") var/mob/living/carbon/human/o = owner var/items = o.get_contents() - for(var/obj/item/W in items) - if(W == o.w_uniform || W == o.wear_suit) - o.dropItemToGround(W, TRUE) - playsound(o.loc, 'sound/items/poster_ripped.ogg', 50, 1) if(o.w_uniform || o.wear_suit) to_chat(o, "Your clothes give, ripping into peices under the strain of your swelling pecker! Unless you manage to reduce the size of your emancipated trouser snake, there's no way you're going to be able to put anything on over this girth..!") owner.visible_message("[o]'s schlong suddenly bursts forth, ripping their clothes off!'") else to_chat(o, "Your emancipated trouser snake is so ripe with girth, you seriously doubt you'll be able to fit any clothes over it.") + for(var/obj/item/W in items) + if(W == o.w_uniform || W == o.wear_suit) + o.dropItemToGround(W, TRUE) + playsound(o.loc, 'sound/items/poster_ripped.ogg', 50, 1) return ..() @@ -286,11 +286,8 @@ else else if (resistanceTally > 150) - enthrallTally *= 0.5 phase = -1 - resistanceTally = 0 to_chat(owner, "You break free of the influence in your mind, your thoughts suddenly turning lucid!") - to_chat(owner, "You're now free of [master]'s influence, and fully independant oncemore.'") owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. if(prob(10)) if(owner.lewd) @@ -311,6 +308,7 @@ enthrallTally *= 0.5 phase -= 1 resistanceTally = 0 + resistGrowth = 0 to_chat(owner, "You manage to shake some of the effects from your addled mind, however you can still feel yourself drawn towards [master].") //owner.remove_status_effect(src) //If resisted in phase 1, effect is removed. Not at the moment, if(prob(10)) @@ -321,6 +319,7 @@ enthrallTally = 0 phase -= 1 resistanceTally = 0 + resistGrowth = 0 to_chat(owner, "The separation from [(owner.lewd?"your [enthrallGender]":"[master]")] sparks a small flame of resistance in yourself, as your mind slowly starts to return to normal.") owner.remove_trait(TRAIT_PACIFISM, "MKUltra") if(prob(2)) @@ -334,6 +333,7 @@ to_chat(owner, "Your mind starts to heal, fixing the damage caused by the massive ammounts of chem injected into your system earlier, .") M.slurring = 0 M.confused = 0 + resistGrowth = 0 else return//If you break the mind of someone, you can't use status effects on them. @@ -521,6 +521,7 @@ redirect_component = null UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) owner.remove_trait(TRAIT_PACIFISM, "MKUltra") + to_chat(owner, "You're now free of [master]'s influence, and fully independant oncemore!'") //UnregisterSignal(owner, COMSIG_GLOB_LIVING_SAY_SPECIAL) //Should still make custom commands work after freedom, need to check. /* @@ -643,7 +644,7 @@ return else deltaResist = 2 + resistGrowth - resistGrowth += 0.1 + resistGrowth += 0.05 //distance modifer switch(DistApart) diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 4b54ea38f0..dddbda5d6f 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -284,8 +284,13 @@ if(istype(O, /obj/item/organ/genital)) organCheck = TRUE if (organCheck == FALSE) - dna.features["genitals_use_skintone"] = TRUE - dna.species.use_skintones = TRUE + if(ishuman(src)) + dna.features["genitals_use_skintone"] = TRUE + dna.species.use_skintones = TRUE + return + //So people who haven't set stuff up don't get rainbow surprises. + dna.features["cock_color"] = "#[dna.features["mcolor"]]" + dna.features["breasts_color"] = "#[dna.features["mcolor"]]" return /datum/species/proc/handle_genitals(mob/living/carbon/human/H) 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 759232327e..0a1e32eda7 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -630,6 +630,20 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING /datum/reagent/fermi/BElarger/on_mob_add(mob/living/carbon/M) . = ..() + if(!ishuman(M)) //The monkey clause + if(volume >= 10) + var/turf/T = get_turf(M) + var/obj/item/organ/genital/breasts/B = new /obj/item/organ/genital/breasts(T) + var/list/seen = viewers(8, T) + for(var/mob/S in seen) + to_chat(S, "A pair of breasts suddenly fly out of the [M]!") + //var/turf/T2 = pick(turf in view(5, M)) + var/T2 = get_random_station_turf() + M.adjustBruteLoss(5) + M.Knockdown(50) + B.throw_at(T2, 8, 1) + M.reagents.remove_reagent(src.id, 1000) + return var/mob/living/carbon/human/H = M H.genital_override = TRUE var/obj/item/organ/genital/breasts/B = H.getorganslot("breasts") @@ -637,13 +651,14 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING H.emergent_genital_call() message_admins("No breasts found on init!") return - var/sizeConv = list("a" = 1, "b" = 2, "c" = 3, "d" = 4, "e" = 5) B.prev_size = B.size B.cached_size = sizeConv[B.size] message_admins("init B size: [B.size], prev: [B.prev_size], cache = [B.cached_size], raw: [sizeConv[B.size]]") //if this runtimes it's cause someone's breasts are too big! /datum/reagent/fermi/BElarger/on_mob_life(mob/living/carbon/M) //Increases breast size + if(!ishuman(M))//Just in case + return var/mob/living/carbon/human/H = M var/obj/item/organ/genital/breasts/B = M.getorganslot("breasts") if(!B) //If they don't have breasts, give them breasts. @@ -742,6 +757,19 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING /datum/reagent/fermi/PElarger/on_mob_add(mob/living/carbon/M) . = ..() + if(!ishuman(M)) //Just monkeying around. + if(volume >= 10) + var/turf/T = get_turf(M) + var/obj/item/organ/genital/penis/P = new /obj/item/organ/genital/penis(T) + var/list/seen = viewers(8, T) + for(var/mob/S in seen) + to_chat(S, "A penis suddenly flies out of the [M]!") + var/T2 = get_random_station_turf() + M.adjustBruteLoss(5) + M.Knockdown(50) + P.throw_at(T2, 8, 1) + M.reagents.remove_reagent(src.id, 1000) + return var/mob/living/carbon/human/H = M H.genital_override = TRUE var/obj/item/organ/genital/penis/P = M.getorganslot("penis") @@ -754,6 +782,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING message_admins("init P len chem: [P.length], prev: [P.prev_size], cache = [P.cached_length]") /datum/reagent/fermi/PElarger/on_mob_life(mob/living/carbon/M) //Increases penis size, 5u = +1 inch. + if(!ishuman(M)) + return var/mob/living/carbon/human/H = M var/obj/item/organ/genital/penis/P = M.getorganslot("penis") if(!P) diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index b6d888ef88..f9655777c7 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -85,7 +85,7 @@ CurveSharppH = 2 // How sharp the pH exponential curve is (to the power of value) ThermicConstant = 5 //Temperature change per 1u produced HIonRelease = -0.1 //pH change per 1u reaction - RateUpLim = 5.5 //Optimal/max rate possible if all conditions are perfect + RateUpLim = 55 //Optimal/max rate possible if all conditions are perfect (NEEDS TO BE A MULTIPLE OF 10 IF RESULTS IS DOWN BY A FACTOR OF 10) FermiChem = TRUE//If the chemical uses the Fermichem reaction mechanics FermiExplode = FALSE //If the chemical explodes in a special way @@ -115,7 +115,7 @@ CurveSharppH = 4 // How sharp the pH exponential curve is (to the power of value) ThermicConstant = -5 // Temperature change per 1u produced HIonRelease = 0.05 // pH change per 1u reaction - RateUpLim = 5 // Optimal/max rate possible if all conditions are perfect + RateUpLim = 20 // Optimal/max rate possible if all conditions are perfect FermiChem = TRUE // If the chemical uses the Fermichem reaction mechanics FermiExplode = TRUE // If the chemical explodes in a special way PurityMin = 0.25 @@ -151,7 +151,7 @@ CurveSharppH = 2 ThermicConstant = 1 HIonRelease = 0.5 - RateUpLim = 5 + RateUpLim = 50 FermiChem = TRUE FermiExplode = TRUE PurityMin = 0.1 @@ -183,7 +183,7 @@ CurveSharppH = 2 ThermicConstant = 1 HIonRelease = -0.5 - RateUpLim = 5 + RateUpLim = 50 FermiChem = TRUE FermiExplode = TRUE PurityMin = 0.1 @@ -215,7 +215,7 @@ CurveSharppH = 1 ThermicConstant = 20 HIonRelease = -0.5 - RateUpLim = 10 + RateUpLim = 20 FermiChem = TRUE FermiExplode = TRUE PurityMin = 0.25 // explode purity! @@ -297,7 +297,7 @@ CurveSharppH = 0.5 ThermicConstant = -2 HIonRelease = -0.05 - RateUpLim = 5 + RateUpLim = 50 FermiChem = TRUE FermiExplode = TRUE PurityMin = 0.5 @@ -328,7 +328,7 @@ CurveSharppH = 0.5 ThermicConstant = -10 HIonRelease = -0.1 - RateUpLim = 10 + RateUpLim = 20 FermiChem = TRUE PurityMin = 0.30 @@ -352,7 +352,7 @@ CurveSharppH = 1 ThermicConstant = 5 HIonRelease = 0.01 - RateUpLim = 100 + RateUpLim = 200 FermiChem = TRUE PurityMin = 0.15 @@ -373,7 +373,7 @@ CurveSharppH = 0 ThermicConstant = 0 HIonRelease = -0.01 - RateUpLim = 20 + RateUpLim = 200 FermiChem = TRUE /datum/chemical_reaction/fermi/fermiABuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this @@ -398,7 +398,7 @@ CurveSharppH = 0 ThermicConstant = 0 HIonRelease = 0.01 - RateUpLim = 20 + RateUpLim = 200 FermiChem = TRUE /datum/chemical_reaction/fermi/fermiBBuffer/FermiFinish(datum/reagents/holder, var/atom/my_atom) //might need this diff --git a/sound/FermiChem/SoundSources.txt b/sound/FermiChem/SoundSources.txt new file mode 100644 index 0000000000..15b25ccd05 --- /dev/null +++ b/sound/FermiChem/SoundSources.txt @@ -0,0 +1,9 @@ +heatmelt.ogg - from https://freesound.org/people/toiletrolltube/sounds/181483/ + from https://freesound.org/people/MrVasLuk/sounds/304619/ + from https://freesound.org/people/Benboncan/sounds/74899/ + from bubbles2.ogg +heatacid.ogg - from https://freesound.org/people/klankbeeld/sounds/233697/ + from bubbles2.ogg + from fuse.ogg + +Work is licensed under the Creative Commons and Attribution License. \ No newline at end of file diff --git a/sound/FermiChem/acidmelt.ogg b/sound/FermiChem/acidmelt.ogg new file mode 100644 index 0000000000..bef257be55 Binary files /dev/null and b/sound/FermiChem/acidmelt.ogg differ diff --git a/sound/FermiChem/heatmelt.ogg b/sound/FermiChem/heatmelt.ogg new file mode 100644 index 0000000000..87dab3a18f Binary files /dev/null and b/sound/FermiChem/heatmelt.ogg differ