diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 219eedc247a..a1f46429877 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -134,7 +134,6 @@ src.icon_state = "pod_1" //Get the clone body ready - src.occupant.rejuv = 10 src.occupant.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite src.occupant.adjustBrainLoss(90) src.occupant.Paralyse(4) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 5bf2e3847d7..df4f065bd17 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -533,11 +533,12 @@ In all, this is a lot like the monkey code. /N return /mob/living/carbon/alien/humanoid/updatehealth() - if (nodamage == 0) - //oxyloss is only used for suicide - //toxloss isn't used for aliens, its actually used as alien powers!! - health = 100 - getOxyLoss() - getFireLoss() - getBruteLoss() - else + if(nodamage) health = 100 stat = 0 + else + //oxyloss is only used for suicide + //toxloss isn't used for aliens, its actually used as alien powers!! + health = 100 - getOxyLoss() - getFireLoss() - getBruteLoss() + diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 9556f42bf75..2bfcca3be01 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -12,12 +12,12 @@ set invisibility = 0 set background = 1 - if (src.monkeyizing) + if (monkeyizing) return ..() - if (src.stat != DEAD) //still breathing + if (stat != DEAD) //still breathing //First, resolve location and get a breath @@ -34,7 +34,7 @@ //blinded get reset each cycle and then get activated later in the //code. Very ugly. I dont care. Moving this stuff here so its easy //to find it. - src.blinded = null + blinded = null //Disease Check handle_virus_updates() @@ -59,8 +59,6 @@ //Status updates, death etc. handle_regular_status_updates() - - // Yup. update_canmove() // Grabbing @@ -70,501 +68,477 @@ if(client) handle_regular_hud_updates() - clamp_values() /mob/living/carbon/alien/humanoid - proc - clamp_values() + proc/handle_disabilities() + if (disabilities & 2) + if ((prob(1) && paralysis < 10 && r_epil < 1)) + src << "\red You have a seizure!" + Paralyse(10) + if (disabilities & 4) + if ((prob(5) && paralysis <= 1 && r_ch_cou < 1)) + drop_item() + spawn( 0 ) + emote("cough") + return + if (disabilities & 8) + if ((prob(10) && paralysis <= 1 && r_Tourette < 1)) + Stun(10) + spawn( 0 ) + emote("twitch") + return + if (disabilities & 16) + if (prob(10)) + stuttering = max(10, stuttering) -// SetStunned(min(stunned, 20)) - SetParalysis(min(paralysis, 20)) -// SetWeakened(min(weakened, 20)) - sleeping = max(min(sleeping, 20), 0) - adjustBruteLoss(0) - adjustToxLoss(0) - adjustOxyLoss(0) - adjustFireLoss(0) + proc/update_mind() + if(!mind && client) + mind = new + mind.current = src + mind.assigned_role = "Hunter" + mind.key = key + proc/handle_mutations_and_radiation() - handle_disabilities() + if(getFireLoss()) + if((COLD_RESISTANCE in mutations) || prob(50)) + switch(getFireLoss()) + if(1 to 50) + adjustFireLoss(-1) + if(51 to 100) + adjustFireLoss(-5) - if (src.disabilities & 2) - if ((prob(1) && src.paralysis < 10 && src.r_epil < 1)) - src << "\red You have a seizure!" - Paralyse(10) - if (src.disabilities & 4) - if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1)) - src.drop_item() - spawn( 0 ) - emote("cough") - return - if (src.disabilities & 8) - if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1)) - Stun(10) - spawn( 0 ) - emote("twitch") - return - if (src.disabilities & 16) - if (prob(10)) - src.stuttering = max(10, src.stuttering) + if ((HULK in mutations) && health <= 25) + mutations.Remove(HULK) + src << "\red You suddenly feel very weak." + Weaken(3) + emote("collapse") - update_mind() - if(!mind && client) - mind = new - mind.current = src - mind.assigned_role = "Hunter" - mind.key = key - - handle_mutations_and_radiation() - - if(src.getFireLoss()) - if((COLD_RESISTANCE in src.mutations) || prob(50)) - switch(src.getFireLoss()) - if(1 to 50) - src.adjustFireLoss(-1) - if(51 to 100) - src.adjustFireLoss(-5) - - if ((HULK in src.mutations) && src.health <= 25) - src.mutations.Remove(HULK) - src << "\red You suddenly feel very weak." - Weaken(3) + if (radiation) + if (radiation > 100) + radiation = 100 + Weaken(10) + src << "\red You feel weak." emote("collapse") - if (src.radiation) - if (src.radiation > 100) - src.radiation = 100 - Weaken(10) - src << "\red You feel weak." - emote("collapse") + if (radiation < 0) + radiation = 0 - if (src.radiation < 0) - src.radiation = 0 + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) + adjustToxLoss(1) + updatehealth() - switch(src.radiation) - if(1 to 49) - src.radiation-- - if(prob(25)) - src.adjustToxLoss(1) - src.updatehealth() + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + src << "\red You feel weak." + emote("collapse") + updatehealth() - if(50 to 74) - src.radiation -= 2 - src.adjustToxLoss(1) - if(prob(5)) - src.radiation -= 5 - Weaken(3) - src << "\red You feel weak." - emote("collapse") - src.updatehealth() - - if(75 to 100) - src.radiation -= 3 - src.adjustToxLoss(3) - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - src.updatehealth() + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - breathe() - if(src.reagents) - if(src.reagents.has_reagent("lexorin")) return - if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + proc/breathe() + if(reagents) + if(reagents.has_reagent("lexorin")) return + if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath - // HACK NEED CHANGING LATER - if(src.health < 0) - src.losebreath++ + var/datum/gas_mixture/environment = loc.return_air() + var/datum/air_group/breath + // HACK NEED CHANGING LATER + if(health < 0) + losebreath++ - if(losebreath>0) //Suffocating so do not take a breath - src.losebreath-- - if (prob(75)) //High chance of gasping for air - spawn emote("gasp") + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(75)) //High chance of gasping for air + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) + else if(istype(loc, /turf/)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = loc.remove_air(breath_moles) + + // Handle chem smoke effect -- Doohl + for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(src, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) - else if(istype(loc, /turf/)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + handle_breath(breath) - breath = loc.remove_air(breath_moles) - - // Handle chem smoke effect -- Doohl - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking + if(breath) + loc.assume_air(breath) - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(breath) - loc.assume_air(breath) - - - get_breath_from_internal(volume_needed) + proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(src.internal)) - internal = null - if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) - internal = null - if(internal) - if (src.internals) - src.internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (src.internals) - src.internals.icon_state = "internal0" - return null + if (internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) + else + if (internals) + internals.icon_state = "internal0" + return null - handle_breath(datum/gas_mixture/breath) - if(src.nodamage) - return + proc/handle_breath(datum/gas_mixture/breath) + if(nodamage) + return - if(!breath || (breath.total_moles() == 0)) - //Aliens breathe in vaccuum - return 0 + if(!breath || (breath.total_moles() == 0)) + //Aliens breathe in vaccuum + return 0 - var/toxins_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + var/toxins_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + //Partial pressure of the toxins in our breath + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - if(Toxins_pp) // Detect toxins in air + if(Toxins_pp) // Detect toxins in air - adjustToxLoss(breath.toxins*250) - toxins_alert = max(toxins_alert, 1) + adjustToxLoss(breath.toxins*250) + toxins_alert = max(toxins_alert, 1) - toxins_used = breath.toxins + toxins_used = breath.toxins + + else + toxins_alert = 0 + + //Breathe in toxins and out oxygen + breath.toxins -= toxins_used + breath.oxygen += toxins_used + + if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( + if(prob(20)) + src << "\red You feel a searing heat in your lungs!" + fire_alert = max(fire_alert, 1) + else + fire_alert = 0 + + //Temporary fixes to the alerts. + + return 1 + + proc/handle_environment() + + //If there are alien weeds on the ground then heal if needed or give some toxins + if(locate(/obj/effect/alien/weeds) in loc) + if(health >= 100) + adjustToxLoss(15) else - toxins_alert = 0 - - //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used - - if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in src.mutations)) // Hot air hurts :( - if(prob(20)) - src << "\red You feel a searing heat in your lungs!" - fire_alert = max(fire_alert, 1) - else - fire_alert = 0 - - //Temporary fixes to the alerts. - - return 1 - - handle_environment() - - //If there are alien weeds on the ground then heal if needed or give some toxins - if(locate(/obj/effect/alien/weeds) in loc) - if(health >= 100) - adjustToxLoss(15) - - else - adjustBruteLoss(-15) - adjustFireLoss(-15) + adjustBruteLoss(-15) + adjustFireLoss(-15) - adjust_body_temperature(current, loc_temp, boost) - var/temperature = current - var/difference = abs(current-loc_temp) //get difference - var/increments// = difference/10 //find how many increments apart they are - if(difference > 50) - increments = difference/5 - else - increments = difference/10 - var/change = increments*boost // Get the amount to change by (x per increment) - var/temp_change - if(current < loc_temp) - temperature = min(loc_temp, temperature+change) - else if(current > loc_temp) - temperature = max(loc_temp, temperature-change) - temp_change = (temperature - current) - return temp_change + proc/adjust_body_temperature(current, loc_temp, boost) + var/temperature = current + var/difference = abs(current-loc_temp) //get difference + var/increments// = difference/10 //find how many increments apart they are + if(difference > 50) + increments = difference/5 + else + increments = difference/10 + var/change = increments*boost // Get the amount to change by (x per increment) + var/temp_change + if(current < loc_temp) + temperature = min(loc_temp, temperature+change) + else if(current > loc_temp) + temperature = max(loc_temp, temperature-change) + temp_change = (temperature - current) + return temp_change - get_thermal_protection() - var/thermal_protection = 1.0 - //Handle normal clothing - if(head && (head.body_parts_covered & HEAD)) - thermal_protection += 0.5 - if(wear_suit && (wear_suit.body_parts_covered & UPPER_TORSO)) - thermal_protection += 0.5 - if(wear_suit && (wear_suit.body_parts_covered & LEGS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.body_parts_covered & ARMS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.body_parts_covered & HANDS)) - thermal_protection += 0.2 - if(wear_suit && (wear_suit.flags & SUITSPACE)) - thermal_protection += 3 - if(COLD_RESISTANCE in src.mutations) - thermal_protection += 5 + proc/get_thermal_protection() + var/thermal_protection = 1.0 + //Handle normal clothing + if(head && (head.body_parts_covered & HEAD)) + thermal_protection += 0.5 + if(wear_suit && (wear_suit.body_parts_covered & UPPER_TORSO)) + thermal_protection += 0.5 + if(wear_suit && (wear_suit.body_parts_covered & LEGS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.body_parts_covered & ARMS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.body_parts_covered & HANDS)) + thermal_protection += 0.2 + if(wear_suit && (wear_suit.flags & SUITSPACE)) + thermal_protection += 3 + if(COLD_RESISTANCE in mutations) + thermal_protection += 5 - return thermal_protection + return thermal_protection - add_fire_protection(var/temp) - var/fire_prot = 0 - if(head) - if(head.protective_temperature > temp) - fire_prot += (head.protective_temperature/10) - if(wear_mask) - if(wear_mask.protective_temperature > temp) - fire_prot += (wear_mask.protective_temperature/10) - if(wear_suit) - if(wear_suit.protective_temperature > temp) - fire_prot += (wear_suit.protective_temperature/10) + proc/add_fire_protection(var/temp) + var/fire_prot = 0 + if(head) + if(head.protective_temperature > temp) + fire_prot += (head.protective_temperature/10) + if(wear_mask) + if(wear_mask.protective_temperature > temp) + fire_prot += (wear_mask.protective_temperature/10) + if(wear_suit) + if(wear_suit.protective_temperature > temp) + fire_prot += (wear_suit.protective_temperature/10) - return fire_prot + return fire_prot - handle_chemicals_in_body() + proc/handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) + if(reagents) reagents.metabolize(src) - if(FAT in mutations) - if(nutrition < 100) - if(prob(round((50 - src.nutrition) / 100))) - src << "\blue You feel fit again!" - src.mutations.Remove(FAT) - else - if(nutrition > 500) - if(prob(5 + round((src.nutrition - 200) / 2))) - src << "\red You suddenly feel blubbery!" - src.mutations.Add(FAT) + if(FAT in mutations) + if(nutrition < 100) + if(prob(round((50 - nutrition) / 100))) + src << "\blue You feel fit again!" + mutations.Remove(FAT) + else + if(nutrition > 500) + if(prob(5 + round((nutrition - 200) / 2))) + src << "\red You suddenly feel blubbery!" + mutations.Add(FAT) - if (src.nutrition > 0) - src.nutrition -= HUNGER_FACTOR + if (nutrition > 0) + nutrition -= HUNGER_FACTOR - if (src.drowsyness) - src.drowsyness-- - src.eye_blurry = max(2, src.eye_blurry) - if (prob(5)) - src.sleeping += 1 - src.Paralyse(5) + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + jitteriness = max(0, jitteriness - 5) + else + dizziness = max(0, dizziness - 1) + jitteriness = max(0, jitteriness - 1) - src.updatehealth() + updatehealth() - return //TODO: DEFERRED + return //TODO: DEFERRED - handle_regular_status_updates() - health = 100 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) + proc/handle_regular_status_updates() + updatehealth() - if(getOxyLoss() > 50) Paralyse(3) + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < config.health_threshold_dead || brain_op_stage == 4.0) + death() + blinded = 1 + stat = DEAD + silent = 0 + return 1 - if(src.sleeping) + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) Paralyse(3) - //if (prob(10) && health) emote("snore") //Invalid emote for aliens, but it might be worth making sleep noticeable somehow -Yvarov - src.sleeping-- -// if(src.resting) -// Weaken(5) + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("hiss") + //CONSCIOUS + else + stat = CONSCIOUS + /* What in the living hell is this?*/ if(move_delay_add > 0) move_delay_add = max(0, move_delay_add - rand(1, 2)) - if(health < config.health_threshold_dead || src.brain_op_stage == 4.0) - death() - else if(src.health < config.health_threshold_crit) - if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") + //Eyes + if(sdisabilities & 1) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) - //if(!src.rejuv) src.oxyloss++ - if(!src.reagents.has_reagent("inaprovaline")) src.adjustOxyLoss(1) + //Ears + if(sdisabilities & 4) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) - if(src.stat != 2) src.stat = 1 - Paralyse(5) + //Other + if(stunned) + AdjustStunned(-1) - if (src.stat != DEAD) //Alive. + if(weakened) + weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times - if (resting || src.paralysis || src.stunned || src.weakened) //Stunned etc. - if (resting) - src.lying = 1 - if (src.stunned > 0) - AdjustStunned(-1) - src.stat = 0 - if (src.weakened > 0) - AdjustWeakened(-1) - src.lying = 1 - src.stat = 0 - if (src.paralysis > 0) - AdjustParalysis(-1) - src.blinded = 1 - src.lying = 1 - src.stat = 1 - drop_item() - hand = !hand - drop_item() - hand = !hand + if(stuttering) + stuttering = max(stuttering-1, 0) - else //Not stunned. - src.lying = 0 - src.stat = 0 + if(silent) + silent = max(silent-1, 0) - else //Dead. - src.lying = 1 - src.blinded = 1 - src.stat = 2 - - if (src.stuttering) src.stuttering-- - - if (src.eye_blind) - src.eye_blind-- - src.blinded = 1 - - if (src.ear_deaf > 0) src.ear_deaf-- - if (src.ear_damage < 25) - src.ear_damage -= 0.05 - src.ear_damage = max(src.ear_damage, 0) - - src.density = !( src.lying ) - - if ((src.sdisabilities & 1)) - src.blinded = 1 - if ((src.sdisabilities & 4)) - src.ear_deaf = 1 - - if (src.eye_blurry > 0) - src.eye_blurry-- - src.eye_blurry = max(0, src.eye_blurry) - - if (src.druggy > 0) - src.druggy-- - src.druggy = max(0, src.druggy) - - return 1 - - handle_regular_hud_updates() - - if (src.stat == 2 || (XRAY in src.mutations)) - src.sight |= SEE_TURFS - src.sight |= SEE_MOBS - src.sight |= SEE_OBJS - src.see_in_dark = 8 - src.see_invisible = 2 - else if (src.stat != 2) - src.sight |= SEE_MOBS - src.sight &= ~SEE_TURFS - src.sight &= ~SEE_OBJS - src.see_in_dark = 4 - src.see_invisible = 2 - - if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping) - if (src.rest) src.rest.icon_state = text("rest[]", src.resting) - - if (src.healths) - if (src.stat != 2) - switch(health) - if(100 to INFINITY) - src.healths.icon_state = "health0" - if(75 to 100) - src.healths.icon_state = "health1" - if(50 to 75) - src.healths.icon_state = "health2" - if(25 to 50) - src.healths.icon_state = "health3" - if(0 to 25) - src.healths.icon_state = "health4" - else - src.healths.icon_state = "health5" - else - src.healths.icon_state = "health6" - - if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]" + if(druggy) + druggy = max(druggy-1, 0) + return 1 - if (src.toxin) src.toxin.icon_state = "tox[src.toxins_alert ? 1 : 0]" - if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]" - if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]" - //NOTE: the alerts dont reset when youre out of danger. dont blame me, - //blame the person who coded them. Temporary fix added. + proc/handle_regular_hud_updates() - src.client.screen -= src.hud_used.blurry - src.client.screen -= src.hud_used.druggy - src.client.screen -= src.hud_used.vimpaired + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = 2 + else if (stat != 2) + sight |= SEE_MOBS + sight &= ~SEE_TURFS + sight &= ~SEE_OBJS + see_in_dark = 4 + see_invisible = 2 - if ((src.blind && src.stat != 2)) - if ((src.blinded)) - src.blind.layer = 18 - else - src.blind.layer = 0 + if (sleep) sleep.icon_state = text("sleep[]", sleeping) + if (rest) rest.icon_state = text("rest[]", resting) - if (src.disabilities & 1) - src.client.screen += src.hud_used.vimpaired + if (healths) + if (stat != 2) + switch(health) + if(100 to INFINITY) + healths.icon_state = "health0" + if(75 to 100) + healths.icon_state = "health1" + if(50 to 75) + healths.icon_state = "health2" + if(25 to 50) + healths.icon_state = "health3" + if(0 to 25) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" - if (src.eye_blurry) - src.client.screen += src.hud_used.blurry + if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" - if (src.druggy) - src.client.screen += src.hud_used.druggy - if (src.stat != 2) - if (src.machine) - if (!( src.machine.check_eye(src) )) - src.reset_view(null) - else - if(!client.adminobs) - reset_view(null) + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" + //NOTE: the alerts dont reset when youre out of danger. dont blame me, + //blame the person who coded them. Temporary fix added. - return 1 + client.screen -= hud_used.blurry + client.screen -= hud_used.druggy + client.screen -= hud_used.vimpaired - handle_virus_updates() - if(src.bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 - handle_stomach() - spawn(0) - for(var/mob/M in stomach_contents) - if(M.loc != src) + if (disabilities & 1) + client.screen += hud_used.vimpaired + + if (eye_blurry) + client.screen += hud_used.blurry + + if (druggy) + client.screen += hud_used.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + + proc/handle_virus_updates() + if(bodytemperature > 406) + for(var/datum/disease/D in viruses) + D.cure() + return + + proc/handle_stomach() + spawn(0) + for(var/mob/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + del(M) continue - if(istype(M, /mob/living/carbon) && src.stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - del(M) - continue - if(air_master.current_cycle%3==1) - if(!M.nodamage) - M.adjustBruteLoss(5) - src.nutrition += 10 + if(air_master.current_cycle%3==1) + if(!M.nodamage) + M.adjustBruteLoss(5) + nutrition += 10 diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 9e0234daaee..b71e2d8abba 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -469,14 +469,13 @@ return /mob/living/carbon/alien/larva/updatehealth() - if (nodamage == 0) - //oxyloss is only used for suicide - //toxloss isn't used for aliens, its actually used as alien powers!! - health = 25 - getOxyLoss() - getFireLoss() - getBruteLoss() - else + if(nodamage) health = 25 stat = 0 - + else + //oxyloss is only used for suicide + //toxloss isn't used for aliens, its actually used as alien powers!! + health = 25 - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() /* Commented out because it's duplicated in life.dm /mob/living/carbon/alien/larva/proc/grow() // Larvae can grow into full fledged Xenos if they survive long enough -- TLE diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index f6a82d35c01..b65840a0e08 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -54,11 +54,8 @@ //stuff in the stomach handle_stomach() - //Status updates, death etc. handle_regular_status_updates() - - //Handles updating canmove. update_canmove() // Grabbing @@ -68,432 +65,411 @@ if(client) handle_regular_hud_updates() - clamp_values() - /mob/living/carbon/alien/larva - proc - clamp_values() + proc/handle_mutations_and_radiation() - // SetStunned(min(stunned, 20)) - SetParalysis(min(paralysis, 20)) - // SetWeakened(min(weakened, 20)) - sleeping = max(min(sleeping, 20), 0) + if(amount_grown == 200) + src << "\green You are growing into a beautiful alien! It is time to choose a caste." + src << "\green There are three to choose from:" + src << "\green Hunters are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." + src << "\green Sentinels are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." + src << "\green Drones are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." + var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") - handle_mutations_and_radiation() + var/mob/living/carbon/alien/humanoid/new_xeno + switch(alien_caste) + if("Hunter") + new_xeno = new /mob/living/carbon/alien/humanoid/hunter (loc) + if("Sentinel") + new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (loc) + if("Drone") + new_xeno = new /mob/living/carbon/alien/humanoid/drone (loc) - if(amount_grown == 200) - src << "\green You are growing into a beautiful alien! It is time to choose a caste." - src << "\green There are three to choose from:" - src << "\green Hunters are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Hunters generate plasma slowly and have low reserves." - src << "\green Sentinels are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the hunters." - src << "\green Drones are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded alien queen." - var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Hunter","Sentinel","Drone") + new_xeno.mind_initialize(src, alien_caste) + new_xeno.key = key - var/mob/living/carbon/alien/humanoid/new_xeno - switch(alien_caste) - if("Hunter") - new_xeno = new /mob/living/carbon/alien/humanoid/hunter (loc) - if("Sentinel") - new_xeno = new /mob/living/carbon/alien/humanoid/sentinel (loc) - if("Drone") - new_xeno = new /mob/living/carbon/alien/humanoid/drone (loc) + del(src) + return + //grow!! but not if metroid or dead + if(health>-100) + amount_grown++ - new_xeno.mind_initialize(src, alien_caste) - new_xeno.key = key + if (radiation) + if (radiation > 100) + radiation = 100 + Weaken(10) + src << "\red You feel weak." + emote("collapse") - del(src) - return - //grow!! but not if metroid or dead - if(health>-100) - amount_grown++ + if (radiation < 0) + radiation = 0 - if (radiation) - if (radiation > 100) - radiation = 100 - Weaken(10) - src << "\red You feel weak." - emote("collapse") - - if (radiation < 0) - radiation = 0 - - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - Weaken(3) - src << "\red You feel weak." - emote("collapse") updatehealth() - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - updatehealth() + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + src << "\red You feel weak." + emote("collapse") + updatehealth() - update_mind() - if(!mind && client) - mind = new - mind.current = src - mind.assigned_role = "Larva" - mind.key = key + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + updatehealth() - breathe() + proc/update_mind() + if(!mind && client) + mind = new + mind.current = src + mind.assigned_role = "Larva" + mind.key = key - if(reagents.has_reagent("lexorin")) return - if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return + proc/breathe() - var/datum/gas_mixture/environment = loc.return_air() - var/datum/air_group/breath - // HACK NEED CHANGING LATER - if(health < 0) - losebreath++ + if(reagents.has_reagent("lexorin")) return + if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return - if(losebreath>0) //Suffocating so do not take a breath - losebreath-- - if (prob(75)) //High chance of gasping for air - spawn emote("gasp") + var/datum/gas_mixture/environment = loc.return_air() + var/datum/air_group/breath + // HACK NEED CHANGING LATER + if(health < 0) + losebreath++ + + if(losebreath>0) //Suffocating so do not take a breath + losebreath-- + if (prob(75)) //High chance of gasping for air + spawn emote("gasp") + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + else + //First, check for air from internal atmosphere (using an air tank and mask generally) + breath = get_breath_from_internal(BREATH_VOLUME) + + //No breath from internal atmosphere so get breath from location + if(!breath) + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) + else if(istype(loc, /turf/)) + var/breath_moles = 0 + /*if(environment.return_pressure() > ONE_ATMOSPHERE) + // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) + breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) + else*/ + // Not enough air around, take a percentage of what's there to model this properly + breath_moles = environment.total_moles()*BREATH_PERCENTAGE + + breath = loc.remove_air(breath_moles) + + // Handle chem smoke effect -- Doohl + for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) + if(smoke.reagents.total_volume) + smoke.reagents.reaction(src, INGEST) + spawn(5) + if(smoke) + smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? + break // If they breathe in the nasty stuff once, no need to continue checking + + + else //Still give containing object the chance to interact if(istype(loc, /obj/)) var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - else - //First, check for air from internal atmosphere (using an air tank and mask generally) - breath = get_breath_from_internal(BREATH_VOLUME) - //No breath from internal atmosphere so get breath from location - if(!breath) - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME) - else if(istype(loc, /turf/)) - var/breath_moles = 0 - /*if(environment.return_pressure() > ONE_ATMOSPHERE) - // Loads of air around (pressure effect will be handled elsewhere), so lets just take a enough to fill our lungs at normal atmos pressure (using n = Pv/RT) - breath_moles = (ONE_ATMOSPHERE*BREATH_VOLUME/R_IDEAL_GAS_EQUATION*environment.temperature) - else*/ - // Not enough air around, take a percentage of what's there to model this properly - breath_moles = environment.total_moles()*BREATH_PERCENTAGE + handle_breath(breath) - breath = loc.remove_air(breath_moles) - - // Handle chem smoke effect -- Doohl - for(var/obj/effect/effect/chem_smoke/smoke in view(1, src)) - if(smoke.reagents.total_volume) - smoke.reagents.reaction(src, INGEST) - spawn(5) - if(smoke) - smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs? - break // If they breathe in the nasty stuff once, no need to continue checking + if(breath) + loc.assume_air(breath) - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - handle_breath(breath) - - if(breath) - loc.assume_air(breath) - - - get_breath_from_internal(volume_needed) + proc/get_breath_from_internal(volume_needed) + if(internal) + if (!contents.Find(internal)) + internal = null + if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) + internal = null if(internal) - if (!contents.Find(internal)) - internal = null - if (!wear_mask || !(wear_mask.flags & MASKINTERNALS) ) - internal = null - if(internal) - if (internals) - internals.icon_state = "internal1" - return internal.remove_air_volume(volume_needed) - else - if (internals) - internals.icon_state = "internal0" - return null - - handle_breath(datum/gas_mixture/breath) - if(nodamage) - return - - if(!breath || (breath.total_moles() == 0)) - //Aliens breathe in vaccuum - return 0 - - var/toxins_used = 0 - var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - - //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure - - if(Toxins_pp) // Detect toxins in air - - adjustToxLoss(breath.toxins*250) - toxins_alert = max(toxins_alert, 1) - - toxins_used = breath.toxins - + if (internals) + internals.icon_state = "internal1" + return internal.remove_air_volume(volume_needed) else - toxins_alert = 0 - - //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used - - if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in src.mutations)) // Hot air hurts :( - if(prob(20)) - src << "\red You feel a searing heat in your lungs!" - fire_alert = max(fire_alert, 1) - else - fire_alert = 0 - - //Temporary fixes to the alerts. - - return 1 - - handle_environment() - - //If there are alien weeds on the ground then heal if needed or give some toxins - if(locate(/obj/effect/alien/weeds) in loc) - if(health >= 25) - adjustToxLoss(5) - else - adjustBruteLoss(-5) - adjustFireLoss(-5) + if (internals) + internals.icon_state = "internal0" + return null + proc/handle_breath(datum/gas_mixture/breath) + if(nodamage) return + if(!breath || (breath.total_moles() == 0)) + //Aliens breathe in vaccuum + return 0 - handle_chemicals_in_body() - if(reagents) reagents.metabolize(src) + var/toxins_used = 0 + var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - if(FAT in mutations) - if(nutrition < 100) - if(prob(round((50 - nutrition) / 100))) - src << "\blue You feel fit again!" - mutations.Add(FAT) + //Partial pressure of the toxins in our breath + var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + + if(Toxins_pp) // Detect toxins in air + + adjustToxLoss(breath.toxins*250) + toxins_alert = max(toxins_alert, 1) + + toxins_used = breath.toxins + + else + toxins_alert = 0 + + //Breathe in toxins and out oxygen + breath.toxins -= toxins_used + breath.oxygen += toxins_used + + if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :( + if(prob(20)) + src << "\red You feel a searing heat in your lungs!" + fire_alert = max(fire_alert, 1) + else + fire_alert = 0 + + //Temporary fixes to the alerts. + + return 1 + + proc/handle_environment() + + //If there are alien weeds on the ground then heal if needed or give some toxins + if(locate(/obj/effect/alien/weeds) in loc) + if(health >= 25) + adjustToxLoss(5) else - if(nutrition > 500) - if(prob(5 + round((nutrition - 200) / 2))) - src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) + adjustBruteLoss(-5) + adjustFireLoss(-5) - if (nutrition > 0) - nutrition-= HUNGER_FACTOR + return - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - jitteriness = max(0, jitteriness - 5) - else - dizziness = max(0, dizziness - 1) - jitteriness = max(0, jitteriness - 1) + proc/handle_chemicals_in_body() + if(reagents) reagents.metabolize(src) - updatehealth() + if(FAT in mutations) + if(nutrition < 100) + if(prob(round((50 - nutrition) / 100))) + src << "\blue You feel fit again!" + mutations.Add(FAT) + else + if(nutrition > 500) + if(prob(5 + round((nutrition - 200) / 2))) + src << "\red You suddenly feel blubbery!" + mutations.Add(FAT) - return //TODO: DEFERRED + if (nutrition > 0) + nutrition-= HUNGER_FACTOR - handle_regular_status_updates() + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) - health = 25 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + jitteriness = max(0, jitteriness - 5) + else + dizziness = max(0, dizziness - 1) + jitteriness = max(0, jitteriness - 1) - if(getOxyLoss() > 50) Paralyse(3) + updatehealth() - if(sleeping) + return //TODO: DEFERRED + + proc/handle_regular_status_updates() + updatehealth() + + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < config.health_threshold_dead || brain_op_stage == 4.0) + death() + blinded = 1 + silent = 0 + return 1 + + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) Paralyse(3) - //if (prob(10) && health) spawn(0) emote("snore") Invalid Emote - sleeping-- - if(resting) - Weaken(5) + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("hiss") + //CONSCIOUS + else + stat = CONSCIOUS + /* What in the living hell is this?*/ if(move_delay_add > 0) move_delay_add = max(0, move_delay_add - rand(1, 2)) - if(health < config.health_threshold_dead || brain_op_stage == 4.0) - death() - else if(health < config.health_threshold_crit) - if(health <= 20 && prob(1)) spawn(0) emote("gasp") - - //if(!rejuv) oxyloss++ - if(!reagents.has_reagent("inaprovaline")) adjustOxyLoss(1) - - if(stat != 2) stat = 1 - Paralyse(5) - - if (stat != 2) //Alive. - - if (paralysis || stunned || weakened) //Stunned etc. - if (stunned > 0) - AdjustStunned(-1) - stat = 0 - if (weakened > 0) - AdjustWeakened(-1) - lying = 1 - stat = 0 - if (paralysis > 0) - AdjustParalysis(-1) - blinded = 1 - lying = 1 - stat = 1 - var/h = hand - hand = 0 - drop_item() - hand = 1 - drop_item() - hand = h - - else //Not stunned. - lying = 0 - stat = 0 - - else //Dead. - lying = 1 + //Eyes + if(sdisabilities & 1) //disabled-blind, doesn't get better on its own blinded = 1 - stat = 2 - - if (stuttering) stuttering-- - - if (eye_blind) - eye_blind-- + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) - if (ear_deaf > 0) ear_deaf-- - if (ear_damage < 25) - ear_damage -= 0.05 - ear_damage = max(ear_damage, 0) + //Ears + if(sdisabilities & 4) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) - density = !( lying ) + //Other + if(stunned) + AdjustStunned(-1) - if ((sdisabilities & 1)) - blinded = 1 - if ((sdisabilities & 4)) - ear_deaf = 1 + if(weakened) + weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times - if (eye_blurry > 0) - eye_blurry-- - eye_blurry = max(0, eye_blurry) + if(stuttering) + stuttering = max(stuttering-1, 0) - if (druggy > 0) - druggy-- - druggy = max(0, druggy) + if(silent) + silent = max(silent-1, 0) - return 1 - - handle_regular_hud_updates() - - if (stat == 2 || (XRAY in src.mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = 2 - else if (stat != 2) - sight |= SEE_MOBS - sight &= ~SEE_TURFS - sight &= ~SEE_OBJS - see_in_dark = 4 - see_invisible = 2 - - if (sleep) sleep.icon_state = text("sleep[]", sleeping) - if (rest) rest.icon_state = text("rest[]", resting) - - if (healths) - if (stat != 2) - switch(health) - if(25 to INFINITY) - healths.icon_state = "health0" - if(19 to 25) - healths.icon_state = "health1" - if(13 to 19) - healths.icon_state = "health2" - if(7 to 13) - healths.icon_state = "health3" - if(0 to 7) - healths.icon_state = "health4" - else - healths.icon_state = "health5" - else - healths.icon_state = "health6" - - if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" + if(druggy) + druggy = max(druggy-1, 0) + return 1 - if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" - if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" - if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" - //NOTE: the alerts dont reset when youre out of danger. dont blame me, - //blame the person who coded them. Temporary fix added. + proc/handle_regular_hud_updates() + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = 2 + else if (stat != 2) + sight |= SEE_MOBS + sight &= ~SEE_TURFS + sight &= ~SEE_OBJS + see_in_dark = 4 + see_invisible = 2 - client.screen -= hud_used.blurry - client.screen -= hud_used.druggy - client.screen -= hud_used.vimpaired - - if ((blind && stat != 2)) - if ((blinded)) - blind.layer = 18 - else - blind.layer = 0 - - if (disabilities & 1) - client.screen += hud_used.vimpaired - - if (eye_blurry) - client.screen += hud_used.blurry - - if (druggy) - client.screen += hud_used.druggy + if (sleep) sleep.icon_state = text("sleep[]", sleeping) + if (rest) rest.icon_state = text("rest[]", resting) + if (healths) if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) + switch(health) + if(25 to INFINITY) + healths.icon_state = "health0" + if(19 to 25) + healths.icon_state = "health1" + if(13 to 19) + healths.icon_state = "health2" + if(7 to 13) + healths.icon_state = "health3" + if(0 to 7) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" - return 1 + if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" - handle_random_events() - return - handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" + //NOTE: the alerts dont reset when youre out of danger. dont blame me, + //blame the person who coded them. Temporary fix added. - handle_stomach() - spawn(0) - for(var/mob/M in stomach_contents) - if(M.loc != src) + + client.screen -= hud_used.blurry + client.screen -= hud_used.druggy + client.screen -= hud_used.vimpaired + + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & 1) + client.screen += hud_used.vimpaired + + if (eye_blurry) + client.screen += hud_used.blurry + + if (druggy) + client.screen += hud_used.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + + proc/handle_random_events() + return + + proc/handle_virus_updates() + if(bodytemperature > 406) + for(var/datum/disease/D in viruses) + D.cure() + return + + proc/handle_stomach() + spawn(0) + for(var/mob/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) stomach_contents.Remove(M) + del(M) continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - del(M) - continue - if(air_master.current_cycle%3==1) - if(!M.nodamage) - M.adjustBruteLoss(5) - nutrition += 10 \ No newline at end of file + if(air_master.current_cycle%3==1) + if(!M.nodamage) + M.adjustBruteLoss(5) + nutrition += 10 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index be90cb872a4..9b30ff5d76d 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -43,3 +43,8 @@ src.verbs += /mob/proc/ghost return + +/mob/living/carbon/brain/update_canmove() + if(in_contents_of(/obj/mecha)) canmove = 1 + else canmove = 0 + return canmove \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index ce5beed7410..983690f1553 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -1,313 +1,282 @@ -/mob/living/carbon/brain +/mob/living/carbon/brain/Life() + set invisibility = 0 + set background = 1 + ..() - Life() - set invisibility = 0 - set background = 1 - - ..() - - var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE - if(loc) - environment = loc.return_air() + var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE + if(loc) + environment = loc.return_air() //Apparently, the person who wrote this code designed it so that //blinded get reset each cycle and then get activated later in the //code. Very ugly. I dont care. Moving this stuff here so its easy //to find it. - blinded = null + blinded = null //Disease Check - handle_virus_updates() + handle_virus_updates() //Handle temperature/pressure differences between body and environment - if(environment) // More error checking -- TLE - handle_environment(environment) + if(environment) // More error checking -- TLE + handle_environment(environment) //Mutations and radiation - handle_mutations_and_radiation() + handle_mutations_and_radiation() //Chemicals in the body - handle_chemicals_in_body() + handle_chemicals_in_body() //Status updates, death etc. - handle_regular_status_updates() - - if(client) - handle_regular_hud_updates() - - // Yup. - update_canmove() - - clamp_values() - - proc - - clamp_values() - - AdjustParalysis(0) -// AdjustStunned(0) -// AdjustWeakened(0) - adjustBruteLoss(0) - adjustFireLoss(0) - adjustOxyLoss(0) - adjustToxLoss(0) - - handle_mutations_and_radiation() - - if (radiation) - if (radiation > 100) - radiation = 100 - Weaken(10) - src << "\red You feel weak." - - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) - adjustToxLoss(1) - updatehealth() - - if(50 to 74) - radiation -= 2 - adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - Weaken(3) - src << "\red You feel weak." -// emote("collapse") - updatehealth() - - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() - - - handle_environment(datum/gas_mixture/environment) - if(!environment) - return - var/environment_heat_capacity = environment.heat_capacity() - if(istype(loc, /turf/space)) - environment_heat_capacity = loc:heat_capacity - - if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) - var/transfer_coefficient - - transfer_coefficient = 1 - if(wear_mask && (wear_mask.body_parts_covered & HEAD) && (environment.temperature < wear_mask.protective_temperature)) - transfer_coefficient *= wear_mask.heat_transfer_coefficient - - handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) - - if(stat==2) - bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) - - //Account for massive pressure differences - - return //TODO: DEFERRED - - handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(nodamage) return - - if(exposed_temperature > bodytemperature) - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - //adjustFireLoss(5.0*discomfort) - adjustFireLoss(20.0*discomfort) - - else - var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) - //adjustFireLoss(2.5*discomfort) - adjustFireLoss(5.0*discomfort) - - - - handle_chemicals_in_body() - - if(reagents) reagents.metabolize(src) - - if (drowsyness) - drowsyness-- - eye_blurry = max(2, eye_blurry) - if (prob(5)) - sleeping += 1 - Paralyse(5) - - confused = max(0, confused - 1) - // decrement dizziness counter, clamped to 0 - if(resting) - dizziness = max(0, dizziness - 5) - else - dizziness = max(0, dizziness - 1) - - updatehealth() - - return //TODO: DEFERRED - - handle_regular_status_updates() - - health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - - if(getOxyLoss() > 25) Paralyse(3) - - if(sleeping) - Paralyse(5) - if (prob(1) && health) spawn(0) emote("snore") - - if(resting) - Weaken(5) - - if(stat != 2 && (!container && (health < config.health_threshold_dead || (config.revival_brain_life >= 0 && ((world.time - timeofhostdeath) > config.revival_brain_life ))))) - death() - else if(health < config.health_threshold_crit) - if(health <= 20 && prob(1)) spawn(0) emote("gasp") - - //if(!rejuv) oxyloss++ - if(!reagents.has_reagent("inaprovaline")) adjustOxyLoss(1) - - if(stat != 2) stat = 1 - Paralyse(5) - - if (stat != 2) //Alive. - - if (paralysis || stunned || weakened) //Stunned etc. - if (stunned > 0) - AdjustStunned(-1) - stat = 0 - if (weakened > 0) - AdjustWeakened(-1) - lying = 1 - stat = 0 - if (paralysis > 0) - AdjustParalysis(-1) - blinded = 1 - lying = 1 - stat = 1 - var/h = hand - hand = 0 - drop_item() - hand = 1 - drop_item() - hand = h - - else //Not stunned. - lying = 0 - stat = 0 - - else //Dead. - lying = 1 - blinded = 1 - stat = 2 - - if (stuttering) stuttering-- - - if (eye_blind) - eye_blind-- - blinded = 1 - - if (ear_deaf > 0) ear_deaf-- - if (ear_damage < 25) - ear_damage -= 0.05 - ear_damage = max(ear_damage, 0) - -// density = !( lying ) - - if (sdisabilities & 1) - blinded = 1 - if (sdisabilities & 4) - ear_deaf = 1 - - if (eye_blurry > 0) - eye_blurry-- - eye_blurry = max(0, eye_blurry) - - if (druggy > 0) - druggy-- - druggy = max(0, druggy) - - return 1 + handle_regular_status_updates() + update_canmove() + if(client) handle_regular_hud_updates() - if (stat == 2 || (XRAY in src.mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = 2 - else if (stat != 2) - sight &= ~SEE_TURFS - sight &= ~SEE_MOBS - sight &= ~SEE_OBJS - see_in_dark = 2 - see_invisible = 0 - if (sleep) sleep.icon_state = text("sleep[]", sleeping) - if (rest) rest.icon_state = text("rest[]", resting) +/mob/living/carbon/brain/ + proc/handle_mutations_and_radiation() - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" + if (radiation) + if (radiation > 100) + radiation = 100 + Weaken(10) + src << "\red You feel weak." - if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) + adjustToxLoss(1) + updatehealth() - client.screen -= hud_used.blurry - client.screen -= hud_used.druggy - client.screen -= hud_used.vimpaired + if(50 to 74) + radiation -= 2 + adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + src << "\red You feel weak." +// emote("collapse") + updatehealth() - if ((blind && stat != 2)) - if ((blinded)) - blind.layer = 18 - else - blind.layer = 0 + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() - if (disabilities & 1) - client.screen += hud_used.vimpaired - if (eye_blurry) - client.screen += hud_used.blurry - - if (druggy) - client.screen += hud_used.druggy - - if (stat != 2) - if (machine) - if (!( machine.check_eye(src) )) - reset_view(null) - else - if(!client.adminobs) - reset_view(null) - - return 1 - - handle_virus_updates() - if(bodytemperature > 409) - for(var/datum/disease/D in viruses) - D.cure() + proc/handle_environment(datum/gas_mixture/environment) + if(!environment) return + var/environment_heat_capacity = environment.heat_capacity() + if(istype(loc, /turf/space)) + environment_heat_capacity = loc:heat_capacity - update_canmove() - if(in_contents_of(/obj/mecha)) canmove = 1 - else canmove = 0 - return canmove \ No newline at end of file + if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10))) + var/transfer_coefficient + + transfer_coefficient = 1 + if(wear_mask && (wear_mask.body_parts_covered & HEAD) && (environment.temperature < wear_mask.protective_temperature)) + transfer_coefficient *= wear_mask.heat_transfer_coefficient + + handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient) + + if(stat==2) + bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000) + + //Account for massive pressure differences + + return //TODO: DEFERRED + + proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) + if(nodamage) return + + if(exposed_temperature > bodytemperature) + var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) + //adjustFireLoss(2.5*discomfort) + //adjustFireLoss(5.0*discomfort) + adjustFireLoss(20.0*discomfort) + + else + var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) + //adjustFireLoss(2.5*discomfort) + adjustFireLoss(5.0*discomfort) + + + + proc/handle_chemicals_in_body() + + if(reagents) reagents.metabolize(src) + + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) + if (prob(5)) + sleeping += 1 + Paralyse(5) + + confused = max(0, confused - 1) + // decrement dizziness counter, clamped to 0 + if(resting) + dizziness = max(0, dizziness - 5) + else + dizziness = max(0, dizziness - 1) + + updatehealth() + + return //TODO: DEFERRED + + + proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> + updatehealth() + + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if( !container && (health < config.health_threshold_dead || ((world.time - timeofhostdeath) > config.revival_brain_life)) ) + death() + blinded = 1 + silent = 0 + return 1 + + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 25) || (config.health_threshold_crit > health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) + Paralyse(3) + + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("snore") + //CONSCIOUS + else + stat = CONSCIOUS + + + //Eyes + if(sdisabilities & 1) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(sdisabilities & 4) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) + + //Other + if(stunned) + AdjustStunned(-1) + + if(weakened) + weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times + + if(stuttering) + stuttering = max(stuttering-1, 0) + + if(silent) + silent = max(silent-1, 0) + + if(druggy) + druggy = max(druggy-1, 0) + return 1 + + + proc/handle_regular_hud_updates() + + if (stat == 2 || (XRAY in src.mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = 2 + else if (stat != 2) + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = 0 + + if (sleep) sleep.icon_state = text("sleep[]", sleeping) + if (rest) rest.icon_state = text("rest[]", resting) + + if (healths) + if (stat != 2) + switch(health) + if(100 to INFINITY) + healths.icon_state = "health0" + if(80 to 100) + healths.icon_state = "health1" + if(60 to 80) + healths.icon_state = "health2" + if(40 to 60) + healths.icon_state = "health3" + if(20 to 40) + healths.icon_state = "health4" + if(0 to 20) + healths.icon_state = "health5" + else + healths.icon_state = "health6" + else + healths.icon_state = "health7" + + if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" + + client.screen -= hud_used.blurry + client.screen -= hud_used.druggy + client.screen -= hud_used.vimpaired + + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 + else + blind.layer = 0 + + if (disabilities & 1) + client.screen += hud_used.vimpaired + + if (eye_blurry) + client.screen += hud_used.blurry + + if (druggy) + client.screen += hud_used.druggy + + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) + else + if(!client.adminobs) + reset_view(null) + + return 1 + + proc/handle_virus_updates() + if(bodytemperature > 409) + for(var/datum/disease/D in viruses) + D.cure() + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index f7bdaae699a..36d01d2c546 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -19,11 +19,15 @@ ..() + //Apparently, the person who wrote this code designed it so that + //blinded get reset each cycle and then get activated later in the + //code. Very ugly. I dont care. Moving this stuff here so its easy + //to find it. + blinded = null + //TODO: seperate this out var/datum/gas_mixture/environment = loc.return_air() - - //No need to update all of these procs if the guy is dead. if(stat != DEAD) if(air_master.current_cycle%4==2) //First, resolve location and get a breath @@ -52,15 +56,6 @@ //Random events (vomiting etc) handle_random_events() - update_canmove() //TODO: remove from life() if viable ~Carn - //Removed for dead people, that's at least a small step closer to removing it! - Nodrak - - else if(stat == DEAD) - canmove = 0 //Since canmove doesn't update if they're dead, force this var 0. - - //These should be updated whether the mob is dead or alive - blinded = null - //Update Mind update_mind() @@ -70,10 +65,12 @@ //stuff in the stomach handle_stomach() + //Flashlights and such + UpdateLuminosity() //Status updates, death etc. - UpdateLuminosity() handle_regular_status_updates() //TODO: optimise ~Carn + update_canmove() //Update our name based on whether our face is obscured/disfigured name = get_visible_name() //TODO: this was broken by the dismemberment revert ~Carn @@ -85,14 +82,6 @@ for(var/obj/item/weapon/grab/G in src) G.process() - //TODO: optimise this. - if(isturf(loc) && rand(1,1000) == 1) //0.1% chance of playing a scary sound to someone who's in complete darkness - var/turf/currentTurf = loc - if(!currentTurf.sd_lumcount) - playsound_local(src,pick(scarySounds),50, 1, -1) - - clamp_values() //TODO: finish removing this ~Carn - /mob/living/carbon/human/calculate_affecting_pressure(var/pressure) ..() @@ -111,20 +100,6 @@ return ONE_ATMOSPHERE - pressure_difference /mob/living/carbon/human - - //I've rewritten this to do what it was intended to do. - //This can probably be removed like Rockdtben suggested, but I'd like to go over the damage procs first just to be safe. - //Perhaps code view-vars to be unable to directly edit the damagevariables without using procs - proc/clamp_values() -// stunned = max( min(stunned,20), 0 ) // positive and under 20 - paralysis = max( min(paralysis,20), 0 ) // positive and under 20 -// weakened = max( min(weakened,20), 0 ) // positive and under 20 - sleeping = max( min(sleeping, 20), 0 ) // positive and under 20 - oxyloss = max(oxyloss,0) // positive - toxloss = max(toxloss,0) // positive -// bruteloss = max(bruteloss,0) // positive -// fireloss = max(fireloss,0) // positive - proc/update_mind() if(!mind && client) mind = new @@ -136,38 +111,6 @@ proc/handle_disabilities() - if(hallucination > 0) - if(hallucination >= 20 && health > 0) - if(prob(3)) - fake_attack(src) - //for(var/atom/a in hallucinations) - // a.hallucinate(src) - if(!handling_hal && hallucination > 20) - spawn handle_hallucinations() //The not boring kind! - - if(hallucination <= 2) - halloss = 0 - hallucination = 0 - else - hallucination -= 2 - //if(health < 0) - // for(var/obj/a in hallucinations) - // del a - else - //halloss = 0 - for(var/atom/a in hallucinations) - del a - - if(halloss > 100) - src << "You're too tired to keep going..." - for(var/mob/O in viewers(src, null)) - if(O == src) - continue - O.show_message(text("\red [src] slumps to the ground panting, too weak to continue fighting."), 1) - Paralyse(15) - setHalLoss(99) - - if (disabilities & 2) if ((prob(1) && paralysis < 1 && r_epil < 1)) src << "\red You have a seizure!" @@ -262,32 +205,33 @@ if (radiation < 0) radiation = 0 - switch(radiation) - if(1 to 49) - radiation-- - if(prob(25)) + else + switch(radiation) + if(1 to 49) + radiation-- + if(prob(25)) + adjustToxLoss(1) + updatehealth() + + if(50 to 74) + radiation -= 2 adjustToxLoss(1) + if(prob(5)) + radiation -= 5 + Weaken(3) + src << "\red You feel weak." + emote("collapse") updatehealth() - if(50 to 74) - radiation -= 2 - adjustToxLoss(1) - if(prob(5)) - radiation -= 5 - Weaken(3) - src << "\red You feel weak." - emote("collapse") - updatehealth() - - if(75 to 100) - radiation -= 3 - adjustToxLoss(3) - if(prob(1)) - src << "\red You mutate!" - randmutb(src) - domutcheck(src,null) - emote("gasp") - updatehealth() + if(75 to 100) + radiation -= 3 + adjustToxLoss(3) + if(prob(1)) + src << "\red You mutate!" + randmutb(src) + domutcheck(src,null) + emote("gasp") + updatehealth() proc/breathe() @@ -453,7 +397,7 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - sleeping = max(src.sleeping+2, 10) + sleeping = max(sleeping+2, 10) else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) emote(pick("giggle", "laugh")) @@ -743,59 +687,66 @@ proc/handle_regular_status_updates() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP blinded = 1 - stat = DEAD silent = 0 else //ALIVE. LIGHTS ARE ON + updatehealth() //TODO if(health < config.health_threshold_dead || brain_op_stage == 4.0) death() blinded = 1 - stat = DEAD silent = 0 return 1 - stat = CONSCIOUS - if(getOxyLoss() > 50) - Paralyse(3) - - if(health < config.health_threshold_crit) //UNCONSCIOUS. NO-ONE IS HOME + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) ) if( health <= 20 && prob(1) ) spawn(0) emote("gasp") - if(!reagents.has_reagent("inaprovaline")) adjustOxyLoss(1) + Paralyse(3) - stat = UNCONSCIOUS - Paralyse(5) + if(hallucination) + if(hallucination >= 20) + if(prob(3)) + fake_attack(src) + if(!handling_hal) + spawn handle_hallucinations() //The not boring kind! - if(silent) - silent = max(silent-1, 0) + if(hallucination<=2) + hallucination = 0 + halloss = 0 + else + hallucination -= 2 - if(stunned > 0) - AdjustStunned(-1) - if(weakened > 0) - AdjustWeakened(-1) + else + for(var/atom/a in hallucinations) + del a - //Incapacitated - if(paralysis > 0) + if(halloss > 100) + src << "You're too tired to keep going..." + for(var/mob/O in oviewers(src, null)) + O.show_message("[src] slumps to the ground panting, too weak to continue fighting.", 1) + Paralyse(3) + setHalLoss(99) + + if(paralysis) AdjustParalysis(-1) blinded = 1 stat = UNCONSCIOUS - - if(sleeping > 0) + else if(sleeping) handle_dreams() adjustHalLoss(-5) + sleeping = max(sleeping-1, 0) blinded = 1 stat = UNCONSCIOUS if( prob(10) && health && !hal_crit ) spawn(0) emote("snore") - sleeping = max(sleeping-1, 0) + //CONSCIOUS + else + stat = CONSCIOUS - if(stuttering) - stuttering = max(stuttering-1, 0) - - //Eyes & Ears + //Eyes if(sdisabilities & 1) //disabled-blind, doesn't get better on its own blinded = 1 else if(eye_blind) //blindness, heals slowly over time @@ -807,6 +758,7 @@ else if(eye_blurry) //blurry eyes heal slowly eye_blurry = max(eye_blurry-1, 0) + //Ears if(sdisabilities & 4) //disabled-deaf, doesn't get better on its own ear_deaf = max(ear_deaf, 1) else if(ear_deaf) //deafness, heals slowly over time @@ -817,6 +769,19 @@ else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs ear_damage = max(ear_damage-0.05, 0) + //Other + if(stunned) + AdjustStunned(-1) + + if(weakened) + weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times + + if(stuttering) + stuttering = max(stuttering-1, 0) + + if(silent) + silent = max(silent-1, 0) + if(druggy) druggy = max(druggy-1, 0) return 1 @@ -925,7 +890,7 @@ - /* HUD shit goes here, as long as it doesn't modify src.sight flags */ + /* HUD shit goes here, as long as it doesn't modify sight flags */ // The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl if(istype(glasses, /obj/item/clothing/glasses/hud/health)) if(client) @@ -1055,27 +1020,24 @@ bodytemp.icon_state = "temp-4" if(!client) return 0 //Wish we did not need these - client.screen -= hud_used.blurry - client.screen -= hud_used.druggy - client.screen -= hud_used.vimpaired - client.screen -= hud_used.darkMask + client.screen.Remove(hud_used.blurry, hud_used.druggy, hud_used.vimpaired, hud_used.darkMask) if ((blind && stat != 2)) - if ((blinded)) + if(blinded) blind.layer = 18 else blind.layer = 0 - if (disabilities & 1 && !istype(glasses, /obj/item/clothing/glasses/regular) ) + if( disabilities & 1 && !istype(glasses, /obj/item/clothing/glasses/regular) ) client.screen += hud_used.vimpaired - if (eye_blurry) + if(eye_blurry) client.screen += hud_used.blurry - if (druggy) + if(druggy) client.screen += hud_used.druggy - if ((istype(head, /obj/item/clothing/head/welding)) ) + if( istype(head, /obj/item/clothing/head/welding) ) if(!head:up && tinted_weldhelh) client.screen += hud_used.darkMask @@ -1114,7 +1076,7 @@ for(var/mob/O in viewers(world.view, src)) O.show_message(text("\red [] throws up!", src), 1) - playsound(src.loc, 'splat.ogg', 50, 1) + playsound(loc, 'splat.ogg', 50, 1) var/turf/location = loc if (istype(location, /turf/simulated)) @@ -1126,6 +1088,12 @@ // make it so you can only puke so fast lastpuke = 0 + //0.1% chance of playing a scary sound to someone who's in complete darkness + if(isturf(loc) && rand(1,1000) == 1) + var/turf/currentTurf = loc + if(!currentTurf.sd_lumcount) + playsound_local(src,pick(scarySounds),50, 1, -1) + proc/handle_virus_updates() if(bodytemperature > 406) for(var/datum/disease/D in viruses) @@ -1156,3 +1124,4 @@ if ((changeling.geneticdamage > 0)) changeling.geneticdamage = changeling.geneticdamage-1 +#undef HUMAN_MAX_OXYLOSS \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 47f3f3c54c4..e37371f8a40 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -11,14 +11,14 @@ /mob/living/carbon/monkey/Life() set invisibility = 0 set background = 1 - if (src.monkeyizing) return + if (monkeyizing) return ..() var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE - if(src.loc) + if(loc) environment = loc.return_air() - if (src.stat != DEAD) //still breathing + if (stat != DEAD) //still breathing //First, resolve location and get a breath if(air_master.current_cycle%4==2) //Only try to take a breath every 4 seconds, unless suffocating @@ -32,7 +32,7 @@ //blinded get reset each cycle and then get activated later in the //code. Very ugly. I dont care. Moving this stuff here so its easy //to find it. - src.blinded = null + blinded = null //Disease Check handle_virus_updates() @@ -53,12 +53,12 @@ //Disabilities handle_disabilities() - //Status updates, death etc. + //Flashlights and such UpdateLuminosity() + + //Status updates, death etc. handle_regular_status_updates() update_canmove() - clamp_values() - if(client) handle_regular_hud_updates() @@ -79,33 +79,27 @@ /mob/living/carbon/monkey - - proc/clamp_values() -// AdjustStunned(0) - AdjustParalysis(0) -// AdjustWeakened(0) - proc/handle_disabilities() - if (src.disabilities & 2) - if ((prob(1) && src.paralysis < 10 && src.r_epil < 1)) + if (disabilities & 2) + if ((prob(1) && paralysis < 10 && r_epil < 1)) src << "\red You have a seizure!" Paralyse(10) - if (src.disabilities & 4) - if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1)) - src.drop_item() + if (disabilities & 4) + if ((prob(5) && paralysis <= 1 && r_ch_cou < 1)) + drop_item() spawn( 0 ) emote("cough") return - if (src.disabilities & 8) - if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1)) + if (disabilities & 8) + if ((prob(10) && paralysis <= 1 && r_Tourette < 1)) Stun(10) spawn( 0 ) emote("twitch") return - if (src.disabilities & 16) + if (disabilities & 16) if (prob(10)) - src.stuttering = max(10, src.stuttering) + stuttering = max(10, stuttering) proc/update_mind() if(!mind && client) @@ -115,59 +109,59 @@ proc/handle_mutations_and_radiation() - if(src.getFireLoss()) + if(getFireLoss()) if((COLD_RESISTANCE in mutations) || prob(50)) - switch(src.getFireLoss()) + switch(getFireLoss()) if(1 to 50) - src.adjustFireLoss(-1) + adjustFireLoss(-1) if(51 to 100) - src.adjustFireLoss(-5) + adjustFireLoss(-5) - if ((HULK in mutations) && src.health <= 25) - src.mutations.Remove(HULK) + if ((HULK in mutations) && health <= 25) + mutations.Remove(HULK) src << "\red You suddenly feel very weak." Weaken(3) emote("collapse") - if (src.radiation) - if (src.radiation > 100) - src.radiation = 100 + if (radiation) + if (radiation > 100) + radiation = 100 Weaken(10) src << "\red You feel weak." emote("collapse") - switch(src.radiation) + switch(radiation) if(1 to 49) - src.radiation-- + radiation-- if(prob(25)) - src.adjustToxLoss(1) - src.updatehealth() + adjustToxLoss(1) + updatehealth() if(50 to 74) - src.radiation -= 2 - src.adjustToxLoss(1) + radiation -= 2 + adjustToxLoss(1) if(prob(5)) - src.radiation -= 5 + radiation -= 5 Weaken(3) src << "\red You feel weak." emote("collapse") - src.updatehealth() + updatehealth() if(75 to 100) - src.radiation -= 3 - src.adjustToxLoss(3) + radiation -= 3 + adjustToxLoss(3) if(prob(1)) src << "\red You mutate!" randmutb(src) domutcheck(src,null) emote("gasp") - src.updatehealth() + updatehealth() proc/breathe() - if(src.reagents) + if(reagents) - if(src.reagents.has_reagent("lexorin")) return + if(reagents.has_reagent("lexorin")) return if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite @@ -175,7 +169,7 @@ var/datum/air_group/breath if(losebreath>0) //Suffocating so do not take a breath - src.losebreath-- + losebreath-- if (prob(75)) //High chance of gasping for air spawn emote("gasp") if(istype(loc, /obj/)) @@ -224,21 +218,21 @@ proc/get_breath_from_internal(volume_needed) if(internal) - if (!contents.Find(src.internal)) + if (!contents.Find(internal)) internal = null if (!wear_mask || !(wear_mask.flags|MASKINTERNALS) ) internal = null if(internal) - if (src.internals) - src.internals.icon_state = "internal1" + if (internals) + internals.icon_state = "internal1" return internal.remove_air_volume(volume_needed) else - if (src.internals) - src.internals.icon_state = "internal0" + if (internals) + internals.icon_state = "internal0" return null proc/handle_breath(datum/gas_mixture/breath) - if(src.nodamage) + if(nodamage) return if(!breath || (breath.total_moles() == 0)) @@ -314,7 +308,7 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - src.sleeping = max(src.sleeping+2, 10) + sleeping = max(sleeping+2, 10) else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) emote(pick("giggle", "laugh")) @@ -361,7 +355,7 @@ return //TODO: DEFERRED proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity) - if(src.nodamage) return + if(nodamage) return var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0) //adjustFireLoss(2.5*discomfort) @@ -375,11 +369,11 @@ if(reagents) reagents.metabolize(src) - if (src.drowsyness) - src.drowsyness-- - src.eye_blurry = max(2, src.eye_blurry) + if (drowsyness) + drowsyness-- + eye_blurry = max(2, eye_blurry) if (prob(5)) - src.sleeping += 1 + sleeping += 1 Paralyse(5) confused = max(0, confused - 1) @@ -389,130 +383,120 @@ else dizziness = max(0, dizziness - 1) - src.updatehealth() + updatehealth() return //TODO: DEFERRED proc/handle_regular_status_updates() + updatehealth() - health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) + if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP + blinded = 1 + silent = 0 + else //ALIVE. LIGHTS ARE ON + if(health < config.health_threshold_dead || brain_op_stage == 4.0) + death() + blinded = 1 + stat = DEAD + silent = 0 + return 1 - if(getOxyLoss() > 25) Paralyse(3) + //UNCONSCIOUS. NO-ONE IS HOME + if( (getOxyLoss() > 25) || (config.health_threshold_crit > health) ) + if( health <= 20 && prob(1) ) + spawn(0) + emote("gasp") + if(!reagents.has_reagent("inaprovaline")) + adjustOxyLoss(1) + Paralyse(3) - if(src.sleeping) - Paralyse(5) - if (prob(1) && health) spawn(0) emote("snore") + if(paralysis) + AdjustParalysis(-1) + blinded = 1 + stat = UNCONSCIOUS + else if(sleeping) + sleeping = max(sleeping-1, 0) + blinded = 1 + stat = UNCONSCIOUS + if( prob(10) && health ) + spawn(0) + emote("snore") + //CONSCIOUS + else + stat = CONSCIOUS - if(src.resting) - Weaken(5) + //Eyes + if(sdisabilities & 1) //disabled-blind, doesn't get better on its own + blinded = 1 + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + blinded = 1 + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) - if(health < config.health_threshold_dead && stat != 2) - death() - else if(src.health < config.health_threshold_crit) - if(src.health <= 20 && prob(1)) spawn(0) emote("gasp") + //Ears + if(sdisabilities & 4) //disabled-deaf, doesn't get better on its own + ear_deaf = max(ear_deaf, 1) + else if(ear_deaf) //deafness, heals slowly over time + ear_deaf = max(ear_deaf-1, 0) + else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs + ear_damage = max(ear_damage-0.05, 0) - //if(!src.rejuv) src.oxyloss++ //-Nodrak (I can't believe I thought this should be commented back in) - if(!src.reagents.has_reagent("inaprovaline") && src.stat != 2) src.adjustOxyLoss(2) + //Other + if(stunned) + AdjustStunned(-1) - if(src.stat != 2) src.stat = 1 - Paralyse(5) + if(weakened) + weakened = max(weakened-1,0) //before you get mad Rockdtben: I done this so update_canmove isn't called multiple times - if (src.stat != 2) //Alive. + if(stuttering) + stuttering = max(stuttering-1, 0) - if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc. - if (src.stunned > 0) - AdjustStunned(-1) - src.stat = 0 - if (src.weakened > 0) - AdjustWeakened(-1) - src.lying = 1 - src.stat = 0 - if (src.paralysis > 0) - AdjustParalysis(-1) - src.blinded = 1 - src.lying = 1 - src.stat = 1 - var/h = src.hand - src.hand = 0 - drop_item() - src.hand = 1 - drop_item() - src.hand = h - - else //Not stunned. - src.lying = 0 - src.stat = 0 - - else //Dead. - src.lying = 1 - src.blinded = 1 - src.stat = 2 - - if (src.stuttering) src.stuttering-- - - if (src.eye_blind) - src.eye_blind-- - src.blinded = 1 - - if (src.ear_deaf > 0) src.ear_deaf-- - if (src.ear_damage < 25) - src.ear_damage -= 0.05 - src.ear_damage = max(src.ear_damage, 0) - - src.density = !( src.lying ) - - if (src.sdisabilities & 1) - src.blinded = 1 - if (src.sdisabilities & 4) - src.ear_deaf = 1 - - if (src.eye_blurry > 0) - src.eye_blurry-- - src.eye_blurry = max(0, src.eye_blurry) - - if (src.druggy > 0) - src.druggy-- - src.druggy = max(0, src.druggy) + if(silent) + silent = max(silent-1, 0) + if(druggy) + druggy = max(druggy-1, 0) return 1 + proc/handle_regular_hud_updates() - if (src.stat == 2 || (XRAY in mutations)) - src.sight |= SEE_TURFS - src.sight |= SEE_MOBS - src.sight |= SEE_OBJS - src.see_in_dark = 8 - src.see_invisible = 2 - else if (src.stat != 2) - src.sight &= ~SEE_TURFS - src.sight &= ~SEE_MOBS - src.sight &= ~SEE_OBJS - src.see_in_dark = 2 - src.see_invisible = 0 + if (stat == 2 || (XRAY in mutations)) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = 2 + else if (stat != 2) + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = 0 - if (src.sleep) src.sleep.icon_state = text("sleep[]", src.sleeping) - if (src.rest) src.rest.icon_state = text("rest[]", src.resting) + if (sleep) sleep.icon_state = text("sleep[]", sleeping) + if (rest) rest.icon_state = text("rest[]", resting) - if (src.healths) - if (src.stat != 2) + if (healths) + if (stat != 2) switch(health) if(100 to INFINITY) - src.healths.icon_state = "health0" + healths.icon_state = "health0" if(80 to 100) - src.healths.icon_state = "health1" + healths.icon_state = "health1" if(60 to 80) - src.healths.icon_state = "health2" + healths.icon_state = "health2" if(40 to 60) - src.healths.icon_state = "health3" + healths.icon_state = "health3" if(20 to 40) - src.healths.icon_state = "health4" + healths.icon_state = "health4" if(0 to 20) - src.healths.icon_state = "health5" + healths.icon_state = "health5" else - src.healths.icon_state = "health6" + healths.icon_state = "health6" else - src.healths.icon_state = "health7" + healths.icon_state = "health7" if (pressure) var/datum/gas_mixture/environment = loc.return_air() @@ -530,59 +514,59 @@ else pressure.icon_state = "pressure-2" - if(src.pullin) src.pullin.icon_state = "pull[src.pulling ? 1 : 0]" + if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]" - if (src.toxin) src.toxin.icon_state = "tox[src.toxins_alert ? 1 : 0]" - if (src.oxygen) src.oxygen.icon_state = "oxy[src.oxygen_alert ? 1 : 0]" - if (src.fire) src.fire.icon_state = "fire[src.fire_alert ? 1 : 0]" + if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]" + if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]" + if (fire) fire.icon_state = "fire[fire_alert ? 1 : 0]" //NOTE: the alerts dont reset when youre out of danger. dont blame me, //blame the person who coded them. Temporary fix added. if(bodytemp) - switch(src.bodytemperature) //310.055 optimal body temp + switch(bodytemperature) //310.055 optimal body temp if(345 to INFINITY) - src.bodytemp.icon_state = "temp4" + bodytemp.icon_state = "temp4" if(335 to 345) - src.bodytemp.icon_state = "temp3" + bodytemp.icon_state = "temp3" if(327 to 335) - src.bodytemp.icon_state = "temp2" + bodytemp.icon_state = "temp2" if(316 to 327) - src.bodytemp.icon_state = "temp1" + bodytemp.icon_state = "temp1" if(300 to 316) - src.bodytemp.icon_state = "temp0" + bodytemp.icon_state = "temp0" if(295 to 300) - src.bodytemp.icon_state = "temp-1" + bodytemp.icon_state = "temp-1" if(280 to 295) - src.bodytemp.icon_state = "temp-2" + bodytemp.icon_state = "temp-2" if(260 to 280) - src.bodytemp.icon_state = "temp-3" + bodytemp.icon_state = "temp-3" else - src.bodytemp.icon_state = "temp-4" + bodytemp.icon_state = "temp-4" - src.client.screen -= src.hud_used.blurry - src.client.screen -= src.hud_used.druggy - src.client.screen -= src.hud_used.vimpaired + client.screen -= hud_used.blurry + client.screen -= hud_used.druggy + client.screen -= hud_used.vimpaired - if ((src.blind && src.stat != 2)) - if ((src.blinded)) - src.blind.layer = 18 + if ((blind && stat != 2)) + if ((blinded)) + blind.layer = 18 else - src.blind.layer = 0 + blind.layer = 0 - if (src.disabilities & 1) - src.client.screen += src.hud_used.vimpaired + if (disabilities & 1) + client.screen += hud_used.vimpaired - if (src.eye_blurry) - src.client.screen += src.hud_used.blurry + if (eye_blurry) + client.screen += hud_used.blurry - if (src.druggy) - src.client.screen += src.hud_used.druggy + if (druggy) + client.screen += hud_used.druggy - if (src.stat != 2) - if (src.machine) - if (!( src.machine.check_eye(src) )) - src.reset_view(null) + if (stat != 2) + if (machine) + if (!( machine.check_eye(src) )) + reset_view(null) else if(!client.adminobs) reset_view(null) @@ -596,7 +580,7 @@ return proc/handle_virus_updates() - if(src.bodytemperature > 406) + if(bodytemperature > 406) for(var/datum/disease/D in viruses) D.cure() return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b1dc87d48b5..c97091484ed 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -23,11 +23,12 @@ /mob/living/proc/updatehealth() - if(!src.nodamage) - src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss() -src.halloss - else + if(nodamage) src.health = 100 src.stat = 0 + else + src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss() - src.halloss + //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually //affects them once clothing is factored in. ~Errorage @@ -152,21 +153,25 @@ src.updatehealth() /mob/living/proc/revive() - //src.fireloss = 0 - src.setToxLoss(0) - //src.bruteloss = 0 - src.setOxyLoss(0) + setToxLoss(0) + setOxyLoss(0) SetParalysis(0) SetStunned(0) SetWeakened(0) - src.radiation = 0 - src.nutrition = 400 - src.bodytemperature = 310 - //src.health = 100 - src.heal_overall_damage(1000, 1000) - src.buckled = initial(src.buckled) - src.handcuffed = initial(src.handcuffed) - if(src.stat > 1) src.stat = CONSCIOUS + radiation = 0 + nutrition = 400 + bodytemperature = 310 + sdisabilities = 0 + disabilities = 0 + blinded = 0 + eye_blind = 0 + eye_blurry = 0 + ear_deaf = 0 + ear_damage = 0 + heal_overall_damage(1000, 1000) + buckled = initial(src.buckled) + handcuffed = initial(src.handcuffed) + stat = CONSCIOUS ..() return diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 45177c70ce1..8a6605d4733 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -89,7 +89,7 @@ var/blinded = null var/bhunger = 0 //Carbon var/ajourn = 0 - var/rejuv = null +// var/rejuv = null var/druggy = 0 //Carbon var/confused = 0 //Carbon var/antitoxs = null