mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-27 22:16:23 +01:00
Constructs 2.0 - Living Stone (#5040)
* Construct Overhaul + Related Fixes/Tweaks
This commit is contained in:
@@ -1,22 +1,39 @@
|
||||
/mob/living/simple_animal/construct
|
||||
name = "Construct"
|
||||
real_name = "Construct"
|
||||
var/construct_type = "shade"
|
||||
desc = ""
|
||||
speak_emote = list("hisses")
|
||||
emote_hear = list("wails","screeches")
|
||||
|
||||
ui_icons = 'icons/mob/screen1_construct.dmi'
|
||||
has_hands = 1
|
||||
hand_form = "stone manipulators"
|
||||
|
||||
response_help = "thinks better of touching"
|
||||
response_disarm = "flailed at"
|
||||
response_harm = "punched"
|
||||
|
||||
intelligence_level = SA_HUMANOID // Player controlled.
|
||||
|
||||
hovering = TRUE
|
||||
softfall = TRUE //Beings made of Hellmarble and powered by the tears of the damned are not concerned with mortal things such as 'gravity'.
|
||||
parachuting = TRUE
|
||||
|
||||
icon_dead = "shade_dead"
|
||||
var/do_glow = 1
|
||||
|
||||
speed = -1
|
||||
a_intent = I_HURT
|
||||
stop_automated_movement = 1
|
||||
|
||||
status_flags = CANPUSH
|
||||
|
||||
universal_speak = 0
|
||||
universal_understand = 1
|
||||
|
||||
attack_sound = 'sound/weapons/spiderlunge.ogg'
|
||||
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
@@ -25,11 +42,16 @@
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
|
||||
minbodytemp = 0
|
||||
show_stat_health = 1
|
||||
|
||||
faction = "cult"
|
||||
supernatural = 1
|
||||
|
||||
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
||||
see_in_dark = 7
|
||||
|
||||
var/nullblock = 0
|
||||
|
||||
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
||||
@@ -39,6 +61,51 @@
|
||||
|
||||
can_be_antagged = TRUE
|
||||
|
||||
taser_kill = 0 // no
|
||||
|
||||
shock_resistance = 0.9 //Electricity isn't very effective on stone, especially that from hell.
|
||||
|
||||
armor = list(
|
||||
"melee" = 10,
|
||||
"bullet" = 10,
|
||||
"laser" = 10,
|
||||
"energy" = 10,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
|
||||
/mob/living/simple_animal/construct/place_spell_in_hand(var/path)
|
||||
if(!path || !ispath(path))
|
||||
return 0
|
||||
|
||||
//var/obj/item/weapon/spell/S = new path(src)
|
||||
var/obj/item/weapon/spell/construct/S = new path(src)
|
||||
|
||||
//No hands needed for innate casts.
|
||||
if(S.cast_methods & CAST_INNATE)
|
||||
if(S.run_checks())
|
||||
S.on_innate_cast(src)
|
||||
|
||||
if(l_hand && r_hand) //Make sure our hands aren't full.
|
||||
if(istype(r_hand, /obj/item/weapon/spell)) //If they are full, perhaps we can still be useful.
|
||||
var/obj/item/weapon/spell/r_spell = r_hand
|
||||
if(r_spell.aspect == ASPECT_CHROMATIC) //Check if we can combine the new spell with one in our hands.
|
||||
r_spell.on_combine_cast(S, src)
|
||||
else if(istype(l_hand, /obj/item/weapon/spell))
|
||||
var/obj/item/weapon/spell/l_spell = l_hand
|
||||
if(l_spell.aspect == ASPECT_CHROMATIC) //Check the other hand too.
|
||||
l_spell.on_combine_cast(S, src)
|
||||
else //Welp
|
||||
to_chat(src, "<span class='warning'>You require a free manipulator to use this power.</span>")
|
||||
return 0
|
||||
|
||||
if(S.run_checks())
|
||||
put_in_hands(S)
|
||||
return 1
|
||||
else
|
||||
qdel(S)
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/construct/cultify()
|
||||
return
|
||||
|
||||
@@ -51,7 +118,17 @@
|
||||
for(var/spell in construct_spells)
|
||||
src.add_spell(new spell, "const_spell_ready")
|
||||
updateicon()
|
||||
add_glow()
|
||||
|
||||
/mob/living/simple_animal/construct/updateicon()
|
||||
overlays.Cut()
|
||||
..()
|
||||
if(do_glow)
|
||||
add_glow()
|
||||
|
||||
/mob/living/simple_animal/construct/update_icon()
|
||||
..()
|
||||
if(do_glow)
|
||||
add_glow()
|
||||
|
||||
/mob/living/simple_animal/construct/death()
|
||||
new /obj/item/weapon/ectoplasm (src.loc)
|
||||
@@ -61,11 +138,15 @@
|
||||
|
||||
/mob/living/simple_animal/construct/attack_generic(var/mob/user)
|
||||
if(istype(user, /mob/living/simple_animal/construct/builder))
|
||||
var/mob/living/simple_animal/construct/builder/B = user
|
||||
if(health < getMaxHealth())
|
||||
adjustBruteLoss(-5)
|
||||
var/repair_lower_bound = B.melee_damage_lower * -1
|
||||
var/repair_upper_bound = B.melee_damage_upper * -1
|
||||
adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound))
|
||||
adjustFireLoss(rand(repair_lower_bound, repair_upper_bound))
|
||||
user.visible_message("<span class='notice'>\The [user] mends some of \the [src]'s wounds.</span>")
|
||||
else
|
||||
user << "<span class='notice'>\The [src] is undamaged.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is undamaged.</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
@@ -83,6 +164,8 @@
|
||||
|
||||
user << msg
|
||||
|
||||
/mob/living/simple_animal/construct/Process_Spacemove()
|
||||
return 1 //Constructs levitate, can fall from a shuttle with no harm, and are piloted by either damned spirits or some otherworldly entity. It's not hard to believe.
|
||||
|
||||
/////////////////Juggernaut///////////////
|
||||
|
||||
@@ -91,48 +174,83 @@
|
||||
/mob/living/simple_animal/construct/armoured
|
||||
name = "Juggernaut"
|
||||
real_name = "Juggernaut"
|
||||
construct_type = "juggernaut"
|
||||
desc = "A possessed suit of armour driven by the will of the restless dead"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "behemoth"
|
||||
icon_living = "behemoth"
|
||||
maxHealth = 250
|
||||
health = 250
|
||||
maxHealth = 300
|
||||
health = 300
|
||||
response_harm = "harmlessly punches"
|
||||
harm_intent_damage = 0
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
melee_damage_upper = 40
|
||||
attack_armor_pen = 60 //Being punched by a living, floating statue.
|
||||
attacktext = list("smashed their armoured gauntlet into")
|
||||
friendly = list("pats")
|
||||
mob_size = MOB_HUGE
|
||||
speed = 3
|
||||
speed = 2 //Not super fast, but it might catch up to someone in armor who got punched once or twice.
|
||||
environment_smash = 2
|
||||
attack_sound = 'sound/weapons/heavysmash.ogg'
|
||||
status_flags = 0
|
||||
resistance = 10
|
||||
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
|
||||
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
|
||||
/spell/targeted/fortify,
|
||||
/spell/targeted/construct_advanced/slam
|
||||
)
|
||||
|
||||
armor = list(
|
||||
"melee" = 70,
|
||||
"bullet" = 30,
|
||||
"laser" = 30,
|
||||
"energy" = 30,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
|
||||
/mob/living/simple_animal/construct/armoured/Life()
|
||||
weakened = 0
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
|
||||
var/reflectchance = 80 - round(P.damage/3)
|
||||
if(prob(reflectchance))
|
||||
adjustBruteLoss(P.damage * 0.5)
|
||||
// if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) //If it's going to be slow, it's probably going to need every reflect it can get.
|
||||
var/reflectchance = 80 - round(P.damage/3)
|
||||
if(prob(reflectchance))
|
||||
var/damage_mod = rand(2,4)
|
||||
var/projectile_dam_type = P.damage_type
|
||||
var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
|
||||
var/armorcheck = run_armor_check(null, P.check_armour)
|
||||
var/soakedcheck = get_armor_soak(null, P.check_armour)
|
||||
if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)))
|
||||
visible_message("<span class='danger'>The [P.name] bounces off of [src]'s shell!</span>", \
|
||||
"<span class='userdanger'>The [P.name] bounces off of [src]'s shell!</span>")
|
||||
new /obj/item/weapon/material/shard/shrapnel(src.loc)
|
||||
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
|
||||
projectile_dam_type = BRUTE
|
||||
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased.
|
||||
apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
|
||||
return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect.
|
||||
else
|
||||
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s shell!</span>", \
|
||||
"<span class='userdanger'>The [P.name] gets reflected by [src]'s shell!</span>")
|
||||
"<span class='userdanger'>The [P.name] gets reflected by [src]'s shell!</span>")
|
||||
damage_mod = rand(3,5)
|
||||
incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
|
||||
if(!(P.damage_type == BRUTE || P.damage_type == BURN))
|
||||
projectile_dam_type = BURN
|
||||
incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased.
|
||||
apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
|
||||
|
||||
// Find a turf near or on the original location to bounce to
|
||||
if(P.starting)
|
||||
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/turf/curloc = get_turf(src)
|
||||
// Find a turf near or on the original location to bounce to
|
||||
if(P.starting)
|
||||
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/turf/curloc = get_turf(src)
|
||||
|
||||
// redirect the projectile
|
||||
P.redirect(new_x, new_y, curloc, src)
|
||||
P.reflected = 1
|
||||
// redirect the projectile
|
||||
P.redirect(new_x, new_y, curloc, src)
|
||||
P.reflected = 1
|
||||
|
||||
return -1 // complete projectile permutation
|
||||
return -1 // complete projectile permutation
|
||||
|
||||
return (..(P))
|
||||
|
||||
@@ -145,21 +263,32 @@
|
||||
/mob/living/simple_animal/construct/wraith
|
||||
name = "Wraith"
|
||||
real_name = "Wraith"
|
||||
desc = "A wicked bladed shell contraption piloted by a bound spirit"
|
||||
construct_type = "wraith"
|
||||
desc = "A wicked bladed shell contraption piloted by a bound spirit."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "floating"
|
||||
icon_living = "floating"
|
||||
maxHealth = 75
|
||||
health = 75
|
||||
maxHealth = 200
|
||||
health = 200
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 15
|
||||
attack_sharp = 1
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed")
|
||||
friendly = list("pinches")
|
||||
speed = -1
|
||||
environment_smash = 1
|
||||
see_in_dark = 7
|
||||
attack_sound = 'sound/weapons/rapidslice.ogg'
|
||||
construct_spells = list(/spell/targeted/ethereal_jaunt/shift)
|
||||
construct_spells = list(/spell/targeted/ethereal_jaunt/shift,
|
||||
/spell/targeted/ambush_mode
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/construct/wraith/DoPunch(var/atom/A)
|
||||
. = ..()
|
||||
if(. && isliving(A))
|
||||
var/mob/living/L = A
|
||||
L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
|
||||
|
||||
/////////////////////////////Artificer/////////////////////////
|
||||
|
||||
@@ -168,35 +297,43 @@
|
||||
/mob/living/simple_animal/construct/builder
|
||||
name = "Artificer"
|
||||
real_name = "Artificer"
|
||||
desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies"
|
||||
construct_type = "artificer"
|
||||
desc = "A bulbous construct dedicated to building and maintaining temples to their otherworldly lords."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "artificer"
|
||||
icon_living = "artificer"
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
response_harm = "viciously beaten"
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 5
|
||||
melee_damage_upper = 5
|
||||
melee_damage_lower = 15 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.
|
||||
melee_damage_upper = 20
|
||||
attacktext = list("rammed")
|
||||
speed = 0
|
||||
environment_smash = 1
|
||||
environment_smash = 2
|
||||
attack_sound = 'sound/weapons/rapidslice.ogg'
|
||||
construct_spells = list(/spell/aoe_turf/conjure/construct/lesser,
|
||||
/spell/aoe_turf/conjure/wall,
|
||||
/spell/aoe_turf/conjure/floor,
|
||||
/spell/aoe_turf/conjure/soulstone,
|
||||
/spell/aoe_turf/conjure/pylon
|
||||
/spell/aoe_turf/conjure/pylon,
|
||||
/spell/aoe_turf/conjure/door,
|
||||
/spell/aoe_turf/conjure/grille,
|
||||
/spell/targeted/occult_repair_aura,
|
||||
/spell/targeted/construct_advanced/mend_acolyte
|
||||
)
|
||||
|
||||
|
||||
/////////////////////////////Behemoth/////////////////////////
|
||||
|
||||
/*
|
||||
* The Behemoth. Admin-allowance only, still try to keep it in some guideline of 'Balanced', even if it means Security has to be fully geared to be so.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/construct/behemoth
|
||||
name = "Behemoth"
|
||||
real_name = "Behemoth"
|
||||
desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal."
|
||||
construct_type = "juggernaut"
|
||||
desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "behemoth"
|
||||
icon_living = "behemoth"
|
||||
@@ -208,38 +345,84 @@
|
||||
melee_damage_lower = 50
|
||||
melee_damage_upper = 50
|
||||
attacktext = list("brutally crushed")
|
||||
friendly = list("pokes") //Anything nice the Behemoth would do would still Kill the Human. Leave it at poke.
|
||||
speed = 5
|
||||
environment_smash = 2
|
||||
attack_sound = 'sound/weapons/heavysmash.ogg'
|
||||
resistance = 10
|
||||
icon_scale = 2
|
||||
var/energy = 0
|
||||
var/max_energy = 1000
|
||||
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser)
|
||||
armor = list(
|
||||
"melee" = 60,
|
||||
"bullet" = 60,
|
||||
"laser" = 60,
|
||||
"energy" = 30,
|
||||
"bomb" = 10,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
|
||||
/spell/targeted/fortify,
|
||||
/spell/targeted/construct_advanced/slam
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/construct/behemoth/bullet_act(var/obj/item/projectile/P)
|
||||
var/reflectchance = 80 - round(P.damage/3)
|
||||
if(prob(reflectchance))
|
||||
visible_message("<span class='danger'>The [P.name] gets reflected by [src]'s shell!</span>", \
|
||||
"<span class='userdanger'>The [P.name] gets reflected by [src]'s shell!</span>")
|
||||
|
||||
// Find a turf near or on the original location to bounce to
|
||||
if(P.starting)
|
||||
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
|
||||
var/turf/curloc = get_turf(src)
|
||||
|
||||
// redirect the projectile
|
||||
P.redirect(new_x, new_y, curloc, src)
|
||||
P.reflected = 1
|
||||
|
||||
return -1 // complete projectile permutation
|
||||
|
||||
return (..(P))
|
||||
|
||||
////////////////////////Harvester////////////////////////////////
|
||||
|
||||
|
||||
/*
|
||||
* Master of Spells and Ranged Abilities. Not as fragile as the Wraith, but nowhere near as maneuverable and deadly in melee.
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/construct/harvester
|
||||
name = "Harvester"
|
||||
real_name = "Harvester"
|
||||
desc = "The promised reward of the livings who follow narsie. Obtained by offering their bodies to the geometer of blood"
|
||||
construct_type = "harvester"
|
||||
desc = "A tendril-laden construct piloted by a chained mind."
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "harvester"
|
||||
icon_living = "harvester"
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
melee_damage_lower = 25
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 25
|
||||
attack_sharp = 1
|
||||
attacktext = list("violently stabbed")
|
||||
speed = -1
|
||||
friendly = list("caresses")
|
||||
speed = 0
|
||||
environment_smash = 1
|
||||
see_in_dark = 7
|
||||
attack_sound = 'sound/weapons/pierce.ogg'
|
||||
|
||||
armor = list(
|
||||
"melee" = 10,
|
||||
"bullet" = 20,
|
||||
"laser" = 20,
|
||||
"energy" = 20,
|
||||
"bomb" = 20,
|
||||
"bio" = 100,
|
||||
"rad" = 100)
|
||||
|
||||
construct_spells = list(
|
||||
/spell/targeted/harvest,
|
||||
/spell/aoe_turf/knock/harvester,
|
||||
/spell/targeted/construct_advanced/inversion_beam,
|
||||
/spell/targeted/construct_advanced/agonizing_sphere,
|
||||
/spell/rune_write
|
||||
)
|
||||
|
||||
@@ -250,6 +433,9 @@
|
||||
overlays += eye_glow
|
||||
set_light(2, -2, l_color = "#FFFFFF")
|
||||
|
||||
/mob/living/simple_animal/construct/proc/remove_glow()
|
||||
overlays.Cut()
|
||||
|
||||
////////////////HUD//////////////////////
|
||||
|
||||
/mob/living/simple_animal/construct/Life()
|
||||
@@ -268,71 +454,35 @@
|
||||
|
||||
silence_spells(purge)
|
||||
|
||||
/mob/living/simple_animal/construct/armoured/Life()
|
||||
..()
|
||||
/mob/living/simple_animal/construct/updatehealth() //Special icons.
|
||||
health = getMaxHealth() - getToxLoss() - getFireLoss() - getBruteLoss()
|
||||
|
||||
//Alive, becoming dead
|
||||
if((stat < DEAD) && (health <= 0))
|
||||
death()
|
||||
|
||||
//Overhealth
|
||||
if(health > getMaxHealth())
|
||||
health = getMaxHealth()
|
||||
|
||||
//Update our hud if we have one
|
||||
if(healths)
|
||||
switch(health)
|
||||
if(250 to INFINITY) healths.icon_state = "juggernaut_health0"
|
||||
if(208 to 249) healths.icon_state = "juggernaut_health1"
|
||||
if(167 to 207) healths.icon_state = "juggernaut_health2"
|
||||
if(125 to 166) healths.icon_state = "juggernaut_health3"
|
||||
if(84 to 124) healths.icon_state = "juggernaut_health4"
|
||||
if(42 to 83) healths.icon_state = "juggernaut_health5"
|
||||
if(1 to 41) healths.icon_state = "juggernaut_health6"
|
||||
else healths.icon_state = "juggernaut_health7"
|
||||
|
||||
|
||||
/mob/living/simple_animal/construct/behemoth/Life()
|
||||
..()
|
||||
if(healths)
|
||||
switch(health)
|
||||
if(750 to INFINITY) healths.icon_state = "juggernaut_health0"
|
||||
if(625 to 749) healths.icon_state = "juggernaut_health1"
|
||||
if(500 to 624) healths.icon_state = "juggernaut_health2"
|
||||
if(375 to 499) healths.icon_state = "juggernaut_health3"
|
||||
if(250 to 374) healths.icon_state = "juggernaut_health4"
|
||||
if(125 to 249) healths.icon_state = "juggernaut_health5"
|
||||
if(1 to 124) healths.icon_state = "juggernaut_health6"
|
||||
else healths.icon_state = "juggernaut_health7"
|
||||
|
||||
/mob/living/simple_animal/construct/builder/Life()
|
||||
..()
|
||||
if(healths)
|
||||
switch(health)
|
||||
if(50 to INFINITY) healths.icon_state = "artificer_health0"
|
||||
if(42 to 49) healths.icon_state = "artificer_health1"
|
||||
if(34 to 41) healths.icon_state = "artificer_health2"
|
||||
if(26 to 33) healths.icon_state = "artificer_health3"
|
||||
if(18 to 25) healths.icon_state = "artificer_health4"
|
||||
if(10 to 17) healths.icon_state = "artificer_health5"
|
||||
if(1 to 9) healths.icon_state = "artificer_health6"
|
||||
else healths.icon_state = "artificer_health7"
|
||||
|
||||
|
||||
|
||||
/mob/living/simple_animal/construct/wraith/Life()
|
||||
..()
|
||||
if(healths)
|
||||
switch(health)
|
||||
if(75 to INFINITY) healths.icon_state = "wraith_health0"
|
||||
if(62 to 74) healths.icon_state = "wraith_health1"
|
||||
if(50 to 61) healths.icon_state = "wraith_health2"
|
||||
if(37 to 49) healths.icon_state = "wraith_health3"
|
||||
if(25 to 36) healths.icon_state = "wraith_health4"
|
||||
if(12 to 24) healths.icon_state = "wraith_health5"
|
||||
if(1 to 11) healths.icon_state = "wraith_health6"
|
||||
else healths.icon_state = "wraith_health7"
|
||||
|
||||
|
||||
/mob/living/simple_animal/construct/harvester/Life()
|
||||
..()
|
||||
if(healths)
|
||||
switch(health)
|
||||
if(150 to INFINITY) healths.icon_state = "harvester_health0"
|
||||
if(125 to 149) healths.icon_state = "harvester_health1"
|
||||
if(100 to 124) healths.icon_state = "harvester_health2"
|
||||
if(75 to 99) healths.icon_state = "harvester_health3"
|
||||
if(50 to 74) healths.icon_state = "harvester_health4"
|
||||
if(25 to 49) healths.icon_state = "harvester_health5"
|
||||
if(1 to 24) healths.icon_state = "harvester_health6"
|
||||
else healths.icon_state = "harvester_health7"
|
||||
if(stat != DEAD)
|
||||
var/heal_per = (health / getMaxHealth()) * 100
|
||||
switch(heal_per)
|
||||
if(100 to INFINITY)
|
||||
healths.icon_state = "[construct_type]_health0"
|
||||
if(80 to 100)
|
||||
healths.icon_state = "[construct_type]_health1"
|
||||
if(60 to 80)
|
||||
healths.icon_state = "[construct_type]_health2"
|
||||
if(40 to 60)
|
||||
healths.icon_state = "[construct_type]_health3"
|
||||
if(20 to 40)
|
||||
healths.icon_state = "[construct_type]_health4"
|
||||
if(0 to 20)
|
||||
healths.icon_state = "[construct_type]_health5"
|
||||
else
|
||||
healths.icon_state = "[construct_type]_health6"
|
||||
else
|
||||
healths.icon_state = "[construct_type]_health7"
|
||||
Reference in New Issue
Block a user