diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm index e572176ef9c..5f222b0374a 100644 --- a/code/defines/procs/hud.dm +++ b/code/defines/procs/hud.dm @@ -61,7 +61,7 @@ proc/can_process_hud(var/mob/M) return 1 //Deletes the current HUD images so they can be refreshed with new ones. -mob/proc/regular_hud_updates() //Used in the life.dm of mobs that can use HUDs. +mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use HUDs. if(client) for(var/image/hud in client.images) if(copytext(hud.icon_state,1,4) == "hud") diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index dccc9e9dbf6..e342ba33292 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -299,4 +299,18 @@ var/list/mob/living/forced_ambiance_list = new for(var/obj/machinery/door/airlock/temp_airlock in src) temp_airlock.prison_open() for(var/obj/machinery/door/window/temp_windoor in src) - temp_windoor.open() \ No newline at end of file + temp_windoor.open() + +/area/proc/has_gravity() + return has_gravity + +/area/space/has_gravity() + return 0 + +/proc/has_gravity(atom/AT, turf/T) + if(!T) + T = get_turf(AT) + var/area/A = get_area(T) + if(A && A.has_gravity()) + return 1 + return 0 diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index e13f6b46707..642cbfdbded 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -10,26 +10,14 @@ ..() if (stat != DEAD) //still breathing - // GROW! update_progression() - // Chemicals in the body - handle_chemicals_in_body() - blinded = null //Status updates, death etc. - handle_regular_status_updates() - update_canmove() update_icons() - if(client) - handle_regular_hud_updates() - -/mob/living/carbon/alien/proc/handle_chemicals_in_body() - return // Nothing yet. Maybe check it out at a later date. - /mob/living/carbon/alien/handle_mutations_and_radiation() // Currently both Dionaea and larvae like to eat radiation, so I'm defining the @@ -46,7 +34,7 @@ adjustToxLoss(-(rads)) return -/mob/living/carbon/alien/proc/handle_regular_status_updates() +/mob/living/carbon/alien/handle_regular_status_updates() if(status_flags & GODMODE) return 0 @@ -97,18 +85,11 @@ else if(eye_blurry) eye_blurry = max(eye_blurry-1, 0) - //Ears - if(sdisabilities & DEAF) //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) - ear_damage = max(ear_damage-0.05, 0) - update_icons() return 1 -/mob/living/carbon/alien/proc/handle_regular_hud_updates() +/mob/living/carbon/alien/handle_regular_hud_updates() if (stat == 2 || (XRAY in src.mutations)) sight |= SEE_TURFS @@ -180,3 +161,9 @@ src << "\red You feel a searing heat!" else if (fire) fire.icon_state = "fire0" + +/mob/living/carbon/alien/handle_fire() + if(..()) + return + bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! + return diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index e152959fc9a..84e3d09c20e 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -1,28 +1,6 @@ /mob/living/carbon/brain/handle_breathing() return -/mob/living/carbon/brain/Life() - set invisibility = 0 - set background = 1 - ..() - - if(stat != DEAD) - //Chemicals in the body - handle_chemicals_in_body() - - //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 - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - if(client) - handle_regular_hud_updates() - /mob/living/carbon/brain/handle_mutations_and_radiation() if (radiation) if (radiation > 100) @@ -91,7 +69,7 @@ adjustFireLoss(5.0*discomfort) -/mob/living/carbon/brain/proc/handle_chemicals_in_body() +/mob/living/carbon/brain/handle_chemicals_in_body() chem_effects.Cut() analgesic = 0 @@ -113,7 +91,7 @@ return //TODO: DEFERRED -/mob/living/carbon/brain/proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> +/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_> updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -183,7 +161,7 @@ handle_statuses() return 1 -/mob/living/carbon/brain/proc/handle_regular_hud_updates() +/mob/living/carbon/brain/handle_regular_hud_updates() if (stat == 2 || (XRAY in src.mutations)) sight |= SEE_TURFS sight |= SEE_MOBS diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 70af11f34b7..7a6bbc8aa23 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -47,7 +47,6 @@ //to find it. blinded = null fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. - ..() //TODO: seperate this out // update the current life tick, can be used to e.g. only do something every 4 ticks @@ -56,6 +55,8 @@ in_stasis = istype(loc, /obj/structure/closet/body_bag/cryobag) && loc:opened == 0 if(in_stasis) loc:used++ + ..() + if(life_tick%30==15) hud_updateflag = 1022 @@ -66,23 +67,10 @@ //Updates the number of stored chemicals for powers handle_changeling() - //Chemicals in the body - handle_chemicals_in_body() - - //Disabilities - handle_disabilities() - //Organs and blood handle_organs() - handle_blood() stabilize_body_temperature() //Body temperature adjusts itself (self-regulation) - //Random events (vomiting etc) - handle_random_events() - - //stuff in the stomach - handle_stomach() - handle_shock() handle_pain() @@ -96,26 +84,18 @@ handle_stasis_bag() - if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle + if(!handle_some_updates()) return //We go ahead and process them 5 times for HUD images and other stuff though. - //Check if we're on fire - handle_fire() - - //Status updates, death etc. - handle_regular_status_updates() //Optimized a bit - update_canmove() - //Update our name based on whether our face is obscured/disfigured name = get_visible_name() - handle_regular_hud_updates() - pulse = handle_pulse() - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() +/mob/living/carbon/human/proc/handle_some_updates() + if(life_tick > 5 && timeofdeath && (timeofdeath < 5 || world.time - timeofdeath > 6000)) //We are long dead, or we're junk mobs spawned like the clowns on the clown shuttle + return 0 + return 1 /mob/living/carbon/human/breathe() if(!in_stasis) @@ -168,7 +148,7 @@ else return ONE_ATMOSPHERE + pressure_difference -/mob/living/carbon/human/proc/handle_disabilities() +/mob/living/carbon/human/handle_disabilities() if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 1)) src << "\red You have a seizure!" @@ -845,7 +825,10 @@ return min(1,thermal_protection) -/mob/living/carbon/human/proc/handle_chemicals_in_body() +/mob/living/carbon/human/handle_chemicals_in_body() + if(in_stasis) + return + if(reagents) chem_effects.Cut() analgesic = 0 @@ -925,7 +908,10 @@ return //TODO: DEFERRED -/mob/living/carbon/human/proc/handle_regular_status_updates() +/mob/living/carbon/human/handle_regular_status_updates() + if(!handle_some_updates()) + return 0 + if(status_flags & GODMODE) return 0 //SSD check, if a logged player is awake put them back to sleep! @@ -1098,7 +1084,7 @@ return 1 -/mob/living/carbon/human/proc/handle_regular_hud_updates() +/mob/living/carbon/human/handle_regular_hud_updates() if(!overlays_cache) overlays_cache = list() overlays_cache.len = 23 @@ -1424,7 +1410,10 @@ O.process_hud(src) if(!druggy && !seer) see_invisible = SEE_INVISIBLE_LIVING -/mob/living/carbon/human/proc/handle_random_events() +/mob/living/carbon/human/handle_random_events() + if(in_stasis) + return + // Puke if toxloss is too high if(!stat) if (getToxLoss() >= 45 && nutrition > 20) @@ -1437,7 +1426,7 @@ if(L && L.lum_r + L.lum_g + L.lum_b == 0) playsound_local(src,pick(scarySounds),50, 1, -1) -/mob/living/carbon/human/proc/handle_stomach() +/mob/living/carbon/human/handle_stomach() spawn(0) for(var/mob/living/M in stomach_contents) if(M.loc != src) diff --git a/code/modules/mob/living/carbon/metroid/hud.dm b/code/modules/mob/living/carbon/metroid/hud.dm index c5282b9a839..da6729c3dcf 100644 --- a/code/modules/mob/living/carbon/metroid/hud.dm +++ b/code/modules/mob/living/carbon/metroid/hud.dm @@ -1,2 +1,2 @@ -/mob/living/carbon/slime/regular_hud_updates() +/mob/living/carbon/slime/handle_regular_hud_updates() return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index a2fafd15ec0..21f5302f2ae 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -8,7 +8,6 @@ ..() if(stat != DEAD) - handle_chemicals_in_body() handle_nutrition() if (!client) @@ -18,10 +17,6 @@ handle_AI() handle_speech_and_mood() - regular_hud_updates() - - handle_regular_status_updates() // Status updates, death etc. - /mob/living/carbon/slime/handle_environment(datum/gas_mixture/environment) if(!environment) adjustToxLoss(rand(10,20)) @@ -74,7 +69,7 @@ temp_change = (temperature - current) return temp_change -/mob/living/carbon/slime/proc/handle_chemicals_in_body() +/mob/living/carbon/slime/handle_chemicals_in_body() chem_effects.Cut() analgesic = 0 @@ -89,7 +84,7 @@ return //TODO: DEFERRED -/mob/living/carbon/slime/proc/handle_regular_status_updates() +/mob/living/carbon/slime/handle_regular_status_updates() src.blinded = null diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 751b995c83b..d7f475ec5b2 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -15,17 +15,133 @@ //Mutations and radiation handle_mutations_and_radiation() + //Chemicals in the body + handle_chemicals_in_body() + + //Blood + handle_blood() + + //Random events (vomiting etc) + handle_random_events() + . = 1 //Handle temperature/pressure differences between body and environment if(environment) handle_environment(environment) + //Check if we're on fire + handle_fire() + + //stuff in the stomach + handle_stomach() + + update_gravity(mob_has_gravity()) + + update_pulling() + + for(var/obj/item/weapon/grab/G in src) + G.process() + + if(handle_regular_status_updates()) // Status & health update, are we dead or alive etc. + handle_disabilities() // eye, ear, brain damages + handle_status_effects() //all special effects, stunned, weakened, jitteryness, hallucination, sleeping, etc + + handle_actions() + + update_canmove() + + if(client) + handle_regular_hud_updates() + /mob/living/proc/handle_breathing() return /mob/living/proc/handle_mutations_and_radiation() return +/mob/living/proc/handle_chemicals_in_body() + return + +/mob/living/proc/handle_blood() + return + +/mob/living/proc/handle_random_events() + return + /mob/living/proc/handle_environment(var/datum/gas_mixture/environment) return + +/mob/living/proc/handle_stomach() + return + +/mob/living/proc/update_pulling() + if(pulling) + if(incapacitated()) + stop_pulling() + +//This updates the health and status of the mob (conscious, unconscious, dead) +/mob/living/proc/handle_regular_status_updates() + updatehealth() + if(stat != DEAD) + if(paralysis) + stat = UNCONSCIOUS + else if (status_flags & FAKEDEATH) + stat = UNCONSCIOUS + else + stat = CONSCIOUS + return 1 + +//this updates all special effects: stunned, sleeping, weakened, druggy, stuttering, etc.. +/mob/living/proc/handle_status_effects() + if(paralysis) + paralysis = max(paralysis-1,0) + if(stunned) + stunned = max(stunned-1,0) + if(!stunned) + update_icons() + + if(weakened) + weakened = max(weakened-1,0) + if(!weakened) + update_icons() + +/mob/living/proc/handle_disabilities() + //Eyes + if(disabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own + eye_blind = max(eye_blind, 1) + else if(eye_blind) //blindness, heals slowly over time + eye_blind = max(eye_blind-1,0) + else if(eye_blurry) //blurry eyes heal slowly + eye_blurry = max(eye_blurry-1, 0) + + //Ears + if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own + setEarDamage(-1, max(ear_deaf, 1)) + else + // deafness heals slowly over time, unless ear_damage is over 100 + if(ear_damage < 100) + adjustEarDamage(-0.05,-1) + +//this handles hud updates. Calls update_vision() and handle_hud_icons() +/mob/living/handle_regular_hud_updates() + if(!client) return 0 + ..() + + handle_vision() + handle_hud_icons() + + return 1 + +/mob/living/proc/handle_vision() + return + +/mob/living/proc/update_sight() + return + +/mob/living/proc/handle_hud_icons() + handle_hud_icons_health() + return + +/mob/living/proc/handle_hud_icons_health() + return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index af99441108d..07b5fb7900e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1,8 +1,3 @@ -/mob/living/Life() - ..() - if(stat != DEAD) - handle_actions() - //mob verbs are faster than object verbs. See mob/verb/examine. /mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1)) set name = "Pull" @@ -800,3 +795,15 @@ default behaviour is: return ..() + +//damage/heal the mob ears and adjust the deaf amount +/mob/living/adjustEarDamage(var/damage, var/deaf) + ear_damage = max(0, ear_damage + damage) + ear_deaf = max(0, ear_deaf + deaf) + +//pass a negative argument to skip one of the variable +/mob/living/setEarDamage(var/damage, var/deaf) + if(damage >= 0) + ear_damage = damage + if(deaf >= 0) + ear_deaf = deaf diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index b1762cf0d64..c8d34a62f81 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -219,7 +219,7 @@ /mob/living/proc/handle_fire() if(fire_stacks < 0) - fire_stacks = max(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly + fire_stacks = min(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly if(!on_fire) return 1 @@ -258,10 +258,6 @@ return 1 return round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2) -/mob/living/regular_hud_updates() - ..() - update_action_buttons() - /mob/living/proc/handle_actions() //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent for(var/datum/action/A in actions) @@ -335,50 +331,54 @@ //If simple_animals are ever moved under carbon, then this can probably be moved to carbon as well /mob/living/proc/attack_throat(obj/item/W, obj/item/weapon/grab/G, mob/user) - + // Knifing if(!W.edge || !W.force || W.damtype != BRUTE) return //unsuitable weapon - + user.visible_message("\The [user] begins to slit [src]'s throat with \the [W]!") - + user.next_move = world.time + 20 //also should prevent user from triggering this repeatedly if(!do_after(user, 20)) return if(!(G && G.assailant == user && G.affecting == src)) //check that we still have a grab return - + var/damage_mod = 1 //presumably, if they are wearing a helmet that stops pressure effects, then it probably covers the throat as well var/obj/item/clothing/head/helmet = get_equipped_item(slot_head) if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.flags & STOPPRESSUREDAMAGE)) //we don't do an armor_check here because this is not an impact effect like a weapon swung with momentum, that either penetrates or glances off. damage_mod = 1.0 - (helmet.armor["melee"]/100) - + var/total_damage = 0 for(var/i in 1 to 3) var/damage = min(W.force*1.5, 20)*damage_mod apply_damage(damage, W.damtype, "head", 0, sharp=W.sharp, edge=W.edge) total_damage += damage - + var/oxyloss = total_damage if(total_damage >= 40) //threshold to make someone pass out oxyloss = 60 // Brain lacks oxygen immediately, pass out - + adjustOxyLoss(min(oxyloss, 100 - getOxyLoss())) //don't put them over 100 oxyloss - + if(total_damage) if(oxyloss >= 40) user.visible_message("\The [user] slit [src]'s throat open with \the [W]!") else user.visible_message("\The [user] cut [src]'s neck with \the [W]!") - + if(W.hitsound) playsound(loc, W.hitsound, 50, 1, -1) - + G.last_action = world.time flick(G.hud.icon_state, G.hud) - + user.attack_log += "\[[time_stamp()]\] Knifed [name] ([ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" src.attack_log += "\[[time_stamp()]\] Got knifed by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" msg_admin_attack("[key_name(user)] knifed [key_name(src)] with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" ) return + +/mob/living/incapacitated() + if(stat || paralysis || stunned || weakened || restrained()) + return 1 diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index a62ce82429c..51f2ffa7823 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -151,7 +151,7 @@ theAPC = null process_queued_alarms() - regular_hud_updates() + handle_regular_hud_updates() switch(src.sensor_mode) if (SEC_HUD) process_sec_hud(src,0,src.eyeobj) diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index fe426c36d0f..a9ad6987540 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -10,7 +10,7 @@ M.show_message("\red The data cable rapidly retracts back into its spool.", 3, "\red You hear a click and the sound of wire spooling rapidly.", 2) qdel(src.cable) - regular_hud_updates() + handle_regular_hud_updates() if(src.secHUD == 1) process_sec_hud(src, 1) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 58159f33829..e5a0227020b 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -61,7 +61,7 @@ lights_on = 0 set_light(0) -/mob/living/silicon/robot/proc/handle_regular_status_updates() +/mob/living/silicon/robot/handle_regular_status_updates() if(src.camera && !scrambledcodes) if(src.stat == 2 || wires.IsIndexCut(BORG_WIRE_CAMERA)) @@ -144,7 +144,7 @@ return 1 -/mob/living/silicon/robot/proc/handle_regular_hud_updates() +/mob/living/silicon/robot/handle_regular_hud_updates() if (src.stat == 2 || XRAY in mutations || src.sight_mode & BORGXRAY) src.sight |= SEE_TURFS @@ -173,7 +173,7 @@ src.see_invisible = SEE_INVISIBLE_LIVING // This is normal vision (25), setting it lower for normal vision means you don't "see" things like darkness since darkness // has a "invisible" value of 15 - regular_hud_updates() + handle_regular_hud_updates() var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src) if(hud && hud.hud) @@ -331,3 +331,12 @@ if(paralysis || stunned || weakened || buckled || lockcharge || !is_component_functioning("actuator")) canmove = 0 else canmove = 1 return canmove + +/mob/living/silicon/robot/update_fire() + overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + if(on_fire) + overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + +/mob/living/silicon/robot/fire_act() + if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them + IgniteMob() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index de279566784..270f618a852 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -350,3 +350,9 @@ /mob/living/silicon/proc/is_malf_or_traitor() return is_traitor() || is_malf() + +/mob/living/silicon/adjustEarDamage() + return + +/mob/living/silicon/setEarDamage() + return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4b33818033b..bc9f04bea0d 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -307,7 +307,7 @@ else usr << "\The [src] has been attacked with the [O] by [user].") + visible_message("\The [src] has been attacked with \the [O] by [user].") user.do_attack_animation(src) /mob/living/simple_animal/movement_delay() @@ -404,3 +404,13 @@ else user.visible_message("[user] butchers \the [src] messily!") gib() + +/mob/living/simple_animal/handle_fire() + return + +/mob/living/simple_animal/update_fire() + return +/mob/living/simple_animal/IgniteMob() + return +/mob/living/simple_animal/ExtinguishMob() + return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 83ae948ef3c..4a58bd99b68 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -118,6 +118,8 @@ //handle_typing_indicator() //You said the typing indicator would be fine. The test determined that was a lie. return +/mob/proc/incapacitated() + return /mob/proc/restrained() return @@ -1026,3 +1028,9 @@ mob/proc/yank_out_object() /mob/verb/westfaceperm() set hidden = 1 set_face_dir(WEST) + +/mob/proc/adjustEarDamage() + return + +/mob/proc/setEarDamage() + return diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 7eefc97d688..8ba66ffe317 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -520,3 +520,9 @@ prob_slip = round(prob_slip) return(prob_slip) + +/mob/proc/mob_has_gravity(turf/T) + return has_gravity(src, T) + +/mob/proc/update_gravity() + return diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 70c2281bb30..4c756ace0ce 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -35,7 +35,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 B.color = B.data["blood_colour"] // Takes care blood loss and regeneration -/mob/living/carbon/human/proc/handle_blood() +/mob/living/carbon/human/handle_blood() + if(in_stasis) + return if(species && species.flags & NO_BLOOD) return