diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm index c1dd47236f1..8de5b1d6774 100644 --- a/code/controllers/Processes/mob.dm +++ b/code/controllers/Processes/mob.dm @@ -1,12 +1,16 @@ +var/global/datum/controller/process/mob/mob_master + /datum/controller/process/mob + var/current_cycle /datum/controller/process/mob/setup() name = "mob" schedule_interval = 20 // every 2 seconds start_delay = 16 - if(!mob_master) - mob_master = new - mob_master.Setup() + log_startup_progress("Mob ticker starting up.") + if(mob_master) + qdel(mob_master) //only one mob master + mob_master = src /datum/controller/process/mob/started() ..() @@ -29,17 +33,4 @@ else catchBadType(M) mob_list -= M - mob_master.process() - -var/global/datum/controller/mob_system/mob_master - -/datum/controller/mob_system - var/current_cycle - var/starttime - -/datum/controller/mob_system/proc/Setup() - log_startup_progress("Mob ticker starting up.") - starttime = world.timeofday - -/datum/controller/mob_system/proc/process() current_cycle++ \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 85494318fa9..8cd2500b0e0 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -105,7 +105,7 @@ var/mob/O = M if(!O.lastarea) O.lastarea = get_area(O.loc) - O.update_gravity(O.mob_has_gravity(src)) +// O.update_gravity(O.mob_has_gravity(src)) var/loopsanity = 100 for(var/atom/A in range(1)) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 0ec7e3c8ded..88000afe32f 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -85,7 +85,7 @@ return health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() -/mob/living/carbon/alien/proc/handle_environment(var/datum/gas_mixture/environment) +/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) //If there are alien weeds on the ground then heal if needed or give some toxins if(locate(/obj/structure/alien/weeds) in loc) @@ -136,7 +136,7 @@ fire_alert = max(fire_alert, 2) return -/mob/living/carbon/alien/proc/handle_mutations_and_radiation() +/mob/living/carbon/alien/handle_mutations_and_radiation() if(getFireLoss()) if((RESIST_HEAT in mutations) || prob(5)) adjustFireLoss(-1) @@ -171,11 +171,6 @@ bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! return -/mob/living/carbon/alien/proc/handle_wetness() - if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so - wetlevel = max(wetlevel - 1,0) - return - /mob/living/carbon/alien/IsAdvancedToolUser() return has_fine_manipulation diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 2b6407398d2..6e4fe3705f4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -9,70 +9,12 @@ /mob/living/carbon/alien/humanoid/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - ..() - - var/datum/gas_mixture/environment = loc.return_air() - - if (stat != DEAD) //still breathing - - //First, resolve location and get a breath - - if(mob_master.current_cycle%4==2) - //Only try to take a breath every 4 seconds, unless suffocating - spawn(0) breathe() - - 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) - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Disabilities - handle_disabilities() - - //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 - - //Handle temperature/pressure differences between body and environment - handle_environment(environment) - - //stuff in the stomach - handle_stomach() - - //Handle being on fire - handle_fire() - - //Decrease wetness over time - handle_wetness() - - //Status updates, death etc. - handle_regular_status_updates() - - handle_actions() - - update_canmove() + . = ..() update_icons() - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - - if(client) - handle_regular_hud_updates() -/mob/living/carbon/alien/humanoid/proc/handle_disabilities() +/mob/living/carbon/alien/humanoid/handle_disabilities() if (disabilities & EPILEPSY) if ((prob(1) && paralysis < 10)) src << "You have a seizure!" @@ -110,7 +52,7 @@ temp_change = (temperature - current) return temp_change -/mob/living/carbon/alien/humanoid/proc/handle_regular_status_updates() +/mob/living/carbon/alien/humanoid/handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -191,7 +133,7 @@ return 1 -/mob/living/carbon/alien/humanoid/proc/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/handle_regular_hud_updates() if (stat == 2 || (XRAY in mutations)) sight |= SEE_TURFS diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 01e36955196..d4e57324826 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -3,61 +3,16 @@ /mob/living/carbon/alien/larva var/temperature_alert = 0 - /mob/living/carbon/alien/larva/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - ..() - var/datum/gas_mixture/enviroment = loc.return_air() - if (stat != DEAD) //still breathing - + if(..()) //still breathing // GROW! if(amount_grown < max_grown) amount_grown++ - //First, resolve location and get a breath - if(mob_master.current_cycle%4==2) - //Only try to take a breath every 4 seconds, unless suffocating - spawn(0) breathe() - 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) - //Mutations and radiation - handle_mutations_and_radiation() - - //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 - - //Handle temperature/pressure differences between body and environment - handle_environment(enviroment) - - //stuff in the stomach - //handle_stomach() - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - //some kind of bug in canmove() isn't properly calling update_icons, so this is here as a placeholder update_icons() - if(client) - handle_regular_hud_updates() - -/mob/living/carbon/alien/larva/proc/handle_regular_status_updates() +/mob/living/carbon/alien/larva/handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -133,7 +88,7 @@ return 1 -/mob/living/carbon/alien/larva/proc/handle_regular_hud_updates() +/mob/living/carbon/alien/larva/handle_regular_hud_updates() if (stat == 2 || (XRAY in mutations)) sight |= SEE_TURFS @@ -210,7 +165,4 @@ if(!client.adminobs) reset_view(null) - return 1 - -/mob/living/carbon/alien/larva/proc/handle_random_events() - return + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 58f43b525b3..ffd8c3bca5e 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -1,4 +1,17 @@ -/mob/living/carbon/alien/proc/handle_chemicals_in_body() +/mob/living/carbon/alien/Life() + if(..()) + //First, resolve location and get a breath + if(mob_master.current_cycle%4==2) + //Only try to take a breath every 4 seconds, unless suffocating + spawn(0) breathe() + + 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) + return 1 + +/mob/living/carbon/alien/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -102,21 +115,4 @@ //Temporary fixes to the alerts. - return 1 - -/mob/living/carbon/alien/proc/handle_stomach() - spawn(0) - for(var/mob/living/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) - qdel(M) - continue - if(mob_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + return 1 \ 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 606959d5de8..0cfa62d008f 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -1,39 +1,5 @@ -/mob/living/carbon/brain/Life() - set invisibility = 0 - //set background = 1 - ..() - - if(stat != DEAD) - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - 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 - - //Handle temperature/pressure differences between body and environment - if(environment) // More error checking -- TLE - handle_environment(environment) - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - if(client) - handle_regular_hud_updates() - - /mob/living/carbon/brain/ - proc/handle_mutations_and_radiation() + handle_mutations_and_radiation() if (radiation) if (radiation > 100) @@ -68,7 +34,7 @@ adjustToxLoss(3) updatehealth() - proc/handle_environment(datum/gas_mixture/environment) + handle_environment(datum/gas_mixture/environment) if(!environment) return var/environment_heat_capacity = environment.heat_capacity() @@ -104,7 +70,7 @@ - proc/handle_chemicals_in_body() + handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -120,7 +86,7 @@ return //TODO: DEFERRED - proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> + handle_regular_status_updates() //TODO: comment out the unused bits >_> updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -191,7 +157,7 @@ return 1 - proc/handle_regular_hud_updates() + handle_regular_hud_updates() if (stat == 2 || (XRAY in src.mutations)) sight |= SEE_TURFS diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d2117d84cfa..6e68b30c7f0 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -43,26 +43,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc var/tinttotal = 0 // Total level of visually impairing items /mob/living/carbon/human/Life() - set invisibility = 0 - //set background = 1 - - if (notransform) return - if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE - - ..() - - //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 fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. tinttotal = tintcheck() //here as both hud updates and status updates call it - - //TODO: seperate this out - // update the current life tick, can be used to e.g. only do something every 4 ticks life_tick++ - var/datum/gas_mixture/environment = loc.return_air() in_stasis = 0 if(istype(loc, /obj/structure/closet/body_bag/cryobag)) @@ -71,13 +54,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc loc_as_cryobag.used++ in_stasis = 1 - if(life_tick % 30 == 15) + if(mob_master.current_cycle % 30 == 15) hud_updateflag = 1022 voice = GetVoice() - //No need to update all of these procs if the guy is dead. - if(stat != DEAD && !in_stasis) + if(..() && !in_stasis) if(mob_master.current_cycle % 4 == 2 || failed_last_breath) //First, resolve location and get a breath breathe() //Only try to take a breath every 4 ticks, unless suffocating @@ -87,43 +69,15 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc location_as_object.handle_internal_lifeform(src, 0) if(check_mutations) -// testing("Updating [src.real_name]'s mutations: "+english_list(mutations)) domutcheck(src,null) update_mutations() check_mutations=0 - //Updates the number of stored chemicals for powers - handle_changeling() - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Disabilities - handle_disabilities() - - //Random events (vomiting etc) - handle_random_events() - handle_virus_updates() - //Check if we're on fire - handle_fire() - - //Decrease wetness over time - handle_wetness() - - //stuff in the stomach - handle_stomach() - handle_shock() - handle_pain() - handle_heartbeat() - handle_heartattack() if(!client) @@ -137,28 +91,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc 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 //We go ahead and process them 5 times for HUD images and other stuff though. - - //Handle temperature/pressure differences between body and environment - handle_environment(environment) //Optimized a good bit. - - //Status updates, death etc. - handle_regular_status_updates() //Optimized a bit - handle_actions() - 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() - if(mind && mind.vampire) handle_vampire() if(life_tick == 1) @@ -180,7 +118,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc 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)) visible_message("[src] starts having a seizure!","You have a seizure!") @@ -245,7 +183,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // as cloneloss adjustCloneLoss(0.1) -/mob/living/carbon/human/proc/handle_mutations_and_radiation() +/mob/living/carbon/human/handle_mutations_and_radiation() if(getFireLoss()) if((RESIST_HEAT in mutations) || (prob(1))) heal_organ_damage(0,1) @@ -450,7 +388,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return species.handle_breath(breath, src) -/mob/living/carbon/human/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) if(!environment) return @@ -559,11 +497,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return //END FIRE CODE -/mob/living/carbon/human/proc/handle_wetness() - if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so - wetlevel = max(wetlevel - 1,0) - return - /* /mob/living/carbon/human/proc/adjust_body_temperature(current, loc_temp, boost) var/temperature = current @@ -736,7 +669,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return covered -/mob/living/carbon/human/proc/handle_chemicals_in_body() +/mob/living/carbon/human/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -850,7 +783,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return //TODO: DEFERRED -/mob/living/carbon/human/proc/handle_regular_status_updates() +/mob/living/carbon/human/handle_regular_status_updates() if(status_flags & GODMODE) return 0 @@ -958,7 +891,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(halloss > 0) adjustHalLoss(-1) - if(embedded_flag && !(life_tick % 10)) + if(embedded_flag && !(mob_master.current_cycle % 10)) var/list/E E = get_visible_implants(0) if(!E.len) @@ -1062,7 +995,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return 1 -/mob/living/carbon/human/proc/handle_regular_hud_updates() +/mob/living/carbon/human/handle_regular_hud_updates() if(hud_updateflag) handle_hud_list() @@ -1388,7 +1321,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc reset_view(null) return 1 -/mob/living/carbon/human/proc/handle_random_events() +/mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high if(!stat) if (getToxLoss() >= 45 && nutrition > 20) @@ -1433,7 +1366,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] V.cure(src) - if(life_tick % 3) //don't spam checks over all objects in view every tick. + if(mob_master.current_cycle % 3) //don't spam checks over all objects in view every tick. for(var/obj/effect/decal/cleanable/O in view(1,src)) if(istype(O,/obj/effect/decal/cleanable/blood)) var/obj/effect/decal/cleanable/blood/B = O @@ -1464,24 +1397,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc V.dead = 1 return -/mob/living/carbon/human/proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) - stomach_contents.Remove(M) - continue - if(isliving(M) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(mob_master.current_cycle%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 - -/mob/living/carbon/human/proc/handle_changeling() +/mob/living/carbon/human/handle_changeling() if(mind && mind.changeling) mind.changeling.regenerate() @@ -1537,7 +1453,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc /mob/living/carbon/human/proc/handle_pulse() - if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) + if(mob_master.current_cycle % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load) if(species && species.flags & NO_BLOOD) return PULSE_NONE //No blood, no pulse. diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 248a3154388..b65aa6623d2 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -12,3 +12,114 @@ if (internals) internals.icon_state = "internal0" return + +/mob/living/carbon/Life() + set invisibility = 0 + set background = BACKGROUND_ENABLED + + if(notransform) + return + if(!loc) + return + var/datum/gas_mixture/environment = loc.return_air() + + //Handle temperature/pressure differences between body and environment + handle_environment(environment) + + //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 + + handle_regular_status_updates() // Status updates, death etc. + + if(stat != DEAD) + + //Updates the number of stored chemicals for powers + handle_changeling() + + //Mutations and radiation + handle_mutations_and_radiation() + + //Chemicals in the body + handle_chemicals_in_body() + + //Disabilities + handle_disabilities() + + //Random events (vomiting etc) + handle_random_events() + + . = 1 + + handle_fire() + + //Decrease wetness over time + handle_wetness() + + //stuff in the stomach + handle_stomach() + + update_canmove() + + update_gravity(mob_has_gravity()) + + for(var/obj/item/weapon/grab/G in src) + G.process() + + handle_actions() + + if(client) + handle_regular_hud_updates() + + return . + + + +//remember to remove the "proc" of the child procs of these. + +/mob/living/carbon/proc/handle_changeling() + return + +/mob/living/carbon/proc/handle_mutations_and_radiation() + return + +/mob/living/carbon/proc/handle_chemicals_in_body() + return + +/mob/living/carbon/proc/handle_disabilities() + return + +/mob/living/carbon/proc/handle_random_events() + return + +/mob/living/carbon/proc/handle_environment(var/datum/gas_mixture/environment) + return + +/mob/living/carbon/proc/handle_regular_status_updates() + return + +/mob/living/carbon/proc/handle_wetness() + if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so + wetlevel = max(wetlevel - 1,0) + +/mob/living/carbon/proc/handle_stomach() + spawn(0) + for(var/mob/living/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) + qdel(M) + continue + if(mob_master.current_cycle%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 + +/mob/living/carbon/proc/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 05e078553a8..b70075a084b 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -6,46 +6,12 @@ var/SStun = 0 // stun variable /mob/living/carbon/slime/Life() - set invisibility = 0 - //set background = 1 - - if (src.notransform) - return - - ..() - - if(stat != DEAD) - //Chemicals in the body - handle_chemicals_in_body() - + if(..()) handle_nutrition() - handle_targets() - if (!ckey) handle_speech_and_mood() - var/datum/gas_mixture/environment - if(src.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. - src.blinded = null - - regular_hud_updates() // Basically just deletes any screen objects :< - - if(environment) - handle_environment(environment) // Handle temperature/pressure differences between body and environment - - handle_regular_status_updates() // Status updates, death etc. - - handle_actions() - - handle_wetness() - /mob/living/carbon/slime/proc/AIprocess() // the master AI process if(AIproc || stat == DEAD || client) return @@ -126,7 +92,7 @@ AIproc = 0 -/mob/living/carbon/slime/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/slime/handle_environment(datum/gas_mixture/environment) if(!environment) adjustToxLoss(rand(10,20)) return @@ -141,7 +107,7 @@ loc_temp = loc:air_contents.temperature else loc_temp = environment.temperature - + //Account for massive pressure differences if(bodytemperature < (T0C + 5)) // start calculating temperature damage etc if(bodytemperature <= (T0C - 40)) // stun temperature @@ -154,7 +120,7 @@ adjustToxLoss(round(sqrt(bodytemperature)) * 2) else Tempstun = 0 - + /*moved after the temperature damage code so freeze beams can instantly kill slimes -Deity Link*/ if(loc_temp < 310.15) // a cold place @@ -183,7 +149,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() if(reagents) reagents.metabolize(src) if (reagents.get_reagent_amount("plasma")>=5) @@ -196,7 +162,7 @@ return //TODO: DEFERRED -/mob/living/carbon/slime/proc/handle_regular_status_updates() +/mob/living/carbon/slime/handle_regular_status_updates() if(is_adult) health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) @@ -289,10 +255,6 @@ else Evolve() -/mob/living/carbon/slime/proc/handle_wetness() - if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so - wetlevel = max(wetlevel - 1,0) - return /mob/living/carbon/slime/proc/handle_targets() if(Tempstun) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3d7f30d87ff..9806145854b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -890,11 +890,15 @@ /mob/living/proc/float(on) if(throwing) return - if(on && !floating) - animate(src, pixel_y = 2, time = 10, loop = -1) + var/fixed = 0 + if(anchored || (buckled && buckled.anchored)) + fixed = 1 + if(on && !floating && !fixed) + animate(src, pixel_y = pixel_y + 2, time = 10, loop = -1) floating = 1 - else if(!on && floating) - animate(src, pixel_y = initial(pixel_y), time = 10) + else if(((!on || fixed) && floating)) + var/final_pixel_y = get_standard_pixel_y_offset(lying) + animate(src, pixel_y = final_pixel_y, time = 10) floating = 0 /mob/living/proc/can_use_vents() diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 40facde6f9c..06698318f44 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -12,6 +12,8 @@ src.updatehealth() + update_gravity(mob_has_gravity()) + if (src.malfhack) if (src.malfhack.aidisabled) src << "\red ERROR: APC access disabled, hack attempt canceled." @@ -174,7 +176,7 @@ sleep(50) theAPC = null - process_queued_alarms() + process_queued_alarms() regular_hud_updates() switch(src.sensor_mode) if (SEC_HUD) @@ -191,12 +193,12 @@ health = 100 - getOxyLoss() - getToxLoss() - getBruteLoss() else health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - + /mob/living/silicon/ai/proc/lacks_power() var/turf/T = get_turf(src) var/area/A = get_area(src) return ((!A.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item) - + /mob/living/silicon/ai/rejuvenate() ..() add_ai_verbs(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index c8c9c8c37c0..ae8f7da7d4c 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -88,10 +88,9 @@ return /mob/living/simple_animal/Life() - if(paralysis || stunned || weakened || buckled || resting) - canmove = 0 - else - canmove = 1 + + update_gravity(mob_has_gravity()) + update_canmove() //Health if(stat == DEAD) @@ -554,4 +553,28 @@ if(speak_emote.len) verb = pick(speak_emote) - return verb \ No newline at end of file + return verb + +/mob/living/simple_animal/update_canmove() + if(paralysis || stunned || weakened || stat || resting) + drop_r_hand() + drop_l_hand() + canmove = 0 + else if(buckled) + canmove = 0 + else + canmove = 1 + update_transform() + return canmove + +/mob/living/simple_animal/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/changed = 0 + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + if(changed) + animate(src, transform = ntransform, time = 2, easing = EASE_IN|EASE_OUT) \ No newline at end of file