// Hellhound
/mob/living/simple_animal/hostile/hellhound
// Sprites by FoS: https://www.paradisestation.org/forum/profile/335-fos
name = "lesser hellhound"
desc = "A demonic-looking black canine monster with glowing red eyes and sharp teeth. A firey, lava-like substance drips from it."
icon_state = "hellhound"
icon_living = "hellhound"
icon_dead = "hellhound_dead"
icon_resting = "hellhound_rest"
mob_biotypes = MOB_ORGANIC | MOB_BEAST
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
melee_damage_lower = 10 // slightly higher than araneus
melee_damage_upper = 30
a_intent = INTENT_HARM
environment_smash = 1
speak_chance = 0
speed = 0
maxHealth = 250 // same as sgt araneus
health = 250
obj_damage = 50
robust_searching = TRUE
stat_attack = UNCONSCIOUS
attacktext = "savages"
attack_sound = 'sound/effects/bite.ogg'
speak_emote = list("growls")
see_in_dark = 9
universal_understand = TRUE
wander = FALSE
var/life_regen_cycles = 0
var/life_regen_cycle_trigger = 10 // heal once for every X number of cycles spent resting
var/life_regen_amount = -10 // negative, because negative = healing
var/smoke_lastuse = 0
var/smoke_freq = 300 // 30 seconds
footstep_type = FOOTSTEP_MOB_CLAW
/mob/living/simple_animal/hostile/hellhound/Initialize(mapload)
. = ..()
var/datum/action/innate/demon/whisper/whisper_action = new
whisper_action.Grant(src)
ADD_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT)
/mob/living/simple_animal/hostile/hellhound/handle_automated_action()
if(!..())
return
if(IS_HORIZONTAL(src))
if(!wants_to_rest())
custom_emote(EMOTE_VISIBLE, "growls, and gets up.")
playsound(get_turf(src), 'sound/hallucinations/growl2.ogg', 50, 1)
stand_up()
else if(wants_to_rest())
custom_emote(EMOTE_VISIBLE, "lays down, and starts to lick their wounds.")
lay_down()
/mob/living/simple_animal/hostile/hellhound/examine(mob/user)
. = ..()
if(stat != DEAD)
var/list/msgs = list()
if(key)
msgs += "Its eyes have the spark of intelligence."
if(health > (maxHealth*0.95))
msgs += "It appears to be in excellent health."
else if(health > (maxHealth*0.75))
msgs += "It has a few injuries."
else if(health > (maxHealth*0.55))
msgs += "It has many injuries."
else if(health > (maxHealth*0.25))
msgs += "It is covered in wounds!"
if(IS_HORIZONTAL(src))
if(getBruteLoss() || getFireLoss())
msgs += "It is currently licking its wounds, regenerating the damage to its body!"
else
msgs += "It is currently resting."
. += msgs.Join("
")
/mob/living/simple_animal/hostile/hellhound/Life(seconds, times_fired)
. = ..()
if(stat != DEAD && IS_HORIZONTAL(src) && (getBruteLoss() || getFireLoss()))
if(life_regen_cycles >= life_regen_cycle_trigger)
life_regen_cycles = 0
to_chat(src, "You lick your wounds, helping them close.")
adjustBruteLoss(life_regen_amount)
adjustFireLoss(life_regen_amount)
else
life_regen_cycles++
/mob/living/simple_animal/hostile/hellhound/proc/wants_to_rest()
if(target)
return FALSE
if(getBruteLoss() || getFireLoss())
return TRUE
return FALSE
/mob/living/simple_animal/hostile/hellhound/attackby(obj/item/C, mob/user, params)
. = ..()
if(target && isliving(target))
var/mob/living/L = target
if(L.stat != CONSCIOUS)
target = user
/mob/living/simple_animal/hostile/hellhound/greater
name = "greater hellhound"
desc = "A demonic-looking black canine monster with glowing red eyes and sharp teeth. Greater hounds are far stronger than their lesser kin, and typically employed by powerful bluespace entities."
icon_state = "hellhoundgreater"
icon_living = "hellhoundgreater"
icon_resting = "hellhoundgreater_sit"
maxHealth = 400
health = 400
force_threshold = 5 // no punching
universal_speak = TRUE
smoke_freq = 200
life_regen_cycle_trigger = 5
melee_damage_lower = 20
melee_damage_upper = 30
environment_smash = 2
/mob/living/simple_animal/hostile/hellhound/greater/Initialize(mapload)
. = ..()
// Movement
AddSpell(new /datum/spell/ethereal_jaunt/shift)
var/datum/spell/area_teleport/teleport/telespell = new
telespell.clothes_req = FALSE
telespell.invocation_type = "none"
AddSpell(telespell)
var/datum/spell/aoe/knock/knockspell = new
knockspell.invocation_type = "none"
AddSpell(knockspell)
// Defense
var/datum/spell/forcewall/wallspell = new
wallspell.clothes_req = FALSE
wallspell.invocation_type = "none"
AddSpell(wallspell)
// Offense
var/datum/spell/aoe/conjure/creature/summonspell = new
summonspell.base_cooldown = 1
summonspell.invocation_type = "none"
summonspell.summon_type = list(/mob/living/simple_animal/hostile/hellhound)
summonspell.summon_amt = 1
AddSpell(summonspell)
/mob/living/simple_animal/hostile/hellhound/greater/AttackingTarget()
. = ..()
if(. && ishuman(target) && (!client || a_intent == INTENT_HARM))
special_aoe()
/mob/living/simple_animal/hostile/hellhound/greater/proc/special_aoe()
if(world.time < (smoke_lastuse + smoke_freq))
return
smoke_lastuse = world.time
var/datum/effect_system/smoke_spread/sleeping/smoke = new
smoke.set_up(10, FALSE, loc)
smoke.start()
/mob/living/simple_animal/hostile/hellhound/tear
name = "frenzied hellhound"
maxHealth = 300
health = 300
melee_damage_lower = 30
melee_damage_upper = 50
faction = list("rift")