diff --git a/_maps/map_files/RandomZLevels/evil_santa.dmm b/_maps/map_files/RandomZLevels/evil_santa.dmm index fce72ad6497..6e29e3b851c 100644 --- a/_maps/map_files/RandomZLevels/evil_santa.dmm +++ b/_maps/map_files/RandomZLevels/evil_santa.dmm @@ -527,7 +527,7 @@ /mob/living/simple_animal/pet/penguin/emperor{ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0); faction = list("hostile","syndicate","winter"); - minbodytemp = 0 + }, /turf/simulated/floor/plating/ice/smooth, /area/vision_change_area/awaymission/evil_santa_storm) @@ -4533,7 +4533,7 @@ "MD" = ( /mob/living/simple_animal/pet/penguin/baby{ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0); - minbodytemp = 0 + }, /turf/simulated/floor/plating/ice/smooth, /area/vision_change_area/awaymission/evil_santa_storm) @@ -5263,7 +5263,7 @@ "Sx" = ( /mob/living/simple_animal/pet/penguin/eldrich{ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0); - minbodytemp = 0 + }, /turf/simulated/floor/plating/ice/smooth, /area/vision_change_area/awaymission/evil_santa_storm) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 8ba6bf69e81..4546b5dd43e 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -689,6 +689,9 @@ #define COMPONENT_RIDDEN_STOP_Z_MOVE 1 #define COMPONENT_RIDDEN_ALLOW_Z_MOVE 2 +/// Source: /mob/living/simple_animal/handle_environment(datum/gas_mixture/environment) +#define COMSIG_ANIMAL_HANDLE_ENVIRONMENT "animal_handle_environment" + // /obj signals ///from base of obj/deconstruct(): (disassembled) diff --git a/code/datums/components/animal_temperature.dm b/code/datums/components/animal_temperature.dm new file mode 100644 index 00000000000..b224564995f --- /dev/null +++ b/code/datums/components/animal_temperature.dm @@ -0,0 +1,77 @@ +/datum/component/animal_temperature + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + /// Min body temp + var/minbodytemp + /// Max body temp + var/maxbodytemp + /// Damage when below min temp + var/cold_damage + /// Damage when above max temp + var/heat_damage + /// If true - alert will be shown + var/show_alert + +/datum/component/animal_temperature/Initialize( + minbodytemp = 250, + maxbodytemp = 350, + cold_damage = 2, + heat_damage = 2, + show_alert = FALSE +) + if(!isanimal(parent)) + return COMPONENT_INCOMPATIBLE + + src.minbodytemp = minbodytemp + src.maxbodytemp = maxbodytemp + src.cold_damage = cold_damage + src.heat_damage = heat_damage + src.show_alert = show_alert + +/datum/component/animal_temperature/RegisterWithParent() + RegisterSignal(parent, COMSIG_ANIMAL_HANDLE_ENVIRONMENT, PROC_REF(handle_environment)) + +/datum/component/animal_temperature/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_ANIMAL_HANDLE_ENVIRONMENT) + +/datum/component/animal_temperature/proc/handle_environment(datum/source, datum/gas_mixture/environment) + SIGNAL_HANDLER + + var/mob/living/simple_animal/animal = source + + INVOKE_ASYNC(src, PROC_REF(regulate_temperature), animal, environment) + INVOKE_ASYNC(src, PROC_REF(check_temperature), animal) + +/datum/component/animal_temperature/proc/regulate_temperature(mob/living/simple_animal/animal, datum/gas_mixture/environment) + var/areatemp = animal.get_temperature(environment) + + if(abs(areatemp - animal.bodytemperature) > 5) + var/diff = areatemp - animal.bodytemperature + diff = diff / 5 + animal.adjust_bodytemperature(diff) + + return + +/datum/component/animal_temperature/proc/check_temperature(mob/living/simple_animal/animal) + if(animal.bodytemperature < minbodytemp) + animal.adjustHealth(cold_damage) + + if(show_alert) + animal.throw_alert("temp", /atom/movable/screen/alert/cold, get_severity(animal)) + + return TRUE + + if(animal.bodytemperature > maxbodytemp) + animal.adjustHealth(heat_damage) + + if(show_alert) + animal.throw_alert("temp", /atom/movable/screen/alert/hot, get_severity(animal)) + + return TRUE + + animal.clear_alert("temp") + return FALSE + +/datum/component/animal_temperature/proc/get_severity(mob/living/simple_animal/animal) + var/multiplier = animal.bodytemperature < minbodytemp ? (1 / minbodytemp) : (1 / maxbodytemp) + var/severity = CEILING(abs(animal.bodytemperature / multiplier), 1) + return min(severity, 3) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 8ca52055310..1869bc647f6 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -203,7 +203,8 @@ ..() ADD_TRAIT(doggo, TRAIT_NO_BREATH, CORGI_HARDSUIT_TRAIT) doggo.atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - doggo.minbodytemp = 0 + var/datum/component/animal_temperature/temp = doggo.GetComponent(/datum/component/animal_temperature) + temp?.minbodytemp = 0 /datum/dog_fashion/head/fried_vox_empty name = "Colonel REAL_NAME" diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index efbf8f18e87..24c3898a7cb 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -11,8 +11,6 @@ faction = list(ROLE_BLOB) bubble_icon = "blob" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 360 universal_speak = 1 //So mobs can understand them when a blob uses Blob Broadcast sentience_type = SENTIENCE_OTHER gold_core_spawnable = NO_SPAWN @@ -21,6 +19,13 @@ var/mob/camera/blob/overmind = null tts_seed = "Earth" +/mob/living/simple_animal/hostile/blob/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 360, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color) if(a_color) color = a_color @@ -184,8 +189,6 @@ attacktext = "ударяет" attack_sound = 'sound/effects/blobattack.ogg' speak_emote = list("gurgles") - minbodytemp = 0 - maxbodytemp = 360 force_threshold = 10 mob_size = MOB_SIZE_LARGE environment_smash = ENVIRONMENT_SMASH_STRUCTURES @@ -195,6 +198,12 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE move_resist = MOVE_FORCE_OVERPOWERING +/mob/living/simple_animal/hostile/ancient_robot_leg/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = 360, \ + ) /mob/living/simple_animal/hostile/blob/blobbernaut/Initialize(mapload) . = ..() diff --git a/code/game/gamemodes/clockwork/clockwork_mob.dm b/code/game/gamemodes/clockwork/clockwork_mob.dm index d8418376c6a..f19dfb0427d 100644 --- a/code/game/gamemodes/clockwork/clockwork_mob.dm +++ b/code/game/gamemodes/clockwork/clockwork_mob.dm @@ -17,7 +17,6 @@ attack_sound = 'sound/weapons/bladeslice.ogg' tts_seed = "Earth" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 pressure_resistance = 100 a_intent = INTENT_HARM stop_automated_movement = TRUE @@ -32,6 +31,12 @@ light_power = 1.1 var/deflect_chance = 30 +/mob/living/simple_animal/hostile/clockwork/marauder/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/clockwork/marauder/hostile AIStatus = AI_ON @@ -128,12 +133,18 @@ icon_resting = "mouse_clockwork_sleep" icon = 'icons/mob/clockwork_mobs.dmi' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 pressure_resistance = 100 universal_speak = 1 gold_core_spawnable = NO_SPAWN tts_seed = "Earth" +/mob/living/simple_animal/mouse/clockwork/ComponentInitialize() + . = ..() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/mouse/clockwork/handle_automated_action() if(!isturf(loc)) return diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index 28ec5e7cb0b..3afb4e1c28c 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -18,8 +18,6 @@ status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 250 //Weak to cold - maxbodytemp = INFINITY faction = list("hell") attacktext = "неистово терзает" maxHealth = 200 @@ -35,6 +33,13 @@ of intentionally harming a fellow devil." +/mob/living/simple_animal/imp/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 250, \ + maxbodytemp = INFINITY, \ + ) + /mob/living/simple_animal/imp/Initialize(mapload) . = ..() add_movespeed_modifier(/datum/movespeed_modifier/imp_boost) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 3d188967b01..c607b410751 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -104,8 +104,6 @@ speed = 5 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 var/static/list/borer_names = list( "Primary", "Secondary", "Tertiary", "Quaternary", "Quinary", "Senary", @@ -154,6 +152,13 @@ truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]" GrantBorerActions() +/mob/living/simple_animal/borer/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1500, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/borer/attack_ghost(mob/user) if(cannotPossess(user)) to_chat(user, span_boldnotice("Upon using the antagHUD you forfeited the ability to join the round.")) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index cea72a95d3a..cb205ffad6f 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -69,8 +69,6 @@ icon_gib = null wander = 0 harm_intent_damage = 5 - minbodytemp = 0 - maxbodytemp = 500 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 0 melee_damage_lower = 15 @@ -107,6 +105,13 @@ var/resources = 0 //Resource points, generated by consuming metal/glass var/max_resources = 200 +/mob/living/simple_animal/hostile/swarmer/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 500, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/swarmer/Login() ..() to_chat(src, "You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate.") diff --git a/code/game/gamemodes/miniantags/demons/demon.dm b/code/game/gamemodes/miniantags/demons/demon.dm index f7cd5e16b23..60f8b2bac62 100644 --- a/code/game/gamemodes/miniantags/demons/demon.dm +++ b/code/game/gamemodes/miniantags/demons/demon.dm @@ -18,8 +18,6 @@ attack_sound = 'sound/misc/demon_attack1.ogg' death_sound = 'sound/misc/demon_dies.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY faction = list(ROLE_DEMON) attacktext = "неистово терзает" maxHealth = 200 @@ -44,6 +42,12 @@ whisper_action.Grant(src) addtimer(CALLBACK(src, PROC_REF(attempt_objectives)), 5 SECONDS) +/mob/living/simple_animal/demon/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/demon/Destroy() if(mind) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index b3a6d364dba..5fab14d1b2f 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -18,8 +18,6 @@ stop_automated_movement = 1 universal_speak = TRUE attack_sound = 'sound/weapons/punch1.ogg' - minbodytemp = 0 - maxbodytemp = INFINITY atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) attacktext = "бьёт" maxHealth = INFINITY //The spirit itself is invincible @@ -54,6 +52,13 @@ summoner = host host.grant_guardian_actions(src) +/mob/living/simple_animal/hostile/guardian/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/guardian/med_hud_set_health() if(summoner) var/image/holder = hud_list[HEALTH_HUD] diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index da6dd07476f..0b931115331 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -23,7 +23,6 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 maxHealth = 150 health = 150 environment_smash = 1 @@ -85,6 +84,11 @@ GLOB.morphs_alive_list += src check_morphs() +/mob/living/simple_animal/hostile/morph/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /** * This proc enables or disables morph reproducing ability diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 1ea56cf0309..d137402f9bd 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -27,8 +27,6 @@ response_disarm = "swings at" response_harm = "punches" unsuitable_atmos_damage = 0 - minbodytemp = 0 - maxbodytemp = INFINITY harm_intent_damage = 0 friendly = "touches" status_flags = 0 @@ -62,6 +60,12 @@ ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) AddElement(/datum/element/simple_flying) +/mob/living/simple_animal/revenant/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/revenant/Life(seconds, times_fired) ..() diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index 45e01eb5e94..3d53b54e7b1 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -27,8 +27,6 @@ attacktext = "кромсает" attack_sound = 'sound/weapons/slash.ogg' - minbodytemp = 0 - maxbodytemp = INFINITY environment_smash = ENVIRONMENT_SMASH_RWALLS faction = list("faithless") @@ -43,6 +41,13 @@ icon_living = "NurnKal" update_icon(UPDATE_OVERLAYS) +/mob/living/simple_animal/ascendant_shadowling/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE //copypasta from carp code diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index f0cd0b2dc23..5bbc3454cef 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -192,9 +192,10 @@ occupantData["temperatureSuitability"] = 1 else if(isanimal(occupant)) var/mob/living/simple_animal/silly = occupant - if(silly.bodytemperature < silly.minbodytemp) + var/datum/component/animal_temperature/temp = silly.GetComponent(/datum/component/animal_temperature) + if(silly.bodytemperature < temp?.minbodytemp) occupantData["temperatureSuitability"] = -3 - else if(silly.bodytemperature > silly.maxbodytemp) + else if(silly.bodytemperature > temp?.maxbodytemp) occupantData["temperatureSuitability"] = 3 // Blast you, imperial measurement system occupantData["btCelsius"] = occupant.bodytemperature - T0C diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 7ab4691e74c..e45eb7adaa2 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -101,9 +101,10 @@ occupantData["temperatureSuitability"] = 1 else if(isanimal(occupant)) var/mob/living/simple_animal/silly = occupant - if(silly.bodytemperature < silly.minbodytemp) + var/datum/component/animal_temperature/temp = silly.GetComponent(/datum/component/animal_temperature) + if(silly.bodytemperature < temp?.minbodytemp) occupantData["temperatureSuitability"] = -3 - else if(silly.bodytemperature > silly.maxbodytemp) + else if(silly.bodytemperature > temp?.maxbodytemp) occupantData["temperatureSuitability"] = 3 // Blast you, imperial measurement system occupantData["btCelsius"] = occupant.bodytemperature - T0C diff --git a/code/modules/antagonists/blob/blob_infected_datum.dm b/code/modules/antagonists/blob/blob_infected_datum.dm index bf21c456d32..4c41c1fb572 100644 --- a/code/modules/antagonists/blob/blob_infected_datum.dm +++ b/code/modules/antagonists/blob/blob_infected_datum.dm @@ -322,16 +322,22 @@ if(..(affected)) old_atmos_requirements = affected.atmos_requirements affected.atmos_requirements = BLOB_INFECTED_ATMOS_REC - affected.minbodytemp = BLOB_INFECTED_MIN_BODY_TEMP + + var/datum/component/animal_temperature/temp = affected.GetComponent(/datum/component/animal_temperature) + temp?.minbodytemp = BLOB_INFECTED_MIN_BODY_TEMP + return TRUE + return FALSE /datum/antagonist/blob_infected/simple_animal/remove_atmos_immunity(mob/living/simple_animal/affected) if(..(affected)) affected.atmos_requirements = old_atmos_requirements - affected.minbodytemp = initial(affected.minbodytemp) + var/datum/component/animal_temperature/temp = affected.GetComponent(/datum/component/animal_temperature) + temp?.minbodytemp = initial(temp?.minbodytemp) return TRUE + return FALSE diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 1f3b12725cb..9eebcddb793 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -52,8 +52,6 @@ butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30, /obj/item/reagent_containers/food/snacks/carpmeat = 15) deathmessage = "визж%(ит,ат)%, %(его,её,его,их)% глаза мутнеют, крылья превращаются в пыль и %(он,она,оно,они)% пада%(ет,ют)% замертво!" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 3500 faction = list("carp") pressure_resistance = 200 sentience_type = SENTIENCE_BOSS @@ -94,6 +92,12 @@ AddElement(/datum/element/simple_flying) RegisterSignal(small_sprite, COMSIG_ACTION_TRIGGER, PROC_REF(add_dragon_overlay)) +/mob/living/simple_animal/hostile/space_dragon/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 3500, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/space_dragon/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE diff --git a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm index 3136eb36eec..1ba68b43c40 100644 --- a/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/bestia_powers.dm @@ -1891,9 +1891,6 @@ mob_size = MOB_SIZE_LARGE nightvision = 8 // full night vision atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) // we need oxygen only - minbodytemp = 0 - maxbodytemp = 600 // better than human vampire but still dangerous - heat_damage_per_tick = 5 // we are a vampire animal and high temperatures are pretty bad AI_delay_max = 0 SECONDS var/dead_for_sure = FALSE // we need this to prevent death() proc to invoke nultiple times var/datum/antagonist/vampire/vampire @@ -1912,6 +1909,13 @@ if(meta_spell) parent_spell = meta_spell +/mob/living/simple_animal/hostile/vampire/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 600, \ + minbodytemp = 0, \ + heat_damage = 5, \ + ) /mob/living/simple_animal/hostile/vampire/Destroy() vampire = null @@ -2099,13 +2103,18 @@ environment_smash = ENVIRONMENT_SMASH_WALLS obj_damage = 50 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) // ultimate form, no need in oxy - maxbodytemp = 1200 // we are still a vampire /// How many cycles will be skipped between blood cost apply. var/life_cycles_skip = 2 var/life_cycles_current = 0 /// Needed to stop warnings spam on low blood. var/warning_done = FALSE +/mob/living/simple_animal/hostile/vampire/hound/ComponentInitialize() + . = ..() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1200, \ + ) /mob/living/simple_animal/hostile/vampire/hound/Initialize(mapload, datum/antagonist/vampire/vamp, mob/living/carbon/human/h_vampire, obj/effect/proc_holder/spell/vampire/metamorphosis/meta_spell) . = ..() diff --git a/code/modules/awaymissions/mission_code/ruins/spacebotany.dm b/code/modules/awaymissions/mission_code/ruins/spacebotany.dm index 3bd4b77aab3..1de66cbb55d 100644 --- a/code/modules/awaymissions/mission_code/ruins/spacebotany.dm +++ b/code/modules/awaymissions/mission_code/ruins/spacebotany.dm @@ -55,10 +55,17 @@ melee_damage_upper = 40 can_hide = TRUE xenobiology_spawned = FALSE - heat_damage_per_tick = 0 aggro_vision_range = 6 damage_coeff = list("brute" = 1, "fire" = -0.1, "tox" = 0, "clone" = 0, "stamina" = 0, "oxy" = 0) +/mob/living/simple_animal/hostile/killertomato/spacebotany/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 500, \ + minbodytemp = 150, \ + heat_damage = 0, \ + ) + /mob/living/simple_animal/hostile/tree/palm name = "Palm tree" diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index abed62005fb..b13a857f5fd 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -284,8 +284,6 @@ universal_understand = 1 del_on_death = 1 unsuitable_atmos_damage = 0 - minbodytemp = 0 - maxbodytemp = 1500 environment_smash = 0 AIStatus = AI_OFF stop_automated_movement = 1 @@ -299,6 +297,13 @@ var/datum/atom_hud/medsensor = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] medsensor.add_hud_to(src) +/mob/living/simple_animal/hostile/lightgeist/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1500, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/lightgeist/AttackingTarget() . = ..() if(isliving(target) && target != src) diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 1aa77729ceb..1a86be24e7a 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -14,7 +14,6 @@ faction = list("neutral") a_intent = INTENT_HARM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 move_to_delay = 10 health = 125 maxHealth = 125 @@ -61,6 +60,12 @@ SetCollectBehavior() +/mob/living/simple_animal/hostile/mining_drone/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/mining_drone/emp_act(severity) adjustHealth(100 / severity) to_chat(src, "NOTICE: EMP detected, systems damaged!") diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index d9a8557a088..d5f7031309d 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -10,7 +10,6 @@ healable = FALSE damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 has_unlimited_silicon_privilege = TRUE sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush @@ -141,6 +140,11 @@ hud_possible = list(DIAG_STAT_HUD, DIAG_BOT_HUD, DIAG_HUD, DIAG_PATH_HUD = HUD_LIST_LIST)//Diagnostic HUD views +/mob/living/simple_animal/bot/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /obj/item/radio/headset/bot requires_tcomms = FALSE diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 264a8f8ced5..c33d9aba886 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -15,7 +15,6 @@ see_invisible = SEE_INVISIBLE_HIDDEN_RUNES attack_sound = 'sound/weapons/punch1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("cult") pressure_resistance = 100 universal_speak = TRUE @@ -55,6 +54,12 @@ add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_HEALS_FROM_HOLY_PYLONS, TRAIT_NO_FLOATING_ANIM), INNATE_TRAIT) AddElement(/datum/element/simple_flying) +/mob/living/simple_animal/hostile/construct/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 223, \ + ) + /mob/living/simple_animal/hostile/construct/death(gibbed) . = ..() SSticker.mode.remove_cultist(mind, FALSE) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index fdbb80ac8d6..8880a157c88 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -240,7 +240,6 @@ gold_core_spawnable = NO_SPAWN eats_mice = 0 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 melee_damage_lower = 5 melee_damage_upper = 15 @@ -250,6 +249,11 @@ add_language(LANGUAGE_GALACTIC_COMMON) ADD_TRAIT(src, TRAIT_NO_BREATH, INNATE_TRAIT) +/mob/living/simple_animal/pet/cat/Syndi/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/pet/cat/cak name = "Keeki" @@ -337,10 +341,15 @@ icon_dead = "spacecat_dead" icon_resting = "spacecat_rest" unsuitable_atmos_damage = 0 - minbodytemp = TCMB - maxbodytemp = T0C + 40 holder_type = /obj/item/holder/spacecat +/mob/living/simple_animal/pet/cat/spacecat/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = T0C + 40, \ + minbodytemp = TCMB, \ + ) + /mob/living/simple_animal/pet/cat/fat name = "FatCat" desc = "Упитана. Счастлива." diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 21f4ea02a38..19cc9555554 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -7,8 +7,6 @@ maxHealth = 1 turns_per_move = 5 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 270 - maxbodytemp = INFINITY pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY response_help = "pokes" @@ -23,6 +21,12 @@ del_on_death = 1 tts_seed = "Villagerm" +/mob/living/simple_animal/cockroach/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 270, \ + maxbodytemp = INFINITY, \ + ) /mob/living/simple_animal/cockroach/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index e68e1ee1718..188ed783e26 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -15,7 +15,6 @@ ventcrawler_trait = TRAIT_VENTCRAWLER_ALWAYS mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 maxHealth = 50 health = 50 @@ -54,6 +53,12 @@ var/datum/action/innate/diona/evolve/evolve_action = new() var/datum/action/innate/diona/steal_blood/steal_blood_action = new() +/mob/living/simple_animal/diona/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /datum/action/innate/diona/merge name = "Merge with gestalt" icon_icon = 'icons/mob/human_races/r_diona.dmi' diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 53d1d352eb9..1b3978b8299 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -247,7 +247,8 @@ set_light_on(FALSE) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) REMOVE_TRAIT(src, TRAIT_NO_BREATH, CORGI_HARDSUIT_TRAIT) - minbodytemp = initial(minbodytemp) + var/datum/component/animal_temperature/temp = GetComponent(/datum/component/animal_temperature) + temp?.minbodytemp = initial(temp?.minbodytemp) if(inventory_head && inventory_head.dog_fashion) var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) @@ -554,13 +555,18 @@ icon_dead = "void_puppy_dead" nofur = TRUE unsuitable_atmos_damage = 0 - minbodytemp = TCMB - maxbodytemp = T0C + 40 tts_seed = "Kael" holder_type = /obj/item/holder/void_puppy maxHealth = 60 health = 60 +/mob/living/simple_animal/pet/dog/corgi/puppy/void/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = T0C + 40, \ + minbodytemp = TCMB, \ + ) + /mob/living/simple_animal/pet/dog/corgi/puppy/void/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE //Void puppies can navigate space. @@ -573,8 +579,13 @@ icon_dead = "slime_puppy_dead" nofur = TRUE holder_type = /obj/item/holder/slime_puppy - minbodytemp = 250 //Weak to cold - maxbodytemp = INFINITY + +/mob/living/simple_animal/pet/dog/corgi/puppy/slime/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 250, \ + ) //LISA! SQUEEEEEEEEE~ /mob/living/simple_animal/pet/dog/corgi/Lisa @@ -632,7 +643,6 @@ tts_seed = "Glados" var/emagged = 0 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) del_on_death = 1 deathmessage = "blows apart!" @@ -640,6 +650,12 @@ nofur = TRUE holder_type = /obj/item/holder/borgi +/mob/living/simple_animal/pet/dog/corgi/borgi/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/pet/dog/corgi/borgi/emag_act(mob/user) if(!emagged) emagged = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index bb78fd82f17..1731a1c133a 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -35,9 +35,13 @@ /mob/living/simple_animal/pet/dog/fox/forest/winter - minbodytemp = 0 weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) +/mob/living/simple_animal/pet/dog/fox/forest/winter/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) //Captain fox /mob/living/simple_animal/pet/dog/fox/Renault @@ -58,10 +62,14 @@ unique_pet = TRUE gold_core_spawnable = NO_SPAWN atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 melee_damage_lower = 10 melee_damage_upper = 20 +/mob/living/simple_animal/pet/dog/fox/SyndiFox/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/pet/dog/fox/Syndifox/Initialize(mapload) . = ..() @@ -81,10 +89,14 @@ unique_pet = TRUE gold_core_spawnable = NO_SPAWN atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 melee_damage_lower = 10 melee_damage_upper = 20 +/mob/living/simple_animal/pet/dog/fox/alisa/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/pet/dog/fox/alisa/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/frog.dm b/code/modules/mob/living/simple_animal/friendly/frog.dm index b6949c1eb53..06ace0b7efe 100644 --- a/code/modules/mob/living/simple_animal/friendly/frog.dm +++ b/code/modules/mob/living/simple_animal/friendly/frog.dm @@ -31,8 +31,6 @@ mob_size = MOB_SIZE_TINY layer = MOB_LAYER atmos_requirements = list("min_oxy" = 16, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 223 //Below -50 Degrees Celcius - maxbodytemp = 323 //Above 50 Degrees Celcius universal_speak = 0 can_hide = 1 holder_type = /obj/item/holder/frog @@ -47,6 +45,12 @@ ) AddElement(/datum/element/connect_loc, loc_connections) +/mob/living/simple_animal/frog/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 323, \ + minbodytemp = 223, \ + ) /mob/living/simple_animal/frog/attack_hand(mob/living/carbon/human/M) if(M.a_intent == INTENT_HELP) @@ -140,14 +144,12 @@ real_name = "Маппер" atmos_requirements = list("min_oxy"=0,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=0,"min_n2"=0,"max_n2"=0) butcher_results = list(/obj/item/areaeditor/blueprints=1) - cold_damage_per_tick = 0 damage_coeff = list("brute"=0,"fire"=0,"tox"=0,"clone"=0,"stamina"=0,"oxy"=0) death_sound = 'sound/creatures/mapper_death.ogg' desc = "Окупировавшая один из офисов на Центральном командовании лягушка. Постоянно кричит что-то в монитор." emote_hear = list("МГРЛЬК","МРГЛ","УААМРГЛ") emote_see = list("лежит расслабленная","увлажнена","издает гортанные звуки","лупает глазками","сильно недовольна","ищет рантаймы") maxHealth = 1000 - maxbodytemp = 1000 scream_sound = list('sound/creatures/mapper_disappointed.ogg','sound/creatures/mapper_angry.ogg','sound/creatures/mapper_annoyed.ogg') speak = list("МРГЛЬК!","ТРУБА В ТРУБЕ! РАНТАЙМ! ПИЗДЕЦ!","ЧЕРЕЗ ЧАС!","ЗЕРО НА ВАЙТЛИСТЕ!","1.5.7. В РЕЛИЗЕЕЕ!","ВОТ БИ СМ НА КОРОБКУ!","ДА КТО ЭТОТ ВАШ ПР?!","МУЛЬТИЗЕТА ХОЧЕТСЯ!") squeak_sound = list('sound/creatures/mapper_disappointed.ogg','sound/creatures/mapper_angry.ogg','sound/creatures/mapper_annoyed.ogg') @@ -157,3 +159,10 @@ /mob/living/simple_animal/frog/scream/mapper/Initialize(mapload) . = ..() AddComponent(/datum/component/squeak, squeak_sound, 50, extrarange = SILENCED_SOUND_EXTRARANGE) //as quiet as a frog or whatever + +/mob/living/simple_animal/frog/scream/mapper/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1000, \ + cold_damage = 0, \ + ) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 18c546d1760..4991ec5559f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -37,8 +37,6 @@ mob_size = MOB_SIZE_TINY layer = MOB_LAYER atmos_requirements = list("min_oxy" = 16, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 223 //Below -50 Degrees Celcius - maxbodytemp = 323 //Above 50 Degrees Celcius universal_speak = FALSE can_hide = TRUE pass_door_while_hidden = TRUE @@ -61,6 +59,13 @@ ) AddElement(/datum/element/connect_loc, loc_connections) +/mob/living/simple_animal/mouse/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 323, \ + minbodytemp = 223, \ + ) + /mob/living/simple_animal/mouse/add_strippable_element() AddElement(/datum/element/strippable, GLOB.strippable_mouse_items) @@ -416,7 +421,6 @@ maxHealth = 100 health = 100 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 gold_core_spawnable = NO_SPAWN @@ -424,6 +428,12 @@ . = ..() addtimer(CALLBACK(src, PROC_REF(get_mind)), MOUSE_REVOTE_TIME) +/mob/living/simple_animal/mouse/blobinfected/ComponentInitialize() + . = ..() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/mouse/blobinfected/get_scooped(mob/living/carbon/grabber) to_chat(grabber, span_warning("You try to pick up [src], but they slip out of your grasp!")) diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 0322a34ec38..9e42c59a951 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -35,6 +35,11 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/bird = 4) gold_core_spawnable = FRIENDLY_SPAWN +/mob/living/simple_animal/pet/penguin/emperor/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/pet/penguin/eldrich name = "Albino penguin" @@ -52,6 +57,11 @@ emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.") faction = list("penguin", "cult") +/mob/living/simple_animal/pet/penguin/eldritch/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/pet/penguin/emperor/shamebrero name = "Shamebrero penguin" diff --git a/code/modules/mob/living/simple_animal/friendly/snail.dm b/code/modules/mob/living/simple_animal/friendly/snail.dm index 1875658ea6b..2a96ec9715c 100644 --- a/code/modules/mob/living/simple_animal/friendly/snail.dm +++ b/code/modules/mob/living/simple_animal/friendly/snail.dm @@ -25,11 +25,16 @@ gold_core_spawnable = FRIENDLY_SPAWN stop_automated_movement_when_pulled = 0 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("slime", "neutral") reagents = new() holder_type = /obj/item/holder/snail +/mob/living/simple_animal/hostile/snail/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/snail/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE // why??? diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index d43fde739f3..21ac8a2b2df 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -26,8 +26,6 @@ tts_seed = "Antimage" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 500 can_hide = 1 ventcrawler_trait = TRAIT_VENTCRAWLER_ALWAYS @@ -38,6 +36,13 @@ var/obj/item/mmi/mmi = null var/mob/emagged_master = null //for administrative purposes, to see who emagged the spiderbot; also for a holder for if someone emags an empty frame first then inserts an MMI. +/mob/living/simple_animal/spiderbot/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 500, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/spiderbot/Destroy() if(emagged) QDEL_NULL(mmi) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index b5a22c1734b..6bf47de8eae 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -26,10 +26,8 @@ attack_sound = 'sound/weapons/bladeslice.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 15 - heat_damage_per_tick = 20 faction = list("alien") status_flags = CANPUSH - minbodytemp = 0 nightvision = 8 AI_delay_max = 0.5 SECONDS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE @@ -38,6 +36,13 @@ deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." footstep_type = FOOTSTEP_MOB_CLAW +/mob/living/simple_animal/hostile/alien/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + heat_damage = 20, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/alien/drone name = "alien drone" icon_state = "aliend_running" diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index d32c38d057b..a00654772c0 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -26,7 +26,6 @@ taunt_chance = 20 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 // break_stuff_probability = 2 @@ -44,6 +43,11 @@ . = ..() AddElement(/datum/element/simple_flying) +/mob/living/simple_animal/hostile/scarybat/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index f8c0609b7dd..6fc1cdfbd5b 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -36,12 +36,16 @@ //Space bears aren't affected by atmos. atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("russian") gold_core_spawnable = HOSTILE_SPAWN weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) +/mob/living/simple_animal/hostile/bear/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/bear/handle_automated_movement() if(..()) diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index f1c925c29d9..44a5af40f2f 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -40,7 +40,6 @@ //Spaceborn beings don't get hurt by space atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 del_on_death = TRUE var/datum/reagent/beegent = null //hehe, beegent @@ -61,6 +60,12 @@ AddComponent(/datum/component/swarming) AddElement(/datum/element/simple_flying) +/mob/living/simple_animal/hostile/poison/bees/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/poison/bees/Destroy() beegent = null if(beehome) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index a59a484907f..b725cdae4b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -30,8 +30,6 @@ //Space carp aren't affected by atmos. atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 faction = list("carp") pressure_resistance = 200 gold_core_spawnable = HOSTILE_SPAWN @@ -70,6 +68,12 @@ ADD_TRAIT(src, TRAIT_HEALS_FROM_CARP_RIFTS, INNATE_TRAIT) AddElement(/datum/element/simple_flying) +/mob/living/simple_animal/hostile/carp/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1500, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/carp/proc/carp_randomify(rarechance) if(random_color) @@ -127,10 +131,16 @@ /mob/living/simple_animal/hostile/carp/holocarp icon_state = "holocarp" icon_living = "holocarp" - maxbodytemp = INFINITY del_on_death = 1 random_color = FALSE +/mob/living/simple_animal/hostile/carp/holocarp/ComponentInitialize() + . = ..() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + ) + /mob/living/simple_animal/hostile/carp/megacarp icon = 'icons/mob/alienqueen.dmi' name = "Mega Space Carp" @@ -186,11 +196,16 @@ retreat_distance = 6 vision_range = 5 retaliate_only = TRUE - minbodytemp = 250 - maxbodytemp = 350 gold_core_spawnable = NO_SPAWN var/carp_color = "carp" //holder for icon set +/mob/living/simple_animal/hostile/carp/sea/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 350, \ + minbodytemp = 250, \ + ) + /mob/living/simple_animal/hostile/carp/mcarp name = "mutated Carp" desc = "Strange-looking space carp." diff --git a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm index 091890e3aa6..f69b6f2ce53 100644 --- a/code/modules/mob/living/simple_animal/hostile/deathsquid.dm +++ b/code/modules/mob/living/simple_animal/hostile/deathsquid.dm @@ -25,13 +25,16 @@ force_threshold = 15 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 0 - heat_damage_per_tick = 0 nightvision = 8 mob_size = MOB_SIZE_LARGE gold_core_spawnable = NO_SPAWN - +/mob/living/simple_animal/hostile/deathsquid/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + heat_damage = 0, \ + ) /mob/living/simple_animal/hostile/deathsquid/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE //copypasta from carp code diff --git a/code/modules/mob/living/simple_animal/hostile/evil_pine.dm b/code/modules/mob/living/simple_animal/hostile/evil_pine.dm index a75dbcf0ade..088b1fc290a 100644 --- a/code/modules/mob/living/simple_animal/hostile/evil_pine.dm +++ b/code/modules/mob/living/simple_animal/hostile/evil_pine.dm @@ -8,7 +8,6 @@ health = 120 maxHealth = 120 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 robust_searching = 1 armour_penetration = 10 @@ -35,3 +34,9 @@ speak_chance = 20 turns_per_move = 1 turns_since_move = 0 + +/mob/living/simple_animal/hostile/evil_pine/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index af3f1eca225..f1568f254eb 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -24,12 +24,17 @@ footstep_type = FOOTSTEP_MOB_SHOE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("faithless") gold_core_spawnable = HOSTILE_SPAWN AI_delay_max = 0 SECONDS +/mob/living/simple_animal/hostile/faithless/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/faithless/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index cf8ff721c32..dfc795e65ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -27,8 +27,6 @@ environment_smash = FALSE pixel_y = 8 pressure_resistance = 200 - minbodytemp = 0 - maxbodytemp = 1500 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) var/mob/living/carbon/human/current_victim var/manifested = FALSE @@ -58,6 +56,12 @@ return Acquire_Victim() +/mob/living/simple_animal/hostile/floor_cluwne/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = 1500, \ + ) /mob/living/simple_animal/hostile/floor_cluwne/Destroy() return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 01989df7e66..55d751ee2b4 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -28,8 +28,6 @@ obj_damage = 60 melee_damage_lower = 15 melee_damage_upper = 20 - heat_damage_per_tick = 20 //amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 20 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp faction = list("spiders") pass_flags = PASSTABLE move_to_delay = 6 @@ -44,6 +42,13 @@ footstep_type = FOOTSTEP_MOB_CLAW AI_delay_max = 0.5 SECONDS +/mob/living/simple_animal/hostile/poison/giant_spider/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + heat_damage = 20, \ + cold_damage = 20, \ + ) + /mob/living/simple_animal/hostile/poison/giant_spider/AttackingTarget() // This is placed here, NOT on /poison, because the other subtypes of /poison/ already override AttackingTarget() completely, and as such it would do nothing but confuse people there. . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 90b177d86f6..6d2bca66042 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -24,8 +24,6 @@ attack_sound = 'sound/weapons/punch1.ogg' faction = list("hostile", "monkey", "jungle") robust_searching = TRUE - minbodytemp = 270 - maxbodytemp = 350 nightvision = 8 can_collar = TRUE footstep_type = FOOTSTEP_MOB_BAREFOOT @@ -59,6 +57,12 @@ var/static/default_cache = typecacheof(list(/obj/structure/closet/crate)) // Normal crates only please, no weird sized ones carriable_cache = default_cache +/mob/living/simple_animal/hostile/gorilla/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 350, \ + minbodytemp = 270, \ + ) /mob/living/simple_animal/hostile/gorilla/Destroy() reset_behavior(play_emote = FALSE) diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/simple_animal/hostile/hellhound.dm index aa7dc41cb40..bfc42e52e03 100644 --- a/code/modules/mob/living/simple_animal/hostile/hellhound.dm +++ b/code/modules/mob/living/simple_animal/hostile/hellhound.dm @@ -8,8 +8,6 @@ icon_dead = "hellhound_dead" icon_resting = "hellhound_rest" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = INFINITY mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT melee_damage_lower = 10 // slightly higher than araneus melee_damage_upper = 30 @@ -43,6 +41,12 @@ whisper_action = new() whisper_action.Grant(src) +/mob/living/simple_animal/hostile/hellhound/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = INFINITY, \ + ) /mob/living/simple_animal/hostile/hellhound/handle_automated_action() if(!..()) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 428254db777..1b3653a6c65 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -20,7 +20,6 @@ faction = list("hivebot") check_friendly_fire = 1 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 speak_emote = list("states") gold_core_spawnable = HOSTILE_SPAWN loot = list(/obj/effect/decal/cleanable/blood/gibs/robot) @@ -30,6 +29,12 @@ footstep_type = FOOTSTEP_MOB_CLAW AI_delay_max = 0.5 SECONDS +/mob/living/simple_animal/hostile/hivebot/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/hivebot/range name = "Hivebot" desc = "A smallish robot, this one is armed!" diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm index 350d0a9c523..0d38cec6bf5 100644 --- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm +++ b/code/modules/mob/living/simple_animal/hostile/killertomato.dm @@ -21,7 +21,12 @@ faction = list("plants") atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 150 - maxbodytemp = 500 gold_core_spawnable = HOSTILE_SPAWN AI_delay_max = 0 SECONDS + +/mob/living/simple_animal/hostile/killertomato/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 500, \ + minbodytemp = 150, \ + ) diff --git a/code/modules/mob/living/simple_animal/hostile/lizard.dm b/code/modules/mob/living/simple_animal/hostile/lizard.dm index ed0ffb4bb63..e34ad8b76fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/lizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/lizard.dm @@ -31,11 +31,15 @@ damaged_sound = list('sound/creatures/lizard_damaged.ogg') footstep_type = FOOTSTEP_MOB_CLAW - minbodytemp = 250 //Weak to cold - maxbodytemp = T0C + 200 - gold_core_spawnable = HOSTILE_SPAWN +/mob/living/simple_animal/hostile/lizard/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = T0C + 200, \ + minbodytemp = 250, \ + ) + /mob/living/simple_animal/hostile/lizard/gator name = "аллигатор" desc = "Величавый аллигатор, так и норовящийся оторвать от вас самый лакомый кусочек. Или кусок. Не путать с крокодилом!" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/ancient_robot.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/ancient_robot.dm index 6e143183db4..c7c05820f65 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/ancient_robot.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/ancient_robot.dm @@ -614,7 +614,6 @@ Difficulty: Very Hard faction = list("mining", "boss") // No attacking your leg weather_immunities = list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 check_friendly_fire = 1 ranged = TRUE projectilesound = 'sound/weapons/gunshots/1autorifle.ogg' @@ -654,6 +653,12 @@ Difficulty: Very Hard ranged_cooldown_time = rand(30, 60) // keeps them not running on the same time addtimer(CALLBACK(src, PROC_REF(beam_setup)), 1 SECONDS) +/mob/living/simple_animal/hostile/ancient_robot_leg/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/ancient_robot_leg/death(gibbed) return //It shouldn't get gibbed by shuttle. diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 1c66cd6215c..8fca6764c79 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -16,8 +16,6 @@ stat_attack = DEAD atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - minbodytemp = 0 - maxbodytemp = INFINITY vision_range = 5 aggro_vision_range = 18 move_force = MOVE_FORCE_OVERPOWERING @@ -56,6 +54,13 @@ var/datum/action/innate/megafauna_attack/attack_action = new action_type() attack_action.Grant(src) +/mob/living/simple_animal/hostile/megafauna/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/megafauna/Destroy() QDEL_NULL(internal_gps) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 2e409a4afed..ae9cd3b69c3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -23,7 +23,6 @@ taunt_chance = 30 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("mimic") move_to_delay = 9 @@ -33,6 +32,12 @@ del_on_death = 1 AI_delay_max = 0.5 SECONDS +/mob/living/simple_animal/hostile/mimic/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/mimic/emp_act(severity) if(is_electronic) switch(severity) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm index 5d72cfdc5a3..860a9c43c4a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/hivelord.dm @@ -329,7 +329,6 @@ AIStatus = AI_ON stop_automated_movement = FALSE wander = TRUE - maxbodytemp = INFINITY layer = MOB_LAYER del_on_death = TRUE sentience_type = SENTIENCE_BOSS @@ -347,6 +346,11 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE tts_seed = "Mannoroth" +/mob/living/simple_animal/hostile/big_legion/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + ) /mob/living/simple_animal/hostile/big_legion/Initialize(mapload) .=..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm index 6b2417bf6c0..9c887472f6c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/mining.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/mining.dm @@ -2,13 +2,10 @@ /mob/living/simple_animal/hostile/asteroid vision_range = 2 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - heat_damage_per_tick = 20 faction = list("mining") weather_immunities = list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE) obj_damage = 30 environment_smash = ENVIRONMENT_SMASH_WALLS - minbodytemp = 0 - maxbodytemp = INFINITY response_help = "pokes" response_disarm = "shoves" response_harm = "strikes" @@ -26,6 +23,14 @@ var/crusher_drop_mod = 25 var/has_laser_resist = TRUE //If we want the mob to have 66% resist from burn damage projectiles +/mob/living/simple_animal/hostile/asteroid/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = INFINITY, \ + minbodytemp = 0, \ + heat_damage = 20, \ + ) + /mob/living/simple_animal/hostile/asteroid/Aggro() ..() if(vision_range != aggro_vision_range) diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index e8b540c765b..2099d019c76 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -15,9 +15,14 @@ speak_emote = list("screams") gold_core_spawnable = HOSTILE_SPAWN atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("nether") +/mob/living/simple_animal/hostile/netherworld/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/netherworld/migo name = "mi-go" desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae." diff --git a/code/modules/mob/living/simple_animal/hostile/rat_syndi.dm b/code/modules/mob/living/simple_animal/hostile/rat_syndi.dm index c3ec287aae3..1e383c14fcc 100644 --- a/code/modules/mob/living/simple_animal/hostile/rat_syndi.dm +++ b/code/modules/mob/living/simple_animal/hostile/rat_syndi.dm @@ -32,7 +32,6 @@ AI_delay_max = 0 SECONDS atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 ranged = 1 @@ -57,6 +56,11 @@ ) AddElement(/datum/element/connect_loc, loc_connections) +/mob/living/simple_animal/hostile/retaliate/syndirat/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/retaliate/syndirat/handle_automated_action() if(prob(chew_probability) && isturf(loc)) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/carp.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/carp.dm index 4991691c1b2..1f85dce7a6e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/carp.dm @@ -25,8 +25,6 @@ speak_emote = list("gnashes") unique_pet = TRUE atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - maxbodytemp = 1500 faction = list("carp") pressure_resistance = 200 gold_core_spawnable = NO_SPAWN @@ -48,3 +46,10 @@ if(. && ishuman(target)) var/mob/living/carbon/human/H = target H.apply_damage(carp_stamina_damage, STAMINA) + +/mob/living/simple_animal/hostile/retaliate/luu/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = 1500, \ + ) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 11e3783009a..413fd46b55d 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -25,13 +25,17 @@ attack_sound = 'sound/items/bikehorn.ogg' obj_damage = 0 environment_smash = 0 - minbodytemp = 270 - maxbodytemp = 370 - heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp unsuitable_atmos_damage = 10 footstep_type = FOOTSTEP_MOB_SHOE +/mob/living/simple_animal/hostile/retaliate/clown/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 270, \ + maxbodytemp = 370, \ + heat_damage = 15, \ + cold_damage = 10, \ + ) /mob/living/simple_animal/hostile/retaliate/clown/goblin icon = 'icons/mob/animal.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 484f0a324e5..51e1eb36e97 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -26,7 +26,6 @@ projectiletype = /obj/item/projectile/beam/immolator/weak projectilesound = 'sound/weapons/laser3.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("malf_drone") deathmessage = "suddenly breaks apart." del_on_death = 1 @@ -40,6 +39,11 @@ ion_trail.set_up(src) ion_trail.start() +/mob/living/simple_animal/hostile/malf_drone/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/malf_drone/Destroy() QDEL_NULL(ion_trail) diff --git a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm index 350efa2a30c..a97622a9adf 100644 --- a/code/modules/mob/living/simple_animal/hostile/spaceworms.dm +++ b/code/modules/mob/living/simple_animal/hostile/spaceworms.dm @@ -24,8 +24,6 @@ stop_automated_movement = 1 animate_movement = SYNC_STEPS - minbodytemp = 0 - maxbodytemp = 350 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) a_intent = INTENT_HARM //so they don't get pushed around @@ -56,6 +54,12 @@ . = ..() ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT) +/mob/living/simple_animal/hostile/spaceWorm/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 350, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/spaceWorm/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE //space worms can flyyyyyy diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm index b22f8a4fcd4..d2df9583cfb 100644 --- a/code/modules/mob/living/simple_animal/hostile/statue.dm +++ b/code/modules/mob/living/simple_animal/hostile/statue.dm @@ -27,7 +27,6 @@ attack_sound = 'sound/hallucinations/growl1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("statue") move_to_delay = 0 // Very fast @@ -68,6 +67,12 @@ if(creator) src.creator = creator +/mob/living/simple_animal/hostile/statue/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/statue/Move(atom/newloc, direct = NONE, glide_size_override = 0, update_dir = TRUE) if(can_be_seen(newloc)) if(client) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index b38a6c620dd..0e32e15ec6b 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -243,12 +243,17 @@ icon_state = "syndicate_stormtrooper_sword" icon_living = "syndicate_stormtrooper_sword" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 maxHealth = 200 health = 200 melee_block_chance = 40 alert_on_shield_breach = TRUE +/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/armory/Initialize(mapload) . = ..() if(prob(50)) @@ -282,13 +287,17 @@ /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space name = "Syndicate Backup" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 icon_state = "syndicate_space_sword" icon_living = "syndicate_space_sword" speed = 1 wander = 0 alert_on_spacing = FALSE +/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/space/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE @@ -297,12 +306,17 @@ /mob/living/simple_animal/hostile/syndicate/melee/space name = "Syndicate Commando" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 icon_state = "syndicate_space_sword" icon_living = "syndicate_space_sword" speed = 1 loot = list(/obj/effect/mob_spawn/human/corpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy/syndie) +/mob/living/simple_animal/hostile/syndicate/melee/space/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE @@ -322,10 +336,15 @@ icon_living = "syndicate_space_smg" name = "Syndicate Commando" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 speed = 1 loot = list(/obj/effect/mob_spawn/human/corpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r) +/mob/living/simple_animal/hostile/syndicate/ranged/space/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(movement_dir = NONE, continuous_move = FALSE) return TRUE @@ -349,7 +368,6 @@ attack_sound = 'sound/weapons/bladeslice.ogg' faction = list("syndicate") atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 mob_size = MOB_SIZE_TINY bubble_icon = "syndibot" gold_core_spawnable = HOSTILE_SPAWN @@ -361,3 +379,9 @@ . = ..() AddComponent(/datum/component/swarming) AddElement(/datum/element/simple_flying) + +/mob/living/simple_animal/hostile/viscerator/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 5b330d3faf3..593dbc8434b 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -135,9 +135,6 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) var/datum/action/innate/terrorspider/web/web_action var/datum/action/innate/terrorspider/wrap/wrap_action - // Temperature - heat_damage_per_tick = 6.5 // Takes 250% normal damage from being in a hot environment ("kill it with fire!") - // DEBUG OPTIONS & COMMANDS var/spider_growinstantly = FALSE var/spider_debug = FALSE @@ -147,6 +144,11 @@ GLOBAL_LIST_EMPTY(ts_spiderling_list) . = ..() ADD_TRAIT(src, TRAIT_NEGATES_GRAVITY, INNATE_TRAIT) +/mob/living/simple_animal/hostile/poison/terror_spider/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + heat_damage = 6.5, \ + ) // -------------------------------------------------------------------------------- // --------------------- TERROR SPIDERS: SHARED ATTACK CODE ----------------------- diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index b22decadd4a..b8307362b44 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -28,7 +28,6 @@ taunt_chance = 20 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("hostile", "winter") loot = list(/obj/item/stack/sheet/wood) @@ -36,6 +35,12 @@ deathmessage = "is hacked into pieces!" del_on_death = 1 +/mob/living/simple_animal/hostile/tree/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/tree/AttackingTarget() . = ..() if(. && iscarbon(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/undead.dm b/code/modules/mob/living/simple_animal/hostile/undead.dm index cc421ccc499..30962075b09 100644 --- a/code/modules/mob/living/simple_animal/hostile/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/undead.dm @@ -46,13 +46,17 @@ attack_sound = 'sound/hallucinations/growl1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 pressure_resistance = 300 gold_core_spawnable = NO_SPAWN //too spooky for science faction = list("undead") // did I mention ghost loot = list(/obj/item/reagent_containers/food/snacks/ectoplasm) del_on_death = 1 +/mob/living/simple_animal/hostile/ghost/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/ghost/Initialize(mapload) . = ..() @@ -88,8 +92,6 @@ harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 - minbodytemp = 0 - maxbodytemp = 1500 healable = FALSE //they're skeletons how would bruise packs help them?? attacktext = "бьёт" attack_sound = 'sound/hallucinations/growl1.ogg' @@ -105,6 +107,13 @@ del_on_death = TRUE loot = list(/obj/effect/decal/remains/human) +/mob/living/simple_animal/hostile/skeleton/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 1500, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/skeleton/eskimo name = "undead eskimo" desc = "The reanimated remains of some poor traveler." @@ -146,12 +155,17 @@ attack_sound = 'sound/hallucinations/growl1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 faction = list("undead") loot = list(/obj/effect/decal/cleanable/blood/gibs) del_on_death = 1 +/mob/living/simple_animal/hostile/zombie/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hostile/zombie/whiteship speak = list("RAWR!","Rawr!","GRR!","Growl!") speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm index bb887e5aa48..fb073d63bd6 100644 --- a/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/winter_mobs.dm @@ -15,13 +15,17 @@ icon_dead = "placeholder" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 melee_damage_lower = 3 melee_damage_upper = 7 weather_immunities = list(TRAIT_SNOWSTORM_IMMUNE) AI_delay_max = 0 SECONDS +/mob/living/simple_animal/hostile/winter/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) /mob/living/simple_animal/hostile/winter/snowman name = "snowman" @@ -33,10 +37,15 @@ icon_dead = "snowman-dead" bodytemperature = 73.0 //it's made of snow and hatred, so it's pretty cold. - maxbodytemp = 280.15 //at roughly 7 C, these will start melting (dying) from the warmth. Mind over matter or something. - heat_damage_per_tick = 10 //Now With Rapid Thawing Action! gold_core_spawnable = HOSTILE_SPAWN +/mob/living/simple_animal/hostile/winter/snowman/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + maxbodytemp = 280, \ + minbodytemp = 0, \ + heat_damage = 10, \ + ) /mob/living/simple_animal/hostile/winter/snowman/death(gibbed) if(can_die()) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index 25fdc28c900..3c1f22b2a96 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -27,11 +27,16 @@ universal_speak = 1 universal_understand = 1 attack_sound = list('sound/weapons/punch1.ogg') - minbodytemp = 0 var/hulk_powers = list() var/mob/living/original_body var/health_regen = 6 +/mob/living/simple_animal/hulk/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + ) + /mob/living/simple_animal/hulk/human hulk_powers = list(/obj/effect/proc_holder/spell/hulk_jump, /obj/effect/proc_holder/spell/hulk_dash) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 722b147a76c..3b21bb6afe4 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -17,8 +17,6 @@ melee_damage_lower = 5 melee_damage_upper = 15 attacktext = "опустошает" - minbodytemp = 0 - maxbodytemp = 4000 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) speed = -1 stop_automated_movement = TRUE @@ -33,6 +31,13 @@ deathmessage = "lets out a contented sigh as their form unwinds." var/holy = FALSE +/mob/living/simple_animal/shade/ComponentInitialize() + AddComponent( \ + /datum/component/animal_temperature, \ + minbodytemp = 0, \ + maxbodytemp = 4000, \ + ) + /mob/living/simple_animal/shade/death(gibbed) . = ..() SSticker.mode.remove_cultist(mind, FALSE) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 86de64b8840..49f45d9499b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -41,13 +41,6 @@ /// Was this mob spawned by xenobiology magic? Used for mobcapping. var/xenobiology_spawned = FALSE - //Temperature effect - var/minbodytemp = 250 - var/maxbodytemp = 350 - /// Amount of damage applied if animal's body temperature is higher than maxbodytemp - var/heat_damage_per_tick = 2 - /// Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - var/cold_damage_per_tick = 2 /// If the mob can catch fire var/can_be_on_fire = FALSE /// Damage the mob will take if it is on fire @@ -181,6 +174,8 @@ return ..() +/mob/living/simple_animal/ComponentInitialize() + AddComponent(/datum/component/animal_temperature) ///Extra effects to add when the mob is tamed, such as adding a riding or whatever. /mob/living/simple_animal/proc/tamed(whomst) @@ -318,13 +313,6 @@ var/atmos_suitable = TRUE - var/areatemp = get_temperature(environment) - - if(abs(areatemp - bodytemperature) > 5) - var/diff = areatemp - bodytemperature - diff = diff / 5 - adjust_bodytemperature(diff) - if(!HAS_TRAIT(src, TRAIT_NO_BREATH)) var/tox = environment.toxins var/oxy = environment.oxygen @@ -364,15 +352,7 @@ if(!atmos_suitable) adjustHealth(unsuitable_atmos_damage) - handle_temperature_damage() - - -/mob/living/simple_animal/proc/handle_temperature_damage() - if(bodytemperature < minbodytemp) - adjustHealth(cold_damage_per_tick) - else if(bodytemperature > maxbodytemp) - adjustHealth(heat_damage_per_tick) - + SEND_SIGNAL(src, COMSIG_ANIMAL_HANDLE_ENVIRONMENT, environment) /mob/living/simple_animal/gib() if(icon_gib) diff --git a/paradise.dme b/paradise.dme index 50ee27939b5..76c65943640 100644 --- a/paradise.dme +++ b/paradise.dme @@ -428,6 +428,7 @@ #include "code\datums\components\_component.dm" #include "code\datums\components\after_attacks_hub.dm" #include "code\datums\components\aura_healing.dm" +#include "code\datums\components\animal_temperature.dm" #include "code\datums\components\boomerang.dm" #include "code\datums\components\boss_music.dm" #include "code\datums\components\caltrop.dm"