Adds an universal object health system. (#21266)

https://www.youtube.com/watch?v=ZpUYjpKg9KY

As per title. The goal is to add health to most objects in the game and
thus allow them to be dynamically destructible, while also avoiding
shitcode like each structure having its own snowflake health update
proc.

---------

Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
This commit is contained in:
Matt Atlas
2026-04-16 23:22:08 +00:00
committed by GitHub
co-authored by Matt Atlas SleepyGemmy
parent 1d2871729f
commit d5931c5ffe
213 changed files with 1448 additions and 1424 deletions
+5 -5
View File
@@ -2,7 +2,7 @@
name = "Bot"
accent = ACCENT_TTS
health = 20
maxHealth = 20
maxhealth = 20
icon = 'icons/mob/npc/aibots.dmi'
layer = MOB_LAYER
universal_speak = TRUE
@@ -72,10 +72,10 @@
/mob/living/bot/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
else
health = maxHealth - getFireLoss() - getBruteLoss()
health = maxhealth - getFireLoss() - getBruteLoss()
/mob/living/bot/death()
explode()
@@ -117,9 +117,9 @@
to_chat(user, SPAN_WARNING("You need to unlock the controls first."))
return
else if(attacking_item.tool_behaviour == TOOL_WELDER)
if(health < maxHealth)
if(health < maxhealth)
if(open)
health = min(maxHealth, health + 10)
health = min(maxhealth, health + 10)
user.visible_message(SPAN_NOTICE("\The [user] repairs [src]."), SPAN_NOTICE("You repair [src]."))
else
to_chat(user, SPAN_WARNING("You are unable to repair [src] with the maintenance panel closed."))
+1 -1
View File
@@ -10,7 +10,7 @@
icon = 'icons/mob/npc/aibots.dmi'
icon_state = "farmbot0"
health = 50
maxHealth = 50
maxhealth = 50
req_one_access = list(ACCESS_HYDROPONICS, ACCESS_ROBOTICS, ACCESS_XENOBOTANY)
var/action = "" // Used to update icon
@@ -5,7 +5,7 @@
icon_state = "la_creatura"
pass_flags = PASSTABLE
health = 50
maxHealth = 50
maxhealth = 50
mob_size = 4
var/adult_form
@@ -24,7 +24,7 @@
holder_type = /obj/item/holder/diona
meat_type = /obj/item/reagent_containers/food/snacks/meat/dionanymph
meat_amount = 2
maxHealth = 50
maxhealth = 50
health = 50
max_stamina = -1
pass_flags = PASSTABLE
@@ -238,7 +238,7 @@
DS = new/datum/dionastats()
DS.max_energy = energy_duration * MLS
DS.stored_energy = (DS.max_energy / 2)
DS.max_health = maxHealth
DS.max_health = maxhealth
DS.pain_factor = (50 / dark_consciousness) / MLS
DS.trauma_factor = (DS.max_health / dark_survival) / MLS
DS.dionatype = DIONA_NYMPH
@@ -250,7 +250,7 @@
var/mob/living/carbon/human/H = gestalt
if(!H.bad_internal_organs)
return
if(health < maxHealth)
if(health < maxhealth)
if (!(src in H.bad_internal_organs))
H.bad_internal_organs.Add(src)
else
@@ -387,10 +387,10 @@
/mob/living/carbon/alien/diona/adjustBruteLoss(var/amount)
if (status_flags & GODMODE)
return
health = min(health - amount, maxHealth)
health = min(health - amount, maxhealth)
/mob/living/carbon/alien/diona/getHalLoss()
if(status_flags & GODMODE)
return
return max((maxHealth - health), 0)
return max((maxhealth - health), 0)
+1 -1
View File
@@ -104,7 +104,7 @@
if (healths)
if (stat != DEAD)
switch((health - getHalLoss()) / maxHealth * 100) // Halloss should be factored in here for displaying
switch((health - getHalLoss()) / maxhealth * 100) // Halloss should be factored in here for displaying
if(100 to INFINITY)
healths.icon_state = "health0"
if(80 to 100)
@@ -15,7 +15,7 @@
if(H && show_ssd && !client && !teleop)
if(H.bg)
visible_message(SPAN_DANGER("[src] is hit by [hitting_atom] waking [get_pronoun("him")] up!"))
if(H.health / H.maxHealth < 0.5)
if(H.health / H.maxhealth < 0.5)
H.bg.awaken_impl(TRUE)
sleeping = 0
willfully_sleeping = FALSE
@@ -52,7 +52,7 @@
if(!hitting_projectile.do_not_log)
visible_message(SPAN_DANGER("[hitting_projectile] hit [src] waking [get_pronoun("him")] up!"))
if(H.health / H.maxHealth < 0.5)
if(H.health / H.maxhealth < 0.5)
H.bg.awaken_impl(TRUE)
sleeping = 0
willfully_sleeping = FALSE
@@ -79,7 +79,7 @@
show_ssd = H.species.show_ssd
if(H && show_ssd && !client && !teleop)
if(H.bg)
if(H.health / H.maxHealth < 0.5)
if(H.health / H.maxhealth < 0.5)
H.bg.awaken_impl(TRUE)
sleeping = 0
willfully_sleeping = FALSE
+1 -1
View File
@@ -501,7 +501,7 @@ Lightstates:
if (DS.dionatype == 0)
return health
else
return health+(maxHealth*0.5)
return health+(maxhealth*0.5)
/mob/living/carbon/proc/get_dionastats()
return
@@ -51,7 +51,7 @@
victim.calculate_composition()
var/dam_multiplier = 1
var/victim_maxhealth = victim.maxHealth //We cache this here in case we need to edit it.
var/victim_maxhealth = victim.maxhealth //We cache this here in case we need to edit it.
var/damage_dealt = victim_maxhealth * PEPB * dam_multiplier
@@ -149,7 +149,7 @@ Nymphs have 100 health, so without armor there is a small possibility for each n
var/MLS = (1.5 / 2.1)
DS = new/datum/dionastats()
DS.max_energy = energy_duration * MLS
DS.max_health = maxHealth*2
DS.max_health = maxhealth*2
DS.stored_energy = DS.max_energy
DS.pain_factor = (100 / dark_consciousness) / MLS
DS.trauma_factor = (DS.max_health / dark_survival) / MLS
@@ -329,10 +329,10 @@ Nymphs have 100 health, so without armor there is a small possibility for each n
bestNymph = D
nymphos += D
D.forceMove(T)
if(gestalt_health >= D.maxHealth * 0.20)
if(gestalt_health >= D.maxhealth * 0.20)
D.health = gestalt_health
else
D.health = D.maxHealth * 0.20
D.health = D.maxhealth * 0.20
D.split_languages(src)
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
D.gestalt = null
@@ -99,6 +99,6 @@ Exercise Verbs
stamina_loss += 2
if(on_knees)
stamina_loss -= 2
if(health <= ((maxHealth / 10) * 9))
if(health <= ((maxhealth / 10) * 9))
stamina_loss += 2
return max(stamina_loss, 1)
@@ -1284,8 +1284,8 @@
/mob/living/carbon/human/succumb()
set hidden = TRUE
if(shock_stage > 50 && (maxHealth * 0.6) > get_total_health())
adjustBrainLoss(health + maxHealth * 2) // Deal 2x health in BrainLoss damage, as before but variable.
if(shock_stage > 50 && (maxhealth * 0.6) > get_total_health())
adjustBrainLoss(health + maxhealth * 2) // Deal 2x health in BrainLoss damage, as before but variable.
to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death."))
else
to_chat(src, SPAN_WARNING("You are not injured enough to succumb to death!"))
@@ -1556,8 +1556,8 @@
species.handle_post_spawn(src,kpg) // should be zero by default
maxHealth = species.total_health
health = maxHealth
maxhealth = species.total_health
health = maxhealth
regenerate_icons()
if (vessel)
@@ -2102,7 +2102,7 @@
//Point at which you dun breathe no more. Separate from asystole crit, which is heart-related.
/mob/living/carbon/human/nervous_system_failure()
return getBrainLoss() >= maxHealth * 0.75
return getBrainLoss() >= maxhealth * 0.75
// Check if we should die.
/mob/living/carbon/human/proc/handle_death_check()
@@ -4,11 +4,11 @@
return ..()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
return
health = maxHealth - getBrainLoss()
health = maxhealth - getBrainLoss()
if(stat == DEAD)
var/genetic_damage = getCloneLoss()
@@ -17,15 +17,15 @@
ChangeToSkeleton(FALSE)
else
var/fire_dmg = getFireLoss()
if(fire_dmg > maxHealth * 3)
if(fire_dmg > maxhealth * 3)
ChangeToSkeleton(FALSE)
else if(fire_dmg > maxHealth * 1.5)
else if(fire_dmg > maxhealth * 1.5)
ChangeToHusk()
UpdateDamageIcon() // to fix that darn overlay bug
/mob/living/carbon/human/proc/get_total_health()
var/amount = maxHealth - getFireLoss() - getBruteLoss() - getOxyLoss() - getToxLoss() - getBrainLoss()
var/amount = maxhealth - getFireLoss() - getBruteLoss() - getOxyLoss() - getToxLoss() - getBrainLoss()
return amount
/mob/living/carbon/human/adjustBrainLoss(var/amount)
@@ -164,7 +164,7 @@
breathe_organ = internal_organs_by_name[species.breathing_organ]
if(!breathe_organ)
return maxHealth/2
return maxhealth/2
return breathe_organ.get_oxygen_deprivation()
/mob/living/carbon/human/setOxyLoss(var/amount)
@@ -19,7 +19,7 @@
if(embedded_flag)
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
var/health_deficiency = maxHealth - health
var/health_deficiency = maxhealth - health
if(health_deficiency >= 40)
tally += (health_deficiency / 25)
+3 -3
View File
@@ -877,10 +877,10 @@
return
if(stat != DEAD)
if((stat == UNCONSCIOUS && health < maxHealth / 2) || paralysis || InStasis())
if((stat == UNCONSCIOUS && health < maxhealth / 2) || paralysis || InStasis())
//Critical damage passage overlay
var/severity = 0
switch(health - maxHealth/2)
switch(health - maxhealth/2)
if(-20 to -10) severity = 1
if(-30 to -20) severity = 2
if(-40 to -30) severity = 3
@@ -1267,7 +1267,7 @@
Paralyse(3)
return
if(!can_feel_pain())
if(isSynthetic() &&(get_total_health() < maxHealth * 0.5))
if(isSynthetic() &&(get_total_health() < maxhealth * 0.5))
stuttering = max(stuttering, 5)
return
@@ -511,7 +511,7 @@
if(target.reagents)
target.reagents.add_reagent(/singleton/reagent/toxin/hylemnomil, min(10, ZOMBIE_MAX_HYLEMNOMIL - hylemnomil_amount))
if (target.getBruteLoss() > target.maxHealth * 3)
if (target.getBruteLoss() > target.maxhealth * 3)
if (target.stat != DEAD)
to_chat(src,SPAN_WARNING("You've scraped \the [target] down to the bones already!."))
else
@@ -539,7 +539,7 @@
playsound(loc, 'sound/effects/splat.ogg', 20, 1)
new /obj/effect/decal/cleanable/blood/splatter(get_turf(src), target.get_blood_color())
if (target.getBruteLoss() > target.maxHealth*0.75)
if (target.getBruteLoss() > target.maxhealth*0.75)
if (prob(50))
gibs(get_turf(src), target.dna)
src.visible_message(SPAN_DANGER("\The [src] tears out \the [target]'s insides!"))
@@ -197,7 +197,7 @@ They are very slow, reasonably strong, and quite durable. They also require ligh
H.adjustHalLoss(cost*0.3)
H.updatehealth()
if(H.getHalLoss() > (H.maxHealth*0.6))
if(H.getHalLoss() > (H.maxhealth*0.6))
var/shock = H.get_shock()
if(prob(shock * 2))
to_chat(H, SPAN_DANGER("You feel a sharp pain in your nervous system! You can't run anymore, or you might die!"))
@@ -691,7 +691,7 @@ GLOBAL_LIST_INIT(golem_types, list(
glassify(H)
return
if(H.getFireLoss() >= (H.health - H.maxHealth)) //if the sand golem suffered enough burn damage it turns into a glass one
if(H.getFireLoss() >= (H.health - H.maxhealth)) //if the sand golem suffered enough burn damage it turns into a glass one
glassify(H)
return
@@ -13,7 +13,7 @@
M.mutation_chance = clamp(mutation_chance + rand(-3, 3), 0, 100)
step_away(M, src)
is_adult = FALSE
maxHealth = 150
maxhealth = 150
revive()
if(!client)
rabid = TRUE
+1 -1
View File
@@ -94,7 +94,7 @@
src.blinded = null
health = maxHealth - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
health = maxhealth - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
if(health < 0 && stat != DEAD)
death()
@@ -23,7 +23,7 @@
return "This subject is too far away..."
if(ishuman(M) && !istype(M, /mob/living/carbon/human/monkey) && content) // don't eat humans while content
return "I'm already content..."
if(istype(M, /mob/living/carbon) && M.getCloneLoss() >= M.maxHealth * 2 || istype(M, /mob/living/simple_animal) && M.stat == DEAD)
if(istype(M, /mob/living/carbon) && M.getCloneLoss() >= M.maxhealth * 2 || istype(M, /mob/living/simple_animal) && M.stat == DEAD)
return "This subject does not have any edible life energy..."
if(istype(M, /mob/living/carbon))
var/mob/living/carbon/human/H = M
@@ -123,8 +123,8 @@
if(amount_grown >= 5)
is_adult = TRUE
mob_size = 6 // Adult slimes are bigger
maxHealth = 200
health = maxHealth
maxhealth = 200
health = maxhealth
amount_grown = 0
regenerate_icons()
name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])"
@@ -9,7 +9,7 @@
mob_size = 4
composition_reagent = /singleton/reagent/slimejelly
layer = MOB_LAYER
maxHealth = 150
maxhealth = 150
health = 150
gender = NEUTER
accent = ACCENT_BLUESPACE
@@ -156,7 +156,7 @@
return toxloss
/mob/living/carbon/slime/adjustToxLoss(var/amount)
toxloss = clamp(toxloss + amount, 0, maxHealth)
toxloss = clamp(toxloss + amount, 0, maxhealth)
/mob/living/carbon/slime/setToxLoss(var/amount)
adjustToxLoss(amount-getToxLoss())
@@ -167,7 +167,7 @@
var/tally = 0
var/health_deficiency = (maxHealth - health)
var/health_deficiency = (maxhealth - health)
if(health_deficiency >= 30)
tally += (health_deficiency / 25)
@@ -240,7 +240,7 @@
/mob/living/carbon/slime/get_status_tab_items()
. = ..()
. += "Health: [round((health / maxHealth) * 100)]%"
. += "Health: [round((health / maxhealth) * 100)]%"
. += "Intent: [a_intent]"
if(client.statpanel == "Status")
+9 -9
View File
@@ -223,8 +223,8 @@ default behaviour is:
/mob/living/verb/succumb()
set hidden = 1
if(health < maxHealth / 3)
adjustBrainLoss(health + maxHealth * 2) // Deal 2x health in BrainLoss damage, as before but variable.
if(health < maxhealth / 3)
adjustBrainLoss(health + maxhealth * 2) // Deal 2x health in BrainLoss damage, as before but variable.
to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death."))
else
to_chat(src, SPAN_WARNING("You are not injured enough to succumb to death!"))
@@ -232,10 +232,10 @@ default behaviour is:
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
else
health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss()
health = maxhealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss()
//This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually
//affects them once clothing is factored in. ~Errorage
@@ -280,12 +280,12 @@ default behaviour is:
// I touched them without asking... I'm soooo edgy ~Erro (added nodamage checks)
/mob/living/proc/getBruteLoss()
return maxHealth - health
return maxhealth - health
/mob/living/proc/adjustBruteLoss(var/amount)
if(status_flags & GODMODE)
return
health = clamp(health - amount, 0, maxHealth)
health = clamp(health - amount, 0, maxhealth)
/mob/living/proc/getOxyLoss()
return 0
@@ -345,10 +345,10 @@ default behaviour is:
adjustBruteLoss((amount * 0.5)-getBruteLoss())
/mob/living/proc/getMaxHealth()
return maxHealth
return maxhealth
/mob/living/proc/setMaxHealth(var/newMaxHealth)
maxHealth = newMaxHealth
maxhealth = newMaxHealth
// ++++ROCKDTBEN++++ MOB PROCS //END
@@ -704,7 +704,7 @@ default behaviour is:
/mob/living/proc/escape_inventory(obj/item/holder/H)
if(H != src.loc)
return
if(health < maxHealth * 0.6)
if(health < maxhealth * 0.6)
to_chat(src, SPAN_WARNING("You're too injured to escape..."))
return
+2 -6
View File
@@ -1,12 +1,8 @@
/mob/living
health = 100
maxhealth = 100
see_invisible = SEE_INVISIBLE_LIVING
//Health and life related vars
/// Maximum health that should be possible.
var/maxHealth = 100
/// A mob's current health
var/health = 100
var/hud_updateflag = 0
// Virtual Reality
+3 -3
View File
@@ -283,7 +283,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/mob/living/silicon/ai/adjustOxyLoss(var/amount)
if(status_flags & GODMODE)
return
oxyloss = max(0, oxyloss + min(amount, maxHealth - oxyloss))
oxyloss = max(0, oxyloss + min(amount, maxhealth - oxyloss))
/mob/living/silicon/ai/setFireLoss(var/amount)
if(status_flags & GODMODE)
@@ -299,11 +299,11 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
setOxyLoss(0)
else
health = maxHealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine.
health = maxhealth - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine.
/mob/living/silicon/ai/proc/setup_icon()
var/datum/custom_synth/sprite = null
+2 -2
View File
@@ -102,11 +102,11 @@
// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss).
/mob/living/silicon/ai/proc/backup_capacitor()
return ((getOxyLoss() - maxHealth) / maxHealth) * -100
return ((getOxyLoss() - maxhealth) / maxhealth) * -100
// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss))
/mob/living/silicon/ai/proc/hardware_integrity()
return (health / maxHealth) * 100
return (health / maxhealth) * 100
// Shows AI Malfunction related information to the AI.
/mob/living/silicon/ai/show_malf_ai()
@@ -13,7 +13,7 @@
/mob/living/silicon/decoy/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
else
health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
health = maxhealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
+2 -2
View File
@@ -33,7 +33,7 @@
/mob/living/silicon/pai/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
else
health = maxHealth - getBruteLoss() - getFireLoss()
health = maxhealth - getBruteLoss() - getFireLoss()
@@ -35,7 +35,7 @@
gender = NEUTER
// Health
maxHealth = 35
maxhealth = 35
health = 35
// Components
@@ -227,7 +227,7 @@
module_type = /obj/item/robot_module/drone/construction/matriarch
law_type = /datum/ai_laws/matriarch_drone
can_swipe = FALSE
maxHealth = 50
maxhealth = 50
health = 50
var/matrix_tag
@@ -356,7 +356,7 @@
to_chat(user, SPAN_WARNING("\The [src] doesn't have an ID swipe interface."))
return
if(stat == DEAD)
if(!GLOB.config.allow_drone_spawn || emagged || health < -maxHealth) //It's dead, Dave.
if(!GLOB.config.allow_drone_spawn || emagged || health < -maxhealth) //It's dead, Dave.
to_chat(user, SPAN_WARNING("The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one."))
return
if(!allowed(usr))
@@ -454,17 +454,17 @@
//For some goddamn reason robots have this hardcoded. Redefining it for our fragile friends here.
/mob/living/silicon/robot/drone/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
return
health = maxHealth - (getBruteLoss() + getFireLoss())
health = maxhealth - (getBruteLoss() + getFireLoss())
return
//Easiest to check this here, then check again in the robot proc.
//Standard robots use config for crit, which is somewhat excessive for these guys.
//Drones killed by damage will gib.
/mob/living/silicon/robot/drone/handle_regular_status_updates()
if(health <= -maxHealth && src.stat != DEAD)
if(health <= -maxhealth && src.stat != DEAD)
gib()
return
..()
@@ -80,7 +80,7 @@ GLOBAL_LIST_EMPTY(drone_matrices)
if(MTX_UPG_CELL)
D.cell.maxcharge = D.cell.maxcharge * 1.5
if(MTX_UPG_HEALTH)
D.maxHealth += 15
D.maxhealth += 15
LAZYADD(D.matrix_upgrades, upgrade_type)
/proc/assign_drone_to_matrix(mob/living/silicon/robot/drone/D, var/matrix_tag)
@@ -25,7 +25,7 @@
var/wires_exposed = FALSE
// Health and interaction
maxHealth = 200
maxhealth = 200
health = 200
mob_size = 16 //robots are heavy
mob_bump_flag = ROBOT
@@ -1221,7 +1221,7 @@
/mob/living/silicon/robot/succumb()
set hidden = TRUE
if(health < maxHealth / 3)
if(health < maxhealth / 3)
death()
to_chat(src, SPAN_NOTICE("You have given up life and succumbed to death."))
else
@@ -1,9 +1,9 @@
/mob/living/silicon/robot/updatehealth()
if(status_flags & GODMODE)
health = maxHealth
health = maxhealth
set_stat(CONSCIOUS)
return
health = maxHealth - (getBruteLoss() + getFireLoss())
health = maxhealth - (getBruteLoss() + getFireLoss())
return
/mob/living/silicon/robot/getBruteLoss()
+1 -1
View File
@@ -9,7 +9,7 @@
. = TRUE
message = Gibberish(message, C.max_damage / C.get_damage())
else
var/damaged = 100 - (clamp(health, 0, maxHealth) / maxHealth) * 100
var/damaged = 100 - (clamp(health, 0, maxhealth) / maxhealth) * 100
if(damaged > 40)
. = TRUE
message = Gibberish(message, damaged - 10)
+1 -1
View File
@@ -187,7 +187,7 @@
. += ""
if(!stat)
. += "System Integrity: [round((health/maxHealth)*100)]%"
. += "System Integrity: [round((health/maxhealth)*100)]%"
else
. += "System Integrity: NON-FUNCTIONAL"
show_malf_ai()
@@ -7,7 +7,7 @@
icon_dead = "bees1"
mob_size = 0.5
unsuitable_atoms_damage = 2.5
maxHealth = 20
maxhealth = 20
density = 0
var/strength = 1
var/feral = 0
@@ -51,7 +51,7 @@
qdel(src)
return
else
health = maxHealth
health = maxhealth
if (prob(25))//probability to reduce spam
src.visible_message(SPAN_WARNING("The bee swarm starts to thin out a little."))
@@ -283,7 +283,7 @@
update_icon()
/mob/living/simple_animal/bee/beegun
maxHealth = 30
maxhealth = 30
strength = 5
feral = 30
@@ -16,10 +16,10 @@
a_intent = I_HURT
stop_automated_movement = 1
status_flags = CANPUSH
attacktext = "nipped"
attacktext = "nips"
friendly = "prods"
wander = 0
maxHealth = 40
maxhealth = 40
health = 40
pass_flags = PASSTABLE
universal_understand = TRUE
@@ -5,13 +5,13 @@
icon = 'icons/mob/mob.dmi'
icon_state = "artificer"
icon_living = "artificer"
maxHealth = 250 // Was undertuned prior to our damage numbers
maxhealth = 250 // Was undertuned prior to our damage numbers
health_prefix = "artificer"
response_harm = "viciously beaten"
melee_damage_lower = 10
melee_damage_upper = 10
armor_penetration = 20
attacktext = "rammed"
attacktext = "rams"
organ_names = list("core", "production array", "sensor array")
speed = 0
environment_smash = TRUE
@@ -98,7 +98,7 @@
adjustFireLoss(-5)
user.visible_message(SPAN_NOTICE("\The [user] mends some of \the [src]'s wounds."))
else
if (health < maxHealth)
if (health < maxhealth)
to_chat(user, SPAN_NOTICE("Healing \the [src] any further is beyond your abilities."))
else
to_chat(user, SPAN_NOTICE("\The [src] is undamaged."))
@@ -107,8 +107,8 @@
/mob/living/simple_animal/construct/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
if(health < maxHealth)
if(health >= maxHealth / 2)
if(health < maxhealth)
if(health >= maxhealth / 2)
. += SPAN_WARNING("It looks slightly dented.")
else
. += SPAN_WARNING("It looks severely dented!")
@@ -149,7 +149,7 @@
silence_spells(purge)
if(healths)
var/health_percent = (health / maxHealth) * 100
var/health_percent = (health / maxhealth) * 100
var/newstate = 0
switch(health_percent)
if(84 to INFINITY)
@@ -5,12 +5,12 @@
icon = 'icons/mob/mob.dmi'
icon_state = "harvester"
icon_living = "harvester"
maxHealth = 300
maxhealth = 300
health_prefix = "harvester"
melee_damage_lower = 25
melee_damage_upper = 25
armor_penetration = 60
attacktext = "violently stabbed"
attacktext = "violently stabs"
organ_names = list("core", "harvesting array")
speed = -1
environment_smash = 1
@@ -5,14 +5,14 @@
icon = 'icons/mob/mob.dmi'
icon_state = "behemoth"
icon_living = "behemoth"
maxHealth = 350 // Slow, melee only and can't sprint. So needs to be a beefcake.
maxhealth = 350 // Slow, melee only and can't sprint. So needs to be a beefcake.
health_prefix = "juggernaut"
response_harm = "harmlessly punches"
harm_intent_damage = 0
melee_damage_lower = 30
melee_damage_upper = 30
armor_penetration = 40
attacktext = "smashed their armored gauntlet into"
attacktext = "smashes their armored gauntlet into"
organ_names = list("core", "right arm", "left arm")
mob_size = MOB_LARGE
speed = 3
@@ -5,11 +5,11 @@
icon = 'icons/mob/mob.dmi'
icon_state = "floating"
icon_living = "floating"
maxHealth = 250
maxhealth = 250
health_prefix = "wraith"
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashed"
attacktext = "slashes"
organ_names = list("core", "right arm", "left arm")
speed = -1
environment_smash = TRUE
@@ -170,7 +170,7 @@
T.forceMove(src) //put shade in stone
T.status_flags |= GODMODE
T.canmove = 0
T.health = T.maxHealth
T.health = T.maxhealth
src.icon_state = "soulstone2"
to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form")
@@ -16,7 +16,7 @@
canbrush = TRUE
faction = "Adhomai"
gender = FEMALE
maxHealth = 50
maxhealth = 50
health = 50
mob_size = 5
var/eggsleft = 0
@@ -63,7 +63,7 @@
icon_state = "tunneler_baby"
icon_living = "tunneler_baby"
icon_dead = "tunneler_baby_dead"
maxHealth = 10
maxhealth = 10
health = 10
mob_size = 2
meat_amount = 1
@@ -85,9 +85,9 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
health = 200
maxHealth = 200
maxhealth = 200
mob_size = 15
canbrush = TRUE
@@ -124,13 +124,13 @@
meat_type = /obj/item/reagent_containers/food/snacks/meat/adhomai
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
maxHealth = 150
maxhealth = 150
health = 150
melee_damage_lower = 15
melee_damage_upper = 15
armor_penetration = 20
attacktext = "gored"
attacktext = "gores"
attack_sound = 'sound/weapons/bite.ogg'
hostile_nameable = TRUE
@@ -151,7 +151,7 @@
icon_living = "rafama_baby"
icon_dead = "rafama_baby_dead"
gender = MALE
maxHealth = 30
maxhealth = 30
health = 30
mob_size = 5
melee_damage_lower = 5
@@ -169,7 +169,7 @@
meat_amount = 1
organ_names = list("thorax", "legs", "head")
faction = "Adhomai"
maxHealth = 20
maxhealth = 20
health = 20
mob_size = 3
@@ -192,7 +192,7 @@
organ_names = list("shell", "tentacles")
faction = "Adhomai"
maxHealth = 50
maxhealth = 50
health = 50
mob_size = 3
pixel_x = -8
@@ -272,13 +272,13 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
meat_type = /obj/item/reagent_containers/food/snacks/meat/adhomai
faction = "Adhomai"
maxHealth = 100
maxhealth = 100
health = 100
mob_size = 12
pixel_x = -8
@@ -318,7 +318,7 @@
meat_type = /obj/item/reagent_containers/food/snacks/meat/adhomai
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
maxHealth = 150
maxhealth = 150
health = 150
butchering_products = list(/obj/item/stack/material/animalhide = 10)
@@ -343,9 +343,9 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
health = 450
maxHealth = 452
maxhealth = 452
mob_size = 30
pixel_x = -32
@@ -5,7 +5,7 @@
icon_state = "cosmozoan"
icon_living = "cosmozoan"
icon_dead = "cosmozoan_dead"
maxHealth = 15
maxhealth = 15
health = 15
meat_type = /obj/item/reagent_containers/food/snacks/fish/cosmozoan
meat_amount = 2
@@ -20,8 +20,8 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
faction = "goat"
attacktext = "kicked"
maxHealth = 40
attacktext = "kicks"
maxhealth = 40
melee_damage_lower = 1
melee_damage_upper = 5
udder = null
@@ -94,7 +94,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
health = 250
mob_size = 20//based on mass of holstein fresian dairy cattle, what the sprite is based on
emote_sounds = list('sound/effects/creatures/cow.ogg')
@@ -140,7 +140,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
health = 120
emote_sounds = list('sound/effects/creatures/pigsnort.ogg')
butchering_products = list(/obj/item/stack/material/animalhide/barehide = 6)
@@ -166,8 +166,8 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
maxHealth = 1
attacktext = "kicks"
maxhealth = 1
var/amount_grown = 0
pass_flags = PASSTABLE | PASSGRILLE
holder_type = /obj/item/holder/chick
@@ -214,8 +214,8 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
maxHealth = 10
attacktext = "kicks"
maxhealth = 10
var/eggsleft = 0
var/body_color
pass_flags = PASSTABLE
@@ -302,7 +302,7 @@
response_help = "pets"
response_disarm = "bops"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
mob_size = 2
/mob/living/simple_animal/penguin/baby
@@ -17,9 +17,9 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
health = 250
maxHealth = 250
maxhealth = 250
canbrush = TRUE
brush = /obj/item/reagent_containers/glass/rag
@@ -6,7 +6,7 @@
icon_dead = "lizard_dead"
speak_emote = list("hisses")
health = 5
maxHealth = 5
maxhealth = 5
attacktext = "bitten"
melee_damage_lower = 1
melee_damage_upper = 2
@@ -15,10 +15,10 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
faction = "Moghes"
maxHealth = 100
maxhealth = 100
health = 100
mob_size = 12
pixel_x = -15
@@ -61,10 +61,10 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "gored"
attacktext = "gores"
faction = "Moghes"
maxHealth = 200
maxhealth = 200
health = 200
mob_size = 16
pixel_x = -14
@@ -109,7 +109,7 @@
icon_state = "otzek"
icon_living = "otzek"
icon_dead = "otzek-dead"
maxHealth = 80
maxhealth = 80
health = 80
mob_size = 10
speak_emote = list("chuffs", "hisses", "bellows")
@@ -123,7 +123,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "kicks"
attacktext = "kicked"
attacktext = "kicks"
canbrush = TRUE
brush = /obj/item/reagent_containers/glass/rag
speed = -1
@@ -141,7 +141,7 @@
icon_living = "miervesh-1"
icon_dead = "miervesh-1-dead"
speed = -2
maxHealth = 30
maxhealth = 30
health = 30
speak_emote = list("chirps", "hisses", "croons")
emote_hear = list("chirps", "hisses", "croons")
@@ -154,7 +154,7 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "swats"
attacktext = "swatted"
attacktext = "swats"
flying = TRUE
butchering_products = list(/obj/item/stack/material/animalhide = 1)
meat_type = /obj/item/reagent_containers/food/snacks/meat/moghes
@@ -9,7 +9,7 @@
mob_size = MOB_TINY
speak_chance = 0
turns_per_move = 1
maxHealth = 5
maxhealth = 5
health = 5
meat_type = /obj/item/reagent_containers/food/snacks/hugemushroomslice
organ_names = list("cap", "chest", "left leg", "right leg")
@@ -26,7 +26,7 @@
pass_flags = PASSTABLE
speak_chance = 3
turns_per_move = 5
maxHealth = 5
maxhealth = 5
health = 5
meat_type = /obj/item/reagent_containers/food/snacks/meat/rat
organ_names = list("head", "chest", "right fore leg", "left fore leg", "right rear leg", "left rear leg")
@@ -12,7 +12,7 @@
to_chat(R, message)
/mob/living/simple_animal/rat/king
attacktext = "bitten"
attacktext = "bites"
a_intent = "harm"
icon_state = "rat_gray"
@@ -74,10 +74,10 @@
swarm_name = "creation"
announce_name = "commandment"
desc = "A titanic swarm of rats."
attacktext = "swarmed"
attacktext = "swarm"
melee_damage_lower = 15
melee_damage_upper = 20
maxHealth = 260
maxhealth = 260
health = 260
mob_size = 10
universal_speak = 1
@@ -86,10 +86,10 @@
swarm_name = "flock"
announce_name = "pronouncement"
desc = "A massive swarm of rats."
attacktext = "swarmed"
attacktext = "swarm"
melee_damage_lower = 10
melee_damage_upper = 10
maxHealth = 160
maxhealth = 160
health = 160
mob_size = 9
else if(rats.len >= RAT_EMPEROR_LEVEL)
@@ -97,10 +97,10 @@
swarm_name = "empire"
announce_name = "command"
desc = "A large swarm of rats."
attacktext = "swarmed"
attacktext = "swarm"
melee_damage_lower = 7
melee_damage_upper = 5
maxHealth = 110
maxhealth = 110
health = 110
mob_size = 8
else if(rats.len >= RAT_KING_LEVEL)
@@ -108,10 +108,10 @@
swarm_name = "kingdom"
announce_name = "decree"
desc = "A big swarm of rats."
attacktext = "swarmed"
attacktext = "swarm"
melee_damage_lower = 5
melee_damage_upper = 5
maxHealth = 60
maxhealth = 60
health = 60
mob_size = 7
else if(rats.len >= RAT_DUKE_LEVEL)
@@ -119,8 +119,8 @@
swarm_name = "duchy"
announce_name = "decree"
desc = "A swarm of rats."
attacktext = "bitten"
maxHealth = 35
attacktext = "bites"
maxhealth = 35
health = 35
mob_size = 6
else if(rats.len >= RAT_BARON_LEVEL)
@@ -128,8 +128,8 @@
swarm_name = "barony"
announce_name = "decree"
desc = "A group of rats."
attacktext = "bitten"
maxHealth = 25
attacktext = "bites"
maxhealth = 25
health = 25
mob_size = 4
else if(rats.len >= RAT_MAYOR_LEVEL)
@@ -137,8 +137,8 @@
swarm_name = "hamlet"
announce_name = "decree"
desc = "A couple of rats."
attacktext = "bitten"
maxHealth = 15
attacktext = "bites"
maxhealth = 15
health = 15
mob_size = 3
else
@@ -146,8 +146,8 @@
swarm_name = "peasentry"
announce_name = "request"
desc = "A single rat. This one seems special."
attacktext = "scratched"
maxHealth = 10
attacktext = "scratches"
maxhealth = 10
health = 10
mob_size = 2
@@ -23,7 +23,7 @@
hunger_enabled = TRUE
canbrush = TRUE
maxHealth = 30
maxhealth = 30
health = 30
can_be_milked = TRUE
@@ -146,7 +146,7 @@
current_size = BABY_SCHLORRGO
max_nutrition = 100
nutrition_threshold = 80
maxHealth = 30
maxhealth = 30
health = 30
mob_size = MOB_TINY
meat_amount = 1
@@ -163,7 +163,7 @@
current_size = NORMAL_SCHLORRGO
max_nutrition = 200
nutrition_threshold = 150
maxHealth = 50
maxhealth = 50
health = 50
mob_size = MOB_SMALL
meat_amount = 3
@@ -180,7 +180,7 @@
current_size = FAT_SCHLORRGO
max_nutrition = 400
nutrition_threshold = 300
maxHealth = 100
maxhealth = 100
health = 100
mob_size = MOB_MEDIUM
meat_amount = 6
@@ -198,7 +198,7 @@
current_size = WIDE_SCHLORRGO
max_nutrition = 1000
nutrition_threshold = 800
maxHealth = 250
maxhealth = 250
health = 250
mob_size = MOB_LARGE
meat_amount = 12
@@ -209,7 +209,7 @@
response_help = "rubs [name]'s belly"
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "crushed"
attacktext = "crushes"
environment_smash = 1
resistance = 2
mob_swap_flags = HUMAN|ROBOT
@@ -225,7 +225,7 @@
desc = "A fat creature native to the world of Hro'zamal. This one has been immobilized by its massive weight."
current_size = COLOSSAL_SCHLORRGO
max_nutrition = 1500
maxHealth = 450
maxhealth = 450
health = 450
mob_size = MOB_LARGE
meat_amount = 25
@@ -290,7 +290,7 @@
hunger_enabled = FALSE
maxHealth = 80
maxhealth = 80
health = 80
can_be_milked = FALSE
@@ -338,12 +338,12 @@
faction = "PRA" // Evil PRA Machine
maxHealth = 80
maxhealth = 80
health = 80
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "sawed"
attacktext = "saws"
attack_sound = 'sound/weapons/saw/circsawhit.ogg'
mob_size = MOB_SMALL
@@ -7,7 +7,7 @@
icon_dead = "grey baby slime dead"
speak_emote = list("chirps")
health = 100
maxHealth = 100
maxhealth = 100
accent = ACCENT_BLUESPACE
response_help = "pets"
response_disarm = "shoos"
@@ -32,7 +32,7 @@
desc = "A lovable, domesticated slime."
icon = 'icons/mob/npc/slimes.dmi'
health = 200
maxHealth = 200
maxhealth = 200
icon_state = "grey adult slime"
icon_living = "grey adult slime"
icon_dead = "grey baby slime dead"
@@ -8,7 +8,7 @@
speak_emote = list("hisses")
emote_see = list("flicks out its tongue", "looks around")
health = 15
maxHealth = 15
maxhealth = 15
organ_names = list("head", "body")
response_help = "pets"
response_disarm = "boops"
@@ -29,10 +29,10 @@
wander = 0
density = 0
health = 25
maxHealth = 25
maxhealth = 25
hunger_enabled = 0
attacktext = "shocked"
attacktext = "shocks"
melee_damage_lower = 1
melee_damage_upper = 3
@@ -122,10 +122,10 @@
if (attacking_item.tool_behaviour == TOOL_WELDER)
var/obj/item/weldingtool/WT = attacking_item
if (WT.use(0))
if(health < maxHealth)
if(health < maxhealth)
health += pick(1,1,1,2,2,3)
if(health > maxHealth)
health = maxHealth
if(health > maxhealth)
health = maxhealth
add_fingerprint(user)
src.visible_message(SPAN_NOTICE("\The [user] has spot-welded some of the damage to \the [src]!"))
else
@@ -6,7 +6,7 @@
icon_dead = "tomato_dead"
speak_chance = 0
turns_per_move = 5
maxHealth = 15
maxhealth = 15
health = 15
meat_type = /obj/item/reagent_containers/food/snacks/tomatomeat
organ_names = list("head")
@@ -16,5 +16,5 @@
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
attacktext = "mauled"
attacktext = "mauls"
mob_size = 2
@@ -12,7 +12,7 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = -2
maxHealth = 80
maxhealth = 80
health = 80
mob_size = 10
@@ -20,7 +20,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
environment_smash = 1
@@ -49,14 +49,14 @@
response_harm = "hits the"
speed = -1
maxHealth = 75
maxhealth = 75
health = 75
mob_size = 5
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
faction = "Adhomai"
@@ -76,7 +76,7 @@
meat_amount = 5
organ_names = list("body", "tentacles")
faction = "Adhomai"
maxHealth = 100
maxhealth = 100
health = 100
speak_emote = list("gurgles")
@@ -93,7 +93,7 @@
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
mob_push_flags = ALLMOBS
attacktext = "strangled"
attacktext = "strangles"
attack_sound = 'sound/effects/noosed.ogg'
speed = 1
@@ -119,12 +119,12 @@
emote_hear = list("hums")
emote_see = list("hums ominously", "crackles with energy", "floats around")
maxHealth = 50
maxhealth = 50
health = 50
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "shocked"
attacktext = "shocks"
attack_sound = 'sound/magic/LightningShock.ogg'
speed = 1
@@ -8,11 +8,11 @@
icon_dead = "samak_dead"
icon = 'icons/jungle.dmi'
speed = 2
maxHealth = 125
maxhealth = 125
health = 125
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "mauled"
attacktext = "mauls"
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Hruuugh!","Hrunnph")
@@ -29,11 +29,11 @@
icon_dead = "diyaab_dead"
icon = 'icons/jungle.dmi'
speed = 1
maxHealth = 25
maxhealth = 25
health = 25
melee_damage_lower = 1
melee_damage_upper = 8
attacktext = "gouged"
attacktext = "gouges"
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Awrr?","Aowrl!","Worrl")
@@ -54,11 +54,11 @@
icon_dead = "shantak_dead"
icon = 'icons/jungle.dmi'
speed = 1
maxHealth = 75
maxhealth = 75
health = 75
melee_damage_lower = 3
melee_damage_upper = 12
attacktext = "gouged"
attacktext = "gouges"
cold_damage_per_tick = 0
speak_chance = 5
speak = list("Shuhn","Shrunnph?","Shunpf")
@@ -15,7 +15,7 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = 4
maxHealth = 20
maxhealth = 20
health = 20
mob_size = 2.5
@@ -22,7 +22,7 @@
response_disarm = "gently pushes aside"
response_harm = "hits"
stop_automated_movement_when_pulled = 0
maxHealth = 80
maxhealth = 80
melee_damage_lower = 10
melee_damage_upper = 18
armor_penetration = 30 //Standard armor probably doesn't help against a bear, does it?
@@ -354,18 +354,18 @@
var/healthpercent
if (bearmode == BEARMODE_SPACE)
custom_emote(VISIBLE_MESSAGE, "looks bright, energised and aggressive!" )
healthpercent = health / maxHealth
maxHealth = initial(maxHealth) * 1.5
health = maxHealth * healthpercent
healthpercent = health / maxhealth
maxhealth = initial(maxhealth) * 1.5
health = maxhealth * healthpercent
melee_damage_lower = initial(melee_damage_lower)*1.2
melee_damage_upper = initial(melee_damage_upper)*1.2
turns_per_move -= 2
growl_loud()
else
custom_emote(VISIBLE_MESSAGE, "looks darker and more subdued." )
healthpercent = health / maxHealth
maxHealth = initial(maxHealth)
health = maxHealth * healthpercent
healthpercent = health / maxhealth
maxhealth = initial(maxhealth)
health = maxhealth * healthpercent
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
growl_soft()
@@ -408,7 +408,7 @@
/mob/living/simple_animal/hostile/bear/spatial
name = "bluespace bear"
desc = "*bzzt*..Rawr!!"
maxHealth = 130
maxhealth = 130
turns_per_move = 7
break_stuff_probability = 100//Constantly smashing everything nearby
speak_chance = 15
@@ -21,7 +21,7 @@
response_disarm = "shoves"
response_harm = "harmlessly punches"
blood_amount = 600
maxHealth = 500
maxhealth = 500
health = 500
harm_intent_damage = 0
melee_damage_lower = 40
@@ -30,7 +30,7 @@
resist_mod = 15
mob_size = 25
environment_smash = 2
attacktext = "mangled"
attacktext = "mangles"
attack_sound = 'sound/weapons/bloodyslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
@@ -104,7 +104,7 @@
icon_state = "cybergeist"
icon_living = "cybergeist"
icon_dead = "cybergeist_dead"
maxHealth = 700
maxhealth = 700
health = 700
speed = -2
@@ -21,7 +21,7 @@
response_disarm = "shoves"
response_harm = "harmlessly punches"
blood_amount = 1000
maxHealth = 1250
maxhealth = 1250
health = 1250
harm_intent_damage = 0
melee_damage_lower = 30
@@ -33,7 +33,7 @@
resist_mod = 15
mob_size = 25
environment_smash = 2
attacktext = "mangled"
attacktext = "mangles"
attack_sound = 'sound/weapons/bloodyslice.ogg'
emote_sounds = list('sound/effects/creatures/bear_loud_1.ogg', 'sound/effects/creatures/bear_loud_2.ogg', 'sound/effects/creatures/bear_loud_3.ogg', 'sound/effects/creatures/bear_loud_4.ogg')
@@ -157,13 +157,13 @@
response_help = "pets"
response_disarm = "shoves"
response_harm = "harmlessly punches"
maxHealth = 50
maxhealth = 50
health = 50
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 10
mob_size = 15
attacktext = "mangled"
attacktext = "mangles"
attack_sound = 'sound/weapons/bloodyslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
@@ -8,12 +8,12 @@
icon_gib = "brownbear_gib"
health = 100
maxHealth = 100
maxhealth = 100
density = TRUE
belongs_to_station = FALSE
attacktext = "swatted"
attacktext = "swats"
melee_damage_lower = 25
melee_damage_upper = 25
resist_mod = 5
@@ -9,7 +9,7 @@
icon_dead = "german_dead"
health = 75
maxHealth = 75
maxhealth = 75
stop_automated_movement_when_pulled = 1 //so people can drag the dog around
density = 1
@@ -23,7 +23,7 @@
sad_emote = list("whines")
emote_sounds = list('sound/effects/creatures/dog_bark.ogg', 'sound/effects/creatures/dog_bark2.ogg', 'sound/effects/creatures/dog_bark3.ogg')
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/effects/creatures/dog_bark.ogg'
harm_intent_damage = 5
melee_damage_lower = 15
@@ -83,7 +83,7 @@
gender = MALE
health = 125
maxHealth = 125
maxhealth = 125
icon_state = "columbo"
icon_living = "columbo"
@@ -98,7 +98,7 @@
icon_dead = "pug_dead"
health = 25
maxHealth = 25
maxhealth = 25
density = 0
@@ -146,7 +146,7 @@
resist_mod = 4
health = 100
maxHealth = 100
maxhealth = 100
meat_amount = 3
@@ -12,7 +12,7 @@
blood_overlay_icon = null
health = 70
maxHealth = 70
maxhealth = 70
belongs_to_station = TRUE
stop_automated_movement_when_pulled = TRUE
@@ -35,7 +35,7 @@
projectilesound = 'sound/weapons/taser2.ogg'
projectiletype = /obj/projectile/beam/hivebot/harmless
attacktext = "harmlessly clawed"
attacktext = "harmlessly claws"
harm_intent_damage = 5 // the damage we take
melee_damage_lower = 0
melee_damage_upper = 0
@@ -6,11 +6,11 @@
icon_living = "otherthing"
icon_dead = "otherthing-dead"
health = 80
maxHealth = 80
maxhealth = 80
melee_damage_lower = 20
melee_damage_upper = 30
organ_names = list("meaty core")
attacktext = "chomped"
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = "creature"
speed = 4
@@ -12,7 +12,7 @@
response_disarm = "shoves"
response_harm = "hits"
speed = 4
maxHealth = 80
maxhealth = 80
health = 80
environment_smash = 2
@@ -20,7 +20,7 @@
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "gripped"
attacktext = "grips"
attack_sound = 'sound/hallucinations/growl1.ogg'
min_oxy = 0
@@ -28,7 +28,7 @@
blood_type = "#51C404"
blood_amount = 150
stop_automated_movement_when_pulled = 0
maxHealth = 200
maxhealth = 200
health = 200
melee_damage_lower = 15
melee_damage_upper = 20
@@ -45,7 +45,7 @@
mob_size = 6
smart_melee = FALSE
attacktext = "bitten"
attacktext = "bites"
attack_emote = "skitters toward"
attack_sound = 'sound/weapons/bite.ogg'
emote_sounds = list('sound/effects/creatures/spider_critter.ogg')
@@ -59,7 +59,7 @@
icon_living = "greimorian_worker"
icon_dead = "greimorian_worker_dead"
blood_amount = 50
maxHealth = 40
maxhealth = 40
health = 40
melee_damage_lower = 5
melee_damage_upper = 10
@@ -77,7 +77,7 @@
icon_living = "greimorian_servant"
icon_dead = "greimorian_servant_dead"
blood_amount = 150
maxHealth = 200
maxhealth = 200
health = 200
melee_damage_lower = 15
melee_damage_upper = 20
@@ -102,7 +102,7 @@
icon_living = "greimorian_hunter"
icon_dead = "greimorian_hunter_dead"
blood_amount = 90
maxHealth = 120
maxhealth = 120
health = 120
melee_damage_lower = 10
melee_damage_upper = 20
@@ -118,7 +118,7 @@
icon_state = "greimorian_jackal"
icon_living = "greimorian_jackal"
icon_dead = "greimorian_jackal_dead"
maxHealth = 100
maxhealth = 100
health = 100
melee_damage_lower = 5
melee_damage_upper = 10
@@ -135,7 +135,7 @@
icon_state = "greimorian_bombardier"
icon_living = "greimorian_bombardier"
icon_dead = "greimorian_bombardier_dead"
maxHealth = 60
maxhealth = 60
health = 60
melee_damage_lower = 5
melee_damage_upper = 10
@@ -6,13 +6,13 @@
blood_type = COLOR_OIL
blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi'
health = 15
maxHealth = 15
maxhealth = 15
melee_damage_lower = 10
melee_damage_upper = 10
armor_penetration = 40
attack_flags = DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE
break_stuff_probability = 25
attacktext = "slashed"
attacktext = "slashes"
attack_sound = SFX_HIVEBOT_MELEE
projectilesound = 'sound/weapons/gunshot/gunshot_suppressed.ogg'
projectiletype = /obj/projectile/bullet/pistol/hivebotspike
@@ -159,7 +159,7 @@
*/
/mob/living/simple_animal/hostile/hivebot/guardian
health = 80
maxHealth = 45
maxhealth = 45
melee_damage_lower = 20
melee_damage_upper = 20
wander = 0
@@ -180,10 +180,10 @@
/mob/living/simple_animal/hostile/hivebot/bomber
desc = "A primitive in design, hovering robot, with some menacing looking blades jutting out from it. It bears no manufacturer markings of any kind. This one appears round in design and moves slower than its brethren."
health = 100
maxHealth = 100
maxhealth = 100
icon_state = "hivebotbomber"
organ_names = list("head", "core", "bottom thruster")
attacktext = "bumped"
attacktext = "bumps"
speed = 8
var/has_exploded = FALSE
@@ -231,11 +231,11 @@
desc = "A primitive-yet-sturdy hovering robot, with some menacing looking blades jutting out from it. This one seems unusually aware of its surroundings."
icon_state = "hivebotdestroyer"
health = 350
maxHealth = 350
maxhealth = 350
melee_damage_lower = 20
melee_damage_upper = 30
armor_penetration = 20
attacktext = "eviscerated"
attacktext = "eviscerates"
projectiletype = null
var/playable = TRUE
speed = -2
@@ -258,11 +258,11 @@
desc = "A primitive-yet-sturdy hovering robot, with some menacing looking blades jutting out from it. This one seems to be carefully surveying all activity."
icon_state = "hivebotmarksman"
health = 250
maxHealth = 250
maxhealth = 250
melee_damage_lower = 10
melee_damage_upper = 20
armor_penetration = 20
attacktext = "stabbed"
attacktext = "stabs"
ranged = 1
projectiletype = /obj/projectile/bullet/pistol/medium
speed = -3
@@ -285,11 +285,11 @@
desc = "A primitive-yet-sturdy hovering robot, with some menacing looking blades jutting out from it. This one seems to be buzzing with unseen activity from within."
icon_state = "hivebotoverseer"
health = 300
maxHealth = 300
maxhealth = 300
melee_damage_lower = 10
melee_damage_upper = 10
armor_penetration = 10
attacktext = "slashed"
attacktext = "slashes"
ranged = -1
projectiletype = /obj/projectile/bullet/pistol/
@@ -12,7 +12,7 @@
icon_state = "hivebotbeacon_active"
icon_living = "hivebotbeacon_active"
health = 300
maxHealth = 300
maxhealth = 300
blood_type = COLOR_OIL
projectilesound = 'sound/weapons/taser2.ogg'
projectiletype = /obj/projectile/beam/hivebot
@@ -4,7 +4,7 @@
icon = 'icons/mob/npc/hivebot.dmi'
icon_state = "hivebotharvester"
health = 100
maxHealth = 100
maxhealth = 100
blood_type = COLOR_OIL
blood_overlay_icon = 'icons/mob/npc/blood_overlay_hivebot.dmi'
melee_damage_lower = 30
@@ -12,7 +12,7 @@
destroy_surroundings = 0
wander = 0
ranged = 1
attacktext = "skewered"
attacktext = "skewers"
projectilesound = 'sound/weapons/lasercannonfire.ogg'
projectiletype = /obj/projectile/beam/hivebot/incendiary/heavy
organ_names = list("head", "core", "side thruster", "harvesting array")
@@ -271,7 +271,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
return
face_atom(T)
src.do_attack_animation(T)
T.take_damage(max(melee_damage_lower, melee_damage_upper) / 2)
T.add_damage(max(melee_damage_lower, melee_damage_upper) / 2, armor_penetration = armor_penetration)
visible_message(SPAN_DANGER("\The [src] [attacktext] \the [T]!"))
return T // no need to take a step back here
if(loc && attack_sound)
@@ -478,7 +478,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile)
found_obj = locate(/obj/structure/table) in target_turf
if(found_obj)
var/obj/structure/table/table = found_obj
if(!table.breakable)
if(!table.maxhealth)
continue
found_obj.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, TRUE)
hostile_last_attack = world.time
@@ -19,7 +19,7 @@
a_intent = I_HURT
stop_automated_movement_when_pulled = FALSE
health = 300
maxHealth = 300
maxhealth = 300
blood_type = COLOR_OIL
speed = 8
projectiletype = /obj/projectile/beam/drone
@@ -168,7 +168,7 @@
speak_chance = 5
//repair a bit of damage
if(prob(1) && health < maxHealth)
if(prob(1) && health < maxhealth)
visible_message(SPAN_NOTICE("\The [src] shudders and shakes as some of its damaged systems come back online."))
spark(src, 3, GLOB.alldirs)
health += rand(25, 100)
@@ -186,16 +186,16 @@
src.visible_message(SPAN_ALERT("\The [src] suddenly lights up, and additional targetting vanes slide into place."))
hostile_drone = TRUE
if(health / maxHealth > 0.9)
if(health / maxhealth > 0.9)
icon_state = "drone3"
explode_chance = 0
else if(health / maxHealth > 0.7)
else if(health / maxhealth > 0.7)
icon_state = "drone2"
explode_chance = 0
else if(health / maxHealth > 0.5)
else if(health / maxhealth > 0.5)
icon_state = "drone1"
explode_chance = 0.5
else if(health / maxHealth > 0.3)
else if(health / maxhealth > 0.3)
icon_state = "drone0"
explode_chance = 5
else if(health > 0)
@@ -6,12 +6,12 @@
icon_dead = "baseline_grey_off"
blood_type = COLOR_OIL
health = 100
maxHealth = 100
maxhealth = 100
melee_damage_lower = 15
melee_damage_upper = 20
armor_penetration = 20
attack_sound = 'sound/weapons/smash.ogg'
attacktext = "smashed"
attacktext = "smashes"
faction = "hivebot"
min_oxy = 0
max_oxy = 0
@@ -19,7 +19,7 @@
response_help = "pets"
response_disarm = "shoves"
response_harm = "harmlessly punches"
maxHealth = 1000
maxhealth = 1000
health = 1000
harm_intent_damage = 0
melee_damage_lower = 30
@@ -27,7 +27,7 @@
resist_mod = 15
mob_size = 25
environment_smash = 2
attacktext = "punished"
attacktext = "punishes"
attack_sound = 'sound/weapons/bladeslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
@@ -134,13 +134,13 @@
response_disarm = "pushes"
response_harm = "hits"
speed = 4
maxHealth = 50
maxhealth = 50
health = 50
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "nibbled"
attacktext = "nibbles"
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -170,7 +170,7 @@
icon_state = "gift2_evil"
icon_living = "gift2_evil"
icon_dead = "gift2"
maxHealth = 100
maxhealth = 100
health = 100
melee_damage_lower = 10
melee_damage_upper = 10
@@ -179,7 +179,7 @@
icon_state = "gift3_evil"
icon_living = "gift3_evil"
icon_dead = "gift3"
maxHealth = 150
maxhealth = 150
health = 150
melee_damage_lower = 15
melee_damage_upper = 15
@@ -15,13 +15,13 @@
response_disarm = "pushes"
response_harm = "hits"
speed = 4
maxHealth = 250
maxhealth = 250
health = 250
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
attacktext = "attacked"
attacktext = "attacks"
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -57,7 +57,7 @@
// Aggro when you try to open them. Will also pickup loot when spawns and drop it when dies.
/mob/living/simple_animal/hostile/mimic/crate
attacktext = "bitten"
attacktext = "bites"
stop_automated_movement = 1
wander = 0
@@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
/mob/living/simple_animal/hostile/mimic/copy
health = 100
maxHealth = 100
maxhealth = 100
var/mob/living/creator = null // the creator
var/destroy_objects = 0
var/knockdown_people = 0
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
melee_damage_upper = 2 + I.force
speed = 2 * I.w_class
maxHealth = health
maxhealth = health
if(creator)
src.creator = creator
faction = "[REF(creator)]" // very unique
@@ -19,7 +19,7 @@
response_disarm = "shoves"
response_harm = "harmlessly punches"
blood_overlay_icon = null
maxHealth = 400
maxhealth = 400
health = 400
harm_intent_damage = 0
melee_damage_lower = 40
@@ -28,7 +28,7 @@
resist_mod = 10
mob_size = 30
environment_smash = 2
attacktext = "chomped"
attacktext = "chomps"
attack_sound = 'sound/weapons/bloodyslice.ogg'
lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE
@@ -150,7 +150,7 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = -1
maxHealth = 50
maxhealth = 50
health = 50
mob_size = 10
@@ -158,7 +158,7 @@
melee_damage_lower = 5
melee_damage_upper = 8
attacktext = "rammed"
attacktext = "rams"
attack_sound = 'sound/weapons/punch4_bass.ogg'
environment_smash = 1
@@ -25,7 +25,7 @@
status_flags = CANPUSH
pass_flags = PASSTABLE
maxHealth = 125
maxhealth = 125
health = 125
max_stamina = -1
@@ -43,7 +43,7 @@
wander = FALSE
attacktext = "glomped"
attacktext = "glomps"
attack_sound = 'sound/effects/blobattack.ogg'
blood_overlay_icon = null
@@ -71,7 +71,7 @@
healths.icon_state = "health6"
if(.)
if(healths)
switch(health / maxHealth * 100)
switch(health / maxhealth * 100)
if(100 to INFINITY)
healths.icon_state = "health0"
if(80 to 100)
@@ -88,7 +88,7 @@
healths.icon_state = "health6"
if((stat == UNCONSCIOUS || resting) && locate(/obj/structure/gore/tendrils) in loc)
health = min(maxHealth, health + 1)
health = min(maxhealth, health + 1)
/mob/living/simple_animal/hostile/morph/verb/toggle_darkview()
set name = "Toggle Darkvision"
@@ -15,7 +15,7 @@
response_help = "pets"
response_disarm = "shoves"
response_harm = "harmlessly punches"
maxHealth = 850
maxhealth = 850
health = 850
harm_intent_damage = 0
melee_damage_lower = 30
@@ -23,7 +23,7 @@
resist_mod = 2
mob_size = 30
environment_smash = 2
attacktext = "chomped"
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
faction = "worm"
@@ -70,7 +70,7 @@
visible_message(SPAN_WARNING("\The [src] starts consuming \the [P]..."), SPAN_NOTICE("You start consuming \the [P]."))
if(!do_after(src, 1 SECOND, P))
return
var/self_msg = "You consume \the [P][health < maxHealth ? ", healing yourself" : ""]."
var/self_msg = "You consume \the [P][health < maxhealth ? ", healing yourself" : ""]."
adjustBruteLoss(-5 * P.amount)
visible_message(SPAN_WARNING("\The [src] consumes \the [P]!"), SPAN_NOTICE(self_msg))
P.amount /= 2
@@ -144,7 +144,7 @@
name = "black trident worm"
desc = "An utterly tremendous, disgustingly bloated worm which relishes in the consumption of phoron."
icon = 'icons/mob/npc/small_phoron_worm.dmi'
maxHealth = 80
maxhealth = 80
health = 80
melee_damage_lower = 15
melee_damage_upper = 15
@@ -13,13 +13,13 @@
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100
maxhealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "slashed"
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
min_oxy = 5
@@ -24,7 +24,7 @@
attack_emote = "buzzes menacingly at"
stop_automated_movement_when_pulled = FALSE
health = 300
maxHealth = 300
maxhealth = 300
destroy_surroundings = FALSE
@@ -35,7 +35,7 @@
melee_damage_upper = 15
mob_size = 5
attacktext = "slashed"
attacktext = "slashes"
attack_sound = 'sound/weapons/bladeslice.ogg'
speed = 2
@@ -116,7 +116,7 @@
speed = 3
health = 200
maxHealth = 200
maxhealth = 200
ranged = TRUE
rapid = TRUE
@@ -168,7 +168,7 @@
mob_size = 3
health = 100
maxHealth = 100
maxhealth = 100
melee_damage_lower = 5
melee_damage_upper = 5
@@ -43,7 +43,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile/retaliate/aquatic)
icon_dead = "thresher_dead"
icon_rest = "thresher_rest"
health = 230
maxHealth = 230
maxhealth = 230
melee_damage_lower = 40
melee_damage_upper = 70
armor_penetration = 80
@@ -53,7 +53,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile/retaliate/aquatic)
name = "large toothed aquatic creature"
desc = "A threatening-looking aquatic creature with a mouth full of densely-packed, razor sharp teeth. This one has grown to a substantial size."
health = 370
maxHealth = 370
maxhealth = 370
melee_damage_lower = 50
melee_damage_upper = 90
armor_penetration = 100
@@ -19,11 +19,11 @@
mob_size = 12
health = 60
maxHealth = 60
maxhealth = 60
blood_type = "#006666"
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "chomped"
attacktext = "chomps"
attack_sound = 'sound/weapons/bite.ogg'
speed = 4
projectiletype = /obj/projectile/beam/cavern
@@ -84,7 +84,7 @@
icon_dead = "sadrone_dead"
speed = 5
health = 60
maxHealth = 60
maxhealth = 60
harm_intent_damage = 5
ranged = 1
smart_ranged = TRUE
@@ -16,13 +16,13 @@
universal_speak = FALSE
a_intent = I_HURT
stop_automated_movement_when_pulled = 0
maxHealth = 75
maxhealth = 75
health = 75
speed = -1
harm_intent_damage = 8
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "attacked"
attacktext = "attacks"
attack_sound = 'sound/items/bikehorn.ogg'
min_oxy = 5
@@ -17,7 +17,7 @@
icon_state = "royalcrab"
icon_living = "royalcrab"
icon_dead = "royalcrab_dead"
maxHealth = 150
maxhealth = 150
health = 150
speed = 3
melee_damage_lower = 10
@@ -36,7 +36,7 @@
icon_dead = "char_dead"
mob_size = MOB_LARGE
health = 45
maxHealth = 45
maxhealth = 45
speed = 2
response_help = "pats briefly"
response_disarm = "gently pushes"
@@ -14,13 +14,13 @@
mob_size = 12
organ_names = list("torso", "left wing", "right wing", "head")
maxHealth = 300
maxhealth = 300
health = 300
melee_damage_lower = 20
melee_damage_upper = 30
armor_penetration = 20
attacktext = "clawed"
attacktext = "claws"
attack_sound = 'sound/weapons/slice.ogg'
meat_amount = 8
@@ -10,11 +10,11 @@
universal_speak = FALSE
density = FALSE
health = 50
maxHealth = 50
maxhealth = 50
melee_damage_lower = 5
melee_damage_upper = 8
armor_penetration = 5
attacktext = "sliced"
attacktext = "slices"
faction = "silicon"
min_oxy = 0
minbodytemp = 0
@@ -14,12 +14,12 @@
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100
maxhealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
attacktext = "punched"
attacktext = "punches"
a_intent = I_HURT
var/corpse = /obj/effect/landmark/mobcorpse/russian
var/weapon1 = /obj/item/material/knife
@@ -96,7 +96,7 @@
icon = 'icons/mob/npc/cavern.dmi'
icon_state = "sarlacc"
health = 100
maxHealth = 100
maxhealth = 100
gender = NEUTER
status_flags = 0
anchored = 1
@@ -168,11 +168,11 @@
sated -= 1
if(prob(5) && tentacles < 6)
tentacles += 1
if(health < maxHealth)
if(health < maxhealth)
health += 1
sated -= 1
if(health >= maxHealth)
health = maxHealth
if(health >= maxhealth)
health = maxhealth
if(sarlacc && sarlacc.deployed)
sarlacc.deployed = 0
else
@@ -260,7 +260,7 @@
icon = 'icons/mob/npc/cavern.dmi'
icon_state = "sarlacctentacle"
health = 25
maxHealth = 25
maxhealth = 25
gender = NEUTER
status_flags = 0
anchored = 1
@@ -322,7 +322,7 @@
universal_understand = 1
health = 450
maxHealth = 450
maxhealth = 450
gender = MALE
status_flags = 0
@@ -18,7 +18,7 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = 4
maxHealth = 25
maxhealth = 25
health = 25
mob_size = 10
@@ -33,7 +33,7 @@
melee_damage_upper = 15
armor_penetration = 5
attack_flags = DAMAGE_FLAG_EDGE
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
@@ -108,7 +108,7 @@
icon_state = "carp_russian"
icon_living = "carp_russian"
icon_dead = "carp_russian_dead"
maxHealth = 50 //stronk
maxhealth = 50 //stronk
health = 50
/mob/living/simple_animal/hostile/carp/russian/FindTarget()
@@ -131,7 +131,7 @@
icon_rest = "shark_rest"
meat_amount = 5
maxHealth = 100
maxhealth = 100
health = 100
mob_size = 15
@@ -149,7 +149,7 @@
icon_dead = "reaver"
meat_amount = 5
maxHealth = 100
maxhealth = 100
health = 100
speed = 10
@@ -174,7 +174,7 @@
icon_dead = "eel"
meat_amount = 5
maxHealth = 150
maxhealth = 150
health = 150
speed = 6
@@ -212,7 +212,7 @@
icon_dead = "bloater"
meat_amount = 5
maxHealth = 50
maxhealth = 50
health = 50
mob_size = 5
@@ -288,7 +288,7 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = 2
maxHealth = 5
maxhealth = 5
health = 5
mob_size = 2
density = FALSE
@@ -298,7 +298,7 @@
harm_intent_damage = 5
melee_damage_lower = 5
melee_damage_upper = 5
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
min_oxy = 0
@@ -22,7 +22,7 @@
blood_type = "#51C404"
blood_overlay_icon = null
stop_automated_movement_when_pulled = 0
maxHealth = 1000
maxhealth = 1000
health = 1000
melee_damage_lower = 35
melee_damage_upper = 40
@@ -37,7 +37,7 @@
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
mob_push_flags = ALLMOBS
attacktext = "bit"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
pass_flags = PASSTABLE|PASSRAILING
@@ -14,12 +14,12 @@
response_harm = "hits"
speed = 4
stop_automated_movement_when_pulled = 0
maxHealth = 100
maxhealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 10
attacktext = "punched"
attacktext = "punches"
a_intent = I_HURT
var/corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
var/weapon1
@@ -59,7 +59,7 @@
icon_living = "syndicatemelee"
weapon1 = /obj/item/melee/energy/sword/red
weapon2 = /obj/item/shield/energy
attacktext = "slashed"
attacktext = "slashes"
status_flags = 0
/mob/living/simple_animal/hostile/syndicate/melee/attackby(obj/item/attacking_item, mob/user)
@@ -9,12 +9,12 @@
universal_speak = FALSE
health = 10
maxHealth = 10
maxhealth = 10
melee_damage_lower = 1
melee_damage_upper = 2
organ_names = list("chest", "lower body", "left arm", "right arm", "left leg", "right leg", "head")
attack_emote = "raises its fist at"
attacktext = "smashed"
attacktext = "smashes"
attack_sound = 'sound/weapons/woodenhit.ogg'
speed = 2
mob_size = MOB_MINISCULE
@@ -15,7 +15,7 @@
response_harm = "hits"
blood_overlay_icon = null
speed = -1
maxHealth = 250
maxhealth = 250
health = 250
pixel_x = -16
@@ -23,7 +23,7 @@
harm_intent_damage = 5
melee_damage_lower = 8
melee_damage_upper = 12
attacktext = "bitten"
attacktext = "bites"
attack_sound = 'sound/weapons/bite.ogg'
//Space carp aren't affected by atmos.
@@ -15,7 +15,7 @@
response_help = "pets"
response_disarm = "shoves"
response_harm = "harmlessly punches"
maxHealth = 350
maxhealth = 350
health = 350
harm_intent_damage = 5
melee_damage_lower = 30
@@ -24,7 +24,7 @@
resist_mod = 3
mob_size = 15
environment_smash = 2
attacktext = "mangled"
attacktext = "mangles"
attack_emote = "charges toward"
attack_sound = 'sound/effects/creatures/vannatusk_attack.ogg'
emote_sounds = list('sound/effects/creatures/vannatusk_sound.ogg', 'sound/effects/creatures/vannatusk_sound_2.ogg')
@@ -6,12 +6,12 @@
icon_living = "viscerator_attack"
pass_flags = PASSTABLE|PASSRAILING
health = 15
maxHealth = 15
maxhealth = 15
melee_damage_lower = 10
melee_damage_upper = 15
armor_penetration = 20
density = 0
attacktext = "cut"
attacktext = "cuts"
attack_sound = 'sound/weapons/bladeslice.ogg'
blood_overlay_icon = null
faction = "syndicate"
@@ -6,7 +6,7 @@
icon_state = "shade"
icon_living = "shade"
icon_dead = "shade_dead"
maxHealth = 50
maxhealth = 50
health = 50
universal_speak = 1
speak_emote = list("hisses")
@@ -17,7 +17,7 @@
response_harm = "punches"
melee_damage_lower = 5
melee_damage_upper = 15
attacktext = "drained the life from"
attacktext = "drains the life from"
minbodytemp = 0
maxbodytemp = 4000
min_oxy = 0
@@ -75,7 +75,7 @@
icon_state = "blank"
icon_living = "blank"
icon_dead = "blank"
maxHealth = 100
maxhealth = 100
health = 100
universal_speak = 1
universal_understand = 1
@@ -8,7 +8,7 @@
name = "animal"
icon = 'icons/mob/npc/animal.dmi'
health = 20
maxHealth = 20
maxhealth = 20
mob_bump_flag = SIMPLE_ANIMAL
mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
@@ -121,7 +121,7 @@
var/melee_reach = 1
var/armor_penetration = 0
var/attack_flags = 0
var/attacktext = "attacked"
var/attacktext = "attacks"
var/attack_sound = SFX_SWING_HIT
var/friendly = "nuzzles"
var/environment_smash = 0
@@ -225,9 +225,9 @@
. = ..()
seek_move_delay = (1 / seek_speed) * 10 //number of ds between moves
turns_since_scan = rand(min_scan_interval, max_scan_interval)//Randomise this at the start so animals don't sync up
health = maxHealth
health = maxhealth
remove_verb(src, /mob/verb/observe)
health = maxHealth
health = maxhealth
if (mob_size)
update_nutrition_stats()
reagents = new/datum/reagents(stomach_size_mult*mob_size, src)
@@ -293,9 +293,9 @@
. = ..()
if (stat == DEAD)
. += SPAN_DANGER("It looks dead.")
if (health < maxHealth * 0.5)
if (health < maxhealth * 0.5)
. += SPAN_DANGER("It looks badly wounded.")
else if (health < maxHealth)
else if (health < maxhealth)
. += SPAN_WARNING("It looks wounded.")
/mob/living/simple_animal/can_name(var/mob/living/M)
@@ -315,8 +315,8 @@
//Health
updatehealth()
if(health > maxHealth)
health = maxHealth
if(health > maxhealth)
health = maxhealth
handle_blood()
handle_stunned()
@@ -450,7 +450,7 @@
death()
var/current_blood_state = blood_state
var/blood_mod = health / maxHealth
var/blood_mod = health / maxhealth
if(blood_mod > 0.9)
blood_state = BLOOD_NONE
else if(blood_mod >= 0.7)
@@ -533,7 +533,7 @@
if (!hunger_enabled || nutrition > max_nutrition * 0.9)
return 0//full
else if ((nutrition > max_nutrition * 0.8) || health < maxHealth)
else if ((nutrition > max_nutrition * 0.8) || health < maxhealth)
return 1//content
else return 2//hungry
@@ -634,7 +634,7 @@
if(istype(attacking_item, /obj/item/saddle) && vehicle_version && (stat != DEAD))
var/obj/vehicle/V = new vehicle_version (get_turf(src))
V.health = health
V.maxhealth = maxHealth
V.maxhealth = maxhealth
to_chat(user, SPAN_WARNING("You place \the [attacking_item] on the \the [src]."))
user.drop_from_inventory(attacking_item)
attacking_item.forceMove(get_turf(src))
@@ -774,7 +774,7 @@
. = ..()
if(show_stat_health)
. += "Health: [round((health / maxHealth) * 100)]%"
. += "Health: [round((health / maxhealth) * 100)]%"
. += "Nutrition: [nutrition]/[max_nutrition]"
/mob/living/simple_animal/updatehealth()
@@ -17,7 +17,7 @@
harm_intent_damage = 2
maxHealth = 30
maxhealth = 30
health = 30
universal_speak =1
@@ -185,12 +185,12 @@
icon_living = "spacewormhead0"
icon_dead = "spacewormheaddead"
maxHealth = 20
maxhealth = 20
health = 20
melee_damage_lower = 10
melee_damage_upper = 15
attacktext = "bitten"
attacktext = "bites"
animate_movement = SLIDE_STEPS