diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index 56ecbf4f966..d69a535cf50 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -66,7 +66,7 @@ #define INFECTION_LEVEL_TWO 500 #define INFECTION_LEVEL_THREE 1000 -//Blood levels. These are percentages based on the species blood_volume far. +//Blood levels. These are percentages based on the species blood_volume var. #define BLOOD_VOLUME_SAFE 85 #define BLOOD_VOLUME_OKAY 70 #define BLOOD_VOLUME_BAD 60 @@ -77,4 +77,4 @@ // proportion of their max blood volume to be lost // (e.g. 0.6 == 60% lost if 200 burn damage is taken). #define FLUIDLOSS_WIDE_BURN 0.4 //for burns from heat applied over a wider area, like from fire -#define FLUIDLOSS_CONC_BURN 0.6 //for concentrated burns, like from lasers +#define FLUIDLOSS_CONC_BURN 0.2 //for concentrated burns, like from lasers diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 9f35126b248..46da51e86f5 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -81,8 +81,9 @@ ..() /mob/living/carbon/attack_hand(mob/M as mob) - if(!istype(M, /mob/living/carbon)) return - if (!M.can_use_hand()) + if(!istype(M, /mob/living/carbon)) + return + if(!M.can_use_hand()) return if(M.a_intent != I_HELP) @@ -115,29 +116,26 @@ willfully_sleeping = FALSE for(var/datum/disease/D in viruses) - if(D.spread_by_touch()) - M.contract_disease(D, 0, 1, CONTACT_HANDS) for(var/datum/disease/D in M.viruses) - if(D.spread_by_touch()) - contract_disease(D, 0, 1, CONTACT_HANDS) return /mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/tesla_shock = 0, var/ground_zero) - if(status_flags & GODMODE) return 0 //godmode - if (!tesla_shock) + if(status_flags & GODMODE) + return 0 //godmode + if(!tesla_shock) shock_damage *= siemens_coeff - if (shock_damage<1) + if(shock_damage<1) return 0 src.apply_damage(shock_damage, BURN, def_zone, used_weapon="Electrocution") playsound(loc, "sparks", 50, 1, -1) - if (shock_damage > 15 || tesla_shock) + if(shock_damage > 15 || tesla_shock) src.visible_message( span("warning", "[src] was shocked by the [source]!"), \ span("danger", "You feel a powerful shock course through your body!"), \ @@ -151,9 +149,7 @@ span("warning", "You feel a mild shock course through your body."), \ span("warning", "You hear a light zapping.") \ ) - spark(loc, 5, alldirs) - return shock_damage /mob/proc/swap_hand() @@ -166,7 +162,7 @@ if(item_in_hand:wielded == 1) to_chat(usr, span("warning", "Your other hand is too busy holding the [item_in_hand.name]")) return - src.hand = !( src.hand ) + src.hand = !src.hand if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object) if(hand) //This being 1 means the left hand is in use hud_used.l_hand_hud_object.icon_state = "l_hand_active" @@ -181,10 +177,8 @@ return /mob/living/carbon/proc/activate_hand(var/selhand) //0 or "r" or "right" for right hand; 1 or "l" or "left" for left hand. - if(istext(selhand)) selhand = lowertext(selhand) - if(selhand == "right" || selhand == "r") selhand = 0 if(selhand == "left" || selhand == "l") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index bea02e6889a..d0d62880985 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1367,9 +1367,7 @@ span("warning", "A spike of pain jolts your [organ.name] as you bump [O] inside."), \ span("warning", "Your movement jostles [O] in your [organ.name] painfully."), \ span("warning", "Your movement jostles [O] in your [organ.name] painfully.")) - to_chat(src, msg) - - organ.take_damage(rand(1, 3), sharp = TRUE, edge = TRUE, used_weapon = O) + custom_pain(msg, 10, 10, organ) /mob/living/carbon/human/verb/check_pulse() set category = "Object" diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 3883bb6733d..f710251a7e0 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -22,14 +22,16 @@ return amount /mob/living/carbon/human/adjustBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode + if(status_flags & GODMODE) + return 0 //godmode if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] if(sponge) sponge.take_internal_damage(amount) /mob/living/carbon/human/setBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode + if(status_flags & GODMODE) + return 0 //godmode if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] if(sponge) @@ -37,7 +39,8 @@ updatehealth() /mob/living/carbon/human/getBrainLoss() - if(status_flags & GODMODE) return 0 //godmode + if(status_flags & GODMODE) + return 0 //godmode if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/brain/sponge = internal_organs_by_name[BP_BRAIN] if(sponge) @@ -114,15 +117,18 @@ BITSET(hud_updateflag, HEALTH_HUD) /mob/living/carbon/human/Stun(amount) - if(HULK in mutations) return + if(HULK in mutations) + return ..() /mob/living/carbon/human/Weaken(amount) - if(HULK in mutations) return + if(HULK in mutations) + return ..() /mob/living/carbon/human/Paralyse(amount) - if(HULK in mutations) return + if(HULK in mutations) + return // Notify our AI if they can now control the suit. if(wearing_rig && !stat && paralysis < amount) //We are passing out right this second. wearing_rig.notify_ai("Warning: user consciousness failure. Mobility control passed to integrated intelligence system.") @@ -386,7 +392,7 @@ This function restores all organs. /mob/living/carbon/human/proc/get_organ(var/zone) if(!zone) zone = BP_CHEST - if (zone in list( BP_EYES, BP_MOUTH )) + if (zone in list(BP_EYES, BP_MOUTH)) zone = BP_HEAD return organs_by_name[zone] @@ -401,7 +407,7 @@ This function restores all organs. //Handle other types of damage if(damagetype != BRUTE && damagetype != BURN) if(!stat && damagetype == PAIN && (can_feel_pain())) - if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) + if((damage > 25 && prob(20)) || (damage > 50 && prob(60))) emote("scream") ..(damage, damagetype, def_zone, blocked) @@ -436,12 +442,11 @@ This function restores all organs. damage *= species.brute_mod if(organ.take_damage(damage, 0, sharp, edge, used_weapon, damage_flags = damage_flags)) UpdateDamageIcon() + if(BURN) damageoverlaytemp = 20 if(damage > 0) damage *= species.burn_mod - - if(organ.take_damage(0, damage, sharp, edge, used_weapon, damage_flags = damage_flags)) UpdateDamageIcon() @@ -451,20 +456,17 @@ This function restores all organs. return 1 /mob/living/carbon/human/apply_radiation(var/rads) - if (species && rads > 0) + if(species && rads > 0) rads = rads * species.radiation_mod ..(rads) /mob/living/carbon/human/proc/get_shock() - - if (!can_feel_pain()) + if(!can_feel_pain()) return 0 var/traumatic_shock = getHalLoss() // Pain. traumatic_shock -= chem_effects[CE_PAINKILLER] - if(stat == UNCONSCIOUS) - traumatic_shock *= 0.6 return max(0,traumatic_shock) /mob/living/carbon/human/remove_blood_simple(var/blood) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1214a4a7d62..c77d7242ca7 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -288,11 +288,6 @@ emp_act if(prob(effective_force) && head && !istype(head, /obj/item/clothing/head/helmet)) visible_message("[src] [species.knockout_message]") apply_effect(20, PARALYZE, blocked) - else - //Easier to score a stun but lasts less time - if(prob(effective_force + 10)) - visible_message("[src] has been knocked down!") - apply_effect(6, WEAKEN, blocked) //Apply blood if(!(I.flags & NOBLOODY)) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 43c70ad48c3..19caf47a924 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -58,7 +58,8 @@ tally += 1.5 if (can_feel_pain()) - if(shock_stage >= 10) tally += 3 + if(shock_stage >= 10) + tally += 3 if(is_asystole()) tally += 10 //heart attacks are kinda distracting diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a4db1e9b120..b2eb85621cd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -61,7 +61,7 @@ //Updates the number of stored chemicals for powers handle_changeling() - //Organs and blood + //Organs handle_organs() stabilize_body_temperature() //Body temperature adjusts itself (self-regulation) @@ -749,10 +749,10 @@ for(var/atom/a in hallucinations) qdel(a) - if(get_shock() >= species.total_health) + if(get_shock() >= (species.total_health * 0.75)) if(!stat) to_chat(src, "[species.halloss_message_self]") - src.visible_message("[src] [species.halloss_message].") + src.visible_message("[src] [species.halloss_message]") Paralyse(10) if(paralysis || sleeping) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 63b29d0f86b..350c87eddc9 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -28,7 +28,6 @@ updatehealth() return 1 - /mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/halloss = 0, var/def_zone = null, var/blocked = 0) if(blocked >= 100) return 0 if(brute) apply_damage(brute, BRUTE, def_zone, blocked) @@ -39,8 +38,6 @@ if(halloss) apply_damage(halloss, PAIN, def_zone, blocked) return 1 - - /mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) if(!effect || (blocked >= 100)) return 0 switch(effecttype) diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index c9f593cb05d..97470e6c77c 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -154,7 +154,7 @@ blood_max += ((W.damage / 40) * species.bleed_mod) if(temp.status & ORGAN_ARTERY_CUT) - var/bleed_amount = Floor(owner.vessel.total_volume / (temp.applied_pressure || !open_wound ? 450 : 300)) + var/bleed_amount = Floor(owner.vessel.total_volume / (temp.applied_pressure || !open_wound ? 450 : 250)) if(bleed_amount) if(open_wound) blood_max += bleed_amount diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index ad1a683106d..d2e0d194802 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -7,7 +7,7 @@ robotic_sprite = "liver-prosthetic" toxin_type = CE_HEPATOTOXIC min_bruised_damage = 25 - min_broken_damage = 45 + min_broken_damage = 55 max_damage = 70 relative_size = 60 @@ -28,7 +28,7 @@ //Detox can heal small amounts of damage if (damage < max_damage && !owner.chem_effects[CE_TOXIN]) - heal_damage(0.2 * owner.chem_effects[CE_ANTITOXIN]) + heal_damage(0.3 * owner.chem_effects[CE_ANTITOXIN]) // Get the effectiveness of the liver. var/filter_effect = 3 diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index e36eec7ab13..e3fa88bac87 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -251,10 +251,10 @@ var/laser = (damage_flags & DAM_LASER) - add_pain(0.6*burn + 0.4*brute) + add_pain(0.8*burn + 0.5*brute) if(status & ORGAN_BROKEN && prob(40) && brute) - if (owner && (owner.can_feel_pain())) + if(owner && (owner.can_feel_pain())) owner.emote("scream") //getting hit on broken hand hurts if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) @@ -262,7 +262,10 @@ // High brute damage or sharp objects may damage internal organs if(length(internal_organs)) if(damage_internal_organs(brute, burn, sharp, damage_flags)) - brute /= 2 + var/brute_div = 2 //We want melee weapons to not be affected by this. + if(damage_flags & DAM_BULLET) + brute_div = 1.25 + brute /= brute_div burn /= 2 var/can_cut = (prob(brute*2) || sharp) && !(status & ORGAN_ROBOT) @@ -320,7 +323,7 @@ // sync the organ's damage with its wounds update_damages() - if (owner) + if(owner) owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called return update_icon() @@ -342,7 +345,7 @@ var/organ_damage_threshold = 10 if(sharp) - organ_damage_threshold *= 0.5 + organ_damage_threshold *= 0.3 if(laser) organ_damage_threshold *= 2 @@ -479,8 +482,10 @@ This function completely restores a damaged organ to perfect condition. if((type in list(BURN, LASER)) && (damage > 5 || damage + burn_dam >= 15) && !BP_IS_ROBOTIC(src)) var/fluid_loss_severity switch(type) - if(BURN) fluid_loss_severity = FLUIDLOSS_WIDE_BURN - if(LASER) fluid_loss_severity = FLUIDLOSS_CONC_BURN + if(BURN) + fluid_loss_severity = FLUIDLOSS_WIDE_BURN + if(LASER) + fluid_loss_severity = FLUIDLOSS_CONC_BURN var/fluid_loss = (damage/(owner.maxHealth - config.health_threshold_dead)) * DEFAULT_BLOOD_AMOUNT * fluid_loss_severity owner.remove_blood_simple(fluid_loss) @@ -1016,7 +1021,7 @@ Note that amputating the affected organ does in fact remove the infection from t perma_injury = brute_dam // Fractures have a chance of getting you out of restraints - if (prob(25)) + if(prob(25)) release_restraints() // This is mostly for the ninja suit to stop ninja being so crippled by breaks. @@ -1345,7 +1350,7 @@ Note that amputating the affected organ does in fact remove the infection from t amount -= (owner.chem_effects[CE_PAINKILLER]/3) if(amount <= 0) return - pain = max(0,min(max_damage,pain+amount)) + pain = max(0, min(max_damage, pain + amount)) if(owner && ((amount > 15 && prob(20)) || (amount > 30 && prob(60)))) owner.emote("scream") return pain-last_pain diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 05d01f72905..ddd1d4d71c3 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -59,7 +59,11 @@ mob/var/next_pain_time = 0 // Excessive halloss is horrible, just give them enough to make it visible. if(!nohalloss && power) - adjustHalLoss(Ceiling(power/2)) + if(!affecting) + adjustHalLoss(Ceiling(power/2)) + else + affecting.add_pain(Ceiling(power/2)) + flash_pain(min(round(2*power)+55, 255)) @@ -77,14 +81,17 @@ mob/var/next_pain_time = 0 next_pain_time = world.time + (100-power) -mob/living/carbon/human/proc/handle_pain() +/mob/living/carbon/human/proc/handle_pain() // not when sleeping - if(!can_feel_pain()) return + if(!can_feel_pain()) + return - if(stat >= 2) return + if(stat >= DEAD) + return if(analgesic > 70) return + var/maxdam = 0 var/obj/item/organ/external/damaged_organ = null for(var/obj/item/organ/external/E in organs) @@ -112,7 +119,7 @@ mob/living/carbon/human/proc/handle_pain() else if (I.is_damaged()) painmessage = "You feel discomfort in your [parent.name]." if(painmessage) - src.custom_pain(painmessage, I.is_bruised()) + custom_pain(painmessage, 5, 5) //The less hardcoded values, the better. var/toxDamageMessage = null @@ -135,4 +142,4 @@ mob/living/carbon/human/proc/handle_pain() toxDamageMessage = "Your body aches all over, it's driving you mad!" if(toxDamageMessage && prob(toxMessageProb)) - src.custom_pain(toxDamageMessage, getToxLoss() >= 15) \ No newline at end of file + custom_pain(toxDamageMessage, 5, 5) \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 60dbe596dd0..fc330ce3c62 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -411,7 +411,7 @@ addtimer(CALLBACK(src, /atom/.proc/set_light, 0), 2) if(recoil) - addtimer(CALLBACK(src, /proc/shake_camera, user, recoil+1, recoil), 0, TIMER_UNIQUE) + addtimer(CALLBACK(GLOBAL_PROC, /proc/shake_camera, user, recoil+1, recoil), 0, TIMER_UNIQUE) update_icon() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index f256e5c573e..bf4abdfe4e6 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -127,7 +127,6 @@ fire_delay_wielded = 6 accuracy_wielded = 2 - /obj/item/gun/projectile/automatic/rifle/sts35 name = "assault rifle" desc = "A durable, rugged looking automatic weapon of a make popular on the frontier worlds. Uses 7.62mm rounds. It is unmarked." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 35d8e219c99..b2a7d5d9c8c 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -12,12 +12,11 @@ fallback_specific_heat = 0.75 var/target_organ // needs to be null by default - var/strength = 4 // How much damage it deals per unit + var/strength = 2 // How much damage it deals per unit /datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) if(strength && alien != IS_DIONA) var/dam = (strength * removed) - M.add_chemical_effect(CE_TOXIN, dam) if(target_organ && ishuman(M)) var/mob/living/carbon/human/H = M var/obj/item/organ/internal/I = H.internal_organs_by_name[target_organ] @@ -31,7 +30,7 @@ I.take_internal_damage(dam, silent=TRUE) dam = 0 if(dam) - M.adjustToxLoss(target_organ ? (dam * 0.75) : dam) + M.adjustToxLoss(target_organ ? (dam * 0.5) : dam) /datum/reagent/toxin/plasticide name = "Plasticide" diff --git a/html/changelogs/mattatlas-godhelpme.yml b/html/changelogs/mattatlas-godhelpme.yml new file mode 100644 index 00000000000..bd3b353acf3 --- /dev/null +++ b/html/changelogs/mattatlas-godhelpme.yml @@ -0,0 +1,50 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: MattAtlas + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - experiment: "Lowered the threshold at which you fall down in paincrit." + - experiment: "Melee weapons no longer have a chance to RNG knockdown when aiming for the chest." + - experiment: "Being unconscious no longer removes some of your pain." + - tweak: "Shrapnel no longer causes direct damage. It now adds pain to the organ the shrapnel is in." + - tweak: "Lasers now evaporate less blood, but deal more pain." + - tweak: "Arterial bleeding is now MUCH nastier." + - tweak: "Ballistics now suffer a lower damage penalty after damaging organs." + - tweak: "Toxins have been nerfed overall." + - tweak: "Buffed the liver's breaking threshold." + - tweak: "Ballistics now inflict slightly more pain."