From 8f555b0fdd222544acc60b99e394d289b31644d2 Mon Sep 17 00:00:00 2001 From: Fermi Date: Wed, 10 Jul 2019 21:35:47 +0100 Subject: [PATCH] Reworked Astral, doubled lung damage, fixed lung damage oopsie. --- .../mob/living/simple_animal/astral.dm | 41 +++++++++++++++++++ .../chemistry/reagents/other_reagents.dm | 2 +- code/modules/surgery/organs/lungs.dm | 13 +++--- .../reagents/chemistry/reagents/SDGF.dm | 4 +- .../reagents/chemistry/reagents/astrogen.dm | 40 ++++++++---------- .../chemistry/reagents/fermi_reagents.dm | 2 +- .../reagents/chemistry/reagents/healing.dm | 2 +- tgstation.dme | 1 + 8 files changed, 71 insertions(+), 34 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/astral.dm diff --git a/code/modules/mob/living/simple_animal/astral.dm b/code/modules/mob/living/simple_animal/astral.dm new file mode 100644 index 0000000000..ceebb62be3 --- /dev/null +++ b/code/modules/mob/living/simple_animal/astral.dm @@ -0,0 +1,41 @@ +/mob/living/simple_animal/astral + name = "Astral projection" + desc = "A soul of someone projecting their mind." + icon = 'icons/mob/mob.dmi' + icon_state = "ghost" + icon_living = "ghost" + mob_biotypes = list(MOB_SPIRIT) + attacktext = "raises the hairs on the neck of" + response_harm = "disrupts the concentration of" + response_disarm = "wafts" + friendly = "touches" + loot = null + maxHealth = 5 + health = 5 + melee_damage_lower = 0 + melee_damage_upper = 0 + obj_damage = 0 + deathmessage = "disappears as if it was never really there to begin with" + incorporeal_move = 1 + alpha = 50 + attacktext = "touches the mind of" + speak_emote = list("echos") + movement_type = FLYING + var/pseudo_death = FALSE + +/mob/living/simple_animal/astral/death() + icon_state = "shade_dead" + Stun(1000) + canmove = 0 + friendly = "deads at" + pseudo_death = TRUE + incorporeal_move = 0 + to_chat(src, "Your astral projection is interrupted and your mind is sent back to your body with a shock!") + +/mob/living/simple_animal/astral/ClickOn(var/atom/A, var/params) + ..() + if(pseudo_death == FALSE) + if(isliving(A)) + var/message = html_decode(stripped_input(src, "Enter a message to send to [A]", MAX_MESSAGE_LEN)) + to_chat(A, "[src] speaks into your mind, \"[message]\"") + log_game("FERMICHEM: [src] has astrally transmitted [message] into [A]") diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 03a83b7448..f7c9c95e40 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1929,7 +1929,7 @@ /datum/reagent/moonsugar/on_mob_life(mob/living/carbon/M) if(prob(20)) to_chat(M, "You find yourself unable to supress the desire to meow!") - M.emote("*nya") + M.emote("nya") ..() //Kept for legacy, I think it will break everything if you enable it. diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 1dd0f9fd70..ff8310e2aa 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -405,13 +405,13 @@ var/cold_modifier = H.dna.species.coldmod if(breath_temperature < cold_level_3_threshold) H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type) - adjustLungLoss(cold_level_3_damage*cold_modifier, H) + adjustLungLoss((cold_level_3_damage*cold_modifier*2), H) if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold) H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type) - adjustLungLoss(cold_level_2_damage*cold_modifier, H) + adjustLungLoss((cold_level_2_damage*cold_modifier*2), H) if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold) H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type) - adjustLungLoss(cold_level_1_damage*cold_modifier, H) + adjustLungLoss((cold_level_1_damage*cold_modifier*2), H) if(breath_temperature < cold_level_1_threshold) if(prob(20)) to_chat(H, "You feel [cold_message] in your [name]!") @@ -420,13 +420,13 @@ var/heat_modifier = H.dna.species.heatmod if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold) H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type) - adjustLungLoss(cold_level_1_damage*heat_modifier, H) + adjustLungLoss((heat_level_1_damage*heat_modifier*2), H) if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold) H.apply_damage_type(heat_level_2_damage*heat_modifier, heat_damage_type) - adjustLungLoss(cold_level_1_damage*heat_modifier, H) + adjustLungLoss((heat_level_2_damage*heat_modifier*2), H) if(breath_temperature > heat_level_3_threshold) H.apply_damage_type(heat_level_3_damage*heat_modifier, heat_damage_type) - adjustLungLoss(cold_level_1_damage*heat_modifier, H) + adjustLungLoss((heat_level_3_damage*heat_modifier*2), H) if(breath_temperature > heat_level_1_threshold) if(prob(20)) to_chat(H, "You feel [hot_message] in your [name]!") @@ -500,4 +500,3 @@ if (breath.gases[/datum/gas/plasma]) var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma]) owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you. - diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 62a78c6567..f57bfdaa9c 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -68,11 +68,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING startHunger = M.nutrition if(pollStarted == FALSE) pollStarted = TRUE - candies = pollGhostCandidates("Do you want to play as a clone and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you.") + candies = pollGhostCandidates("Do you want to play as a clone of [M], and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you and it will likely earn you a bwoink.") log_game("FERMICHEM: [M] ckey: [M.key] has taken SDGF, and ghosts have been polled.") if(20 to INFINITY) if(LAZYLEN(candies) && playerClone == FALSE) //If there's candidates, clone the person and put them in there! - message_admins("Ghost candidate found! [candies] is becoming a clone of [M]! Hee~!! Exciting!!") log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [candies]") to_chat(M, "The cells reach a critical micelle concentration, nucleating rapidly within your body!") var/typepath = M.type @@ -83,6 +82,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.dna.transfer_identity(SM) SM.updateappearance(mutcolor_update=1) var/mob/dead/observer/C = pick(candies) + message_admins("Ghost candidate found! [C] is becoming a clone of [M] (They agreed to respect the character they're becoming. If they don't, then they agreed to a a bwoinking.) (Hee~!! Exciting!!)") SM.key = C.key SM.mind.enslave_mind_to_creator(M) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index 2b50c5e132..215d82f84a 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -18,13 +18,14 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die id = "astral" description = "An opalescent murky liquid that is said to distort your soul from your being." color = "#A080H4" // rgb: , 0, 255 - taste_description = "velvety brambles" + taste_description = "your mind" metabolization_rate = 0//Removal is exponential, see code overdose_threshold = 20 addiction_threshold = 24.5 addiction_stage1_end = 9999//Should never end. There is no escape make your time var/mob/living/carbon/origin - var/mob/living/simple_animal/hostile/retaliate/ghost/G = null + var/mob/living/simple_animal/astral/G = null + var/datum/mind/originalmind var/antiGenetics = 255 var/sleepytime = 0 InverseChemVal = 0.25 @@ -41,39 +42,34 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die /datum/reagent/fermi/astral/on_mob_life(mob/living/M) // Gives you the ability to astral project for a moment! M.alpha = 255 + originalmind = M.mind if(current_cycle == 0) log_game("FERMICHEM: [M] ckey: [M.key] became an astral ghost") origin = M if (G == null) G = new(get_turf(M.loc)) - G.attacktext = "raises the hairs on the neck of" - G.response_harm = "disrupts the concentration of" - G.response_disarm = "wafts" - G.loot = null - G.maxHealth = 5 - G.health = 5 - G.melee_damage_lower = 0 - G.melee_damage_upper = 0 - G.obj_damage = 0 - G.deathmessage = "disappears as if it was never really there to begin with" - G.incorporeal_move = 1 - G.alpha = 35 G.name = "[M]'s astral projection" var/datum/action/chem/astral/AS = new(G) AS.origin = M AS.ghost = G M.mind.transfer_to(G) - sleepytime = 15*volume SSblackbox.record_feedback("tally", "fermi_chem", 1, "Astral projections") if(overdosed) if(prob(50)) to_chat(G, "The high conentration of Astrogen in your blood causes you to lapse your concentration for a moment, bringing your projection back to yourself!") do_teleport(G, M.loc) M.reagents.remove_reagent(id, current_cycle/2, FALSE)//exponent + sleepytime+=5 + if(G.stat == DEAD || !G || G.pseudo_death == TRUE) + originalmind.transfer_to(M) + M.Sleeping(10, 0) ..() /datum/reagent/fermi/astral/on_mob_delete(mob/living/carbon/M) - G.mind.transfer_to(origin) + if(!G) + originalmind.transfer_to(M) + else + G.mind.transfer_to(origin) qdel(G) if(overdosed) to_chat(M, "The high volume of Astrogren you just took causes you to black out momentarily as your mind snaps back to your body.") @@ -86,7 +82,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die if(addiction_stage < 2) antiGenetics = 255 M.alpha = 255 //Antigenetics is to do with stopping geneticists from turning people invisible to kill them. - if(prob(65)) + if(prob(70)) M.alpha-- antiGenetics-- switch(antiGenetics) @@ -99,6 +95,11 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die to_chat(M, "Your addiction is only getting worse as your body disappears. Maybe you should get some more, and fast?") M.alpha-- antiGenetics-- + if(200) + to_chat(M, "You feel a substantial part of your soul flake off into the ethereal world, rendering yourself unclonable.") + M.alpha-- + antiGenetics-- + ADD_TRAIT(M, TRAIT_NOCLONE, "astral") //So you can't scan yourself, then die, to metacomm. You can only use your memories if you come back as something else. if(180) to_chat(M, "You feel fear build up in yourself as more and more of your body and consciousness begins to fade.") M.alpha-- @@ -107,11 +108,6 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die to_chat(M, "As you lose more and more of yourself, you start to think that maybe shedding your mortality isn't too bad.") M.alpha-- antiGenetics-- - if(100) - to_chat(M, "You feel a substantial part of your soul flake off into the ethereal world, rendering yourself unclonable.") - M.alpha-- - antiGenetics-- - ADD_TRAIT(M, TRAIT_NOCLONE, "astral") //So you can't scan yourself, then die, to metacomm. You can only use your memories if you come back as something else. if(80) to_chat(M, "You feel a thrill shoot through your body as what's left of your mind contemplates your forthcoming oblivion.") M.alpha-- 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 5a4dd2df0a..c683624e06 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -270,7 +270,7 @@ if(prob(20)) to_chat(C, "You can feel your lungs burning!") var/obj/item/organ/lungs/L = C.getorganslot(ORGAN_SLOT_LUNGS) - L.adjustLungLoss(acidstr, C) + L.adjustLungLoss(acidstr*2, C) C.apply_damage(acidstr/5, BURN, target) C.acid_act(acidstr, volume) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index 48eae07aa2..7dd61df462 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -75,7 +75,7 @@ if(T) T.adjustTongueLoss(C, 1) if(L) - L.adjustLungLoss(2.5, C) + L.adjustLungLoss(4, C) C.adjustOxyLoss(2) else C.adjustOxyLoss(10) diff --git a/tgstation.dme b/tgstation.dme index 7a04ed0c42..d254c1495f 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2081,6 +2081,7 @@ #include "code\modules\mob\living\silicon\robot\robot_movement.dm" #include "code\modules\mob\living\silicon\robot\say.dm" #include "code\modules\mob\living\simple_animal\animal_defense.dm" +#include "code\modules\mob\living\simple_animal\astral.dm" #include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm"