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 e725d44a541..fffbccdcc32 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/paradise.dme b/paradise.dme index ad5d486914b..726317a6dc0 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1847,6 +1847,7 @@ #include "code\modules\mob\living\simple_animal\hostile\floorcluwne.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\headcrab.dm" +#include "code\modules\mob\living\simple_animal\hostile\hellhound.dm" #include "code\modules\mob\living\simple_animal\hostile\hivebot.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm"