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"