From 39b67255558e0ca2955a85303ee602732c24ea93 Mon Sep 17 00:00:00 2001 From: Kyep Date: Tue, 20 Nov 2018 15:19:19 -0800 Subject: [PATCH] hellhound + minor tweaks --- code/datums/outfits/outfit_admin.dm | 4 +- code/datums/spells/shapeshift.dm | 22 +++- code/game/jobs/job/central.dm | 1 - .../mob/living/simple_animal/hostile/bat.dm | 1 + .../living/simple_animal/hostile/hellhound.dm | 121 ++++++++++++++++++ code/modules/surgery/organs/augments_arms.dm | 2 + icons/mob/animal.dmi | Bin 262629 -> 265605 bytes paradise.dme | 1 + 8 files changed, 149 insertions(+), 3 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/hostile/hellhound.dm diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 1ddf4ca4d28..2761a8063ee 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -1063,7 +1063,9 @@ H.mind.vampire.bloodtotal = 9999 H.mind.vampire.check_vampire_upgrade(0) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/bats) - to_chat(H, "You have gained the ability to shapeshift into bat form. While capable of basic self defense, you cannot use your other abilities in that form.") + to_chat(H, "You have gained the ability to shapeshift into bat form. This is a weak form with no abilities, only useful for stealth.") + H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/hellhound) + to_chat(H, "You have gained the ability to shapeshift into lesser hellhound form. This is a combat form with different abilities, tough but not invincible. It can regenerate itself over time by resting.") H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/raise_vampires) to_chat(H, "You have gained the ability to Raise Vampires. This extremely powerful AOE ability affects all humans near you. Vampires/thralls are healed. Corpses are raised as vampires. Others are stunned, then brain damaged, then killed.") H.dna.SetSEState(JUMPBLOCK, 1) diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 1b0a7587940..5dd388779ce 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -91,4 +91,24 @@ shapeshift_type = /mob/living/simple_animal/hostile/scarybat/batswarm list/current_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) list/current_casters = list() - list/possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) \ No newline at end of file + list/possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) + +/obj/effect/proc_holder/spell/targeted/shapeshift/hellhound + name = "Lesser Hellhound Form" + desc = "Take on the shape of a Hellhound." + invocation = "none" + invocation_type = "none" + action_background_icon_state = "bg_demon" + action_icon_state = "glare" + + shapeshift_type = /mob/living/simple_animal/hostile/hellhound + list/current_shapes = list(/mob/living/simple_animal/hostile/hellhound) + list/current_casters = list() + list/possible_shapes = list(/mob/living/simple_animal/hostile/hellhound) + +/obj/effect/proc_holder/spell/targeted/shapeshift/hellhound/greater + name = "Greater Hellhound Form" + shapeshift_type = /mob/living/simple_animal/hostile/hellhound/greater + list/current_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) + list/current_casters = list() + list/possible_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) \ No newline at end of file diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 1bae809c720..6f6ea6ca67a 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -85,7 +85,6 @@ ) cybernetic_implants = list( /obj/item/organ/internal/cyberimp/eyes/xray, - /obj/item/organ/internal/cyberimp/brain/anti_drop, /obj/item/organ/internal/cyberimp/brain/anti_stun, /obj/item/organ/internal/cyberimp/chest/nutriment/plus, /obj/item/organ/internal/cyberimp/arm/combat/centcom diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 94a20968baf..1e8d5eeb609 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -72,5 +72,6 @@ melee_damage_lower = 10 melee_damage_upper = 30 a_intent = INTENT_HARM + pass_flags = PASSTABLE universal_speak = 1 universal_understand = 1 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/simple_animal/hostile/hellhound.dm new file mode 100644 index 00000000000..8adc16dbd24 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/hellhound.dm @@ -0,0 +1,121 @@ +// Hellhound +/mob/living/simple_animal/hostile/hellhound + // Sprites by FoS: http://nanotrasen.se/phpBB3/memberlist.php?mode=viewprofile&u=386 + name = "Lesser Hellhound" + desc = "A horrifying, black canine monster, with glowing red eyes and vicious-looking teeth." + icon_state = "blackdog" + icon_living = "blackdog" + icon_dead = "blackdog_dead" + icon_resting = "blackdog_rest" + mutations = list(BREATHLESS) + gold_core_spawnable = CHEM_MOB_SPAWN_HOSTILE + 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 = 1 + stat_attack = 1 + attacktext = "savages" + attack_sound = 'sound/effects/bite.ogg' + speak_emote = list("growls") + see_in_dark = 9 + universal_understand = 1 + wander = 0 + 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 + var/datum/action/innate/demon/whisper/whisper_action + +/mob/living/simple_animal/hostile/hellhound/New() + . = ..() + whisper_action = new() + whisper_action.Grant(src) + +/mob/living/simple_animal/hostile/hellhound/handle_automated_action() + . = ..() + if(resting) + if(!wants_to_rest()) + custom_emote(1, "growls, and gets up.") + playsound(get_turf(src), 'sound/hallucinations/growl2.ogg', 50, 1) + icon_state = "[icon_living]" + resting = 0 + update_canmove() + else if(wants_to_rest()) + custom_emote(1, "lays down, and starts to lick their wounds.") + icon_state = "[icon_living]_rest" + resting = 1 + update_canmove() + +/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(resting) + if(bruteloss > 0 || fireloss > 0) + msgs += "It is currently licking its wounds, regenerating the damage to its body!" + else + msgs += "It is currently resting." + to_chat(usr,msgs.Join("
")) + +/mob/living/simple_animal/hostile/hellhound/Life(seconds, times_fired) + . = ..() + if(stat != DEAD && resting && (bruteloss > 0) || (fireloss > 0)) + 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(bruteloss > 0 || fireloss > 0) + return TRUE + return FALSE + +/mob/living/simple_animal/hostile/hellhound/AttackingTarget() + . = ..() + if(ishuman(target)) + special_aoe() + +/mob/living/simple_animal/hostile/hellhound/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, 0, loc) + smoke.start() + +/mob/living/simple_animal/hostile/hellhound/greater + name = "Greater Hellhound" + maxHealth = 400 + health = 400 + melee_damage_lower = 20 + melee_damage_upper = 30 + environment_smash = 2 + gold_core_spawnable = CHEM_MOB_SPAWN_INVALID + light_color = "#FF0000" + light_power = 6 + light_range = 2 diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 4ab40200dbb..d9a572c1a0e 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -242,6 +242,8 @@ name = "NT specops cybernetics implant" desc = "An extremely powerful cybernetic implant that contains combat and utility modules used by NT special forces." contents = newlist(/obj/item/gun/energy/pulse/pistol/m1911, /obj/item/door_remote/omni, /obj/item/melee/energy/blade/hardlight, /obj/item/reagent_containers/hypospray/combat/nanites, /obj/item/gun/medbeam, /obj/item/borg/stun, /obj/item/implanter/mindshield, /obj/item/flash/armimplant) + icon = 'icons/obj/guns/energy.dmi' + icon_state = "m1911" emp_proof = 1 /obj/item/organ/internal/cyberimp/arm/surgery diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index e725d44a541433f22caa6417ba39b27e9496d1d2..fffbccdcc32ea0c54c80b454ea8246107395a701 100644 GIT binary patch delta 11256 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