diff --git a/code/game/gamemodes/changeling/helpers/_store.dm b/code/game/gamemodes/changeling/helpers/_store.dm
index 1ae8502bafe..e9f444f916d 100644
--- a/code/game/gamemodes/changeling/helpers/_store.dm
+++ b/code/game/gamemodes/changeling/helpers/_store.dm
@@ -255,9 +255,9 @@ var/list/datum/power/changeling/powerinstances = list()
/datum/power/changeling/horror_form
name = "Horror Form"
- desc = "We tear apart our human disguise, revealing our true form."
- helptext = "We will return to our current form after ten minutes. Death in our true form is permanent."
- genomecost = 15
+ desc = "We tear apart our human disguise, revealing our true and ultimate form."
+ helptext = "We will assume our ultimate form. This is irreversible. While we are in this state, we are extremely powerful."
+ genomecost = 10
verbpath = /mob/proc/horror_form
// Modularchangling, totally stolen from the new player panel. YAYY
diff --git a/code/game/gamemodes/changeling/implements/powers/body.dm b/code/game/gamemodes/changeling/implements/powers/body.dm
index f9243122703..8396c0c068d 100644
--- a/code/game/gamemodes/changeling/implements/powers/body.dm
+++ b/code/game/gamemodes/changeling/implements/powers/body.dm
@@ -453,10 +453,10 @@
/mob/proc/horror_form()
set category = "Changeling"
- set name = "Horror Form (40)"
+ set name = "Horror Form (50)"
set desc = "Tear apart your human disguise, revealing your true form."
- var/datum/changeling/changeling = changeling_power(40,0,0)
+ var/datum/changeling/changeling = changeling_power(50,0,0)
if(!changeling)
return FALSE
@@ -465,10 +465,10 @@
var/mob/living/carbon/human/M = src
- if(alert("Are we sure we wish to reveal ourselves? This will only revert after ten minutes.", , "Yes", "No") == "No") //Changelings have to confirm whether they want to go full horrorform
+ if(alert("Are we sure we wish to reveal ourselves and assume our ultimate form? This is irreversible, and we will not be able to revert to our disguised form.", , "Yes", "No") == "No") //Changelings have to confirm whether they want to go full horrorform
return
- changeling.use_charges(40)
+ changeling.use_charges(50)
M.visible_message("[M] writhes and contorts, their body expanding to inhuman proportions!", \
"We begin our transformation to our true form!")
@@ -510,19 +510,6 @@
M.forceMove(ling) //move inside the new dude to hide him.
ling.occupant = M
M.status_flags |= GODMODE //dont want him to die or breathe or do ANYTHING
- addtimer(CALLBACK(src, PROC_REF(revert_horror_form), ling), 10 MINUTES)
-
-/mob/proc/revert_horror_form(var/mob/living/ling)
- if(QDELETED(ling))
- return
- src.status_flags &= ~GODMODE //no more godmode.
- if(ling.mind)
- ling.mind.transfer_to(src)
- else
- src.key = ling.key
- playsound(get_turf(src),'sound/effects/blobattack.ogg',50,1)
- src.forceMove(get_turf(ling))
- qdel(ling)
// Chiropteran Screech
/mob/proc/resonant_shriek()
diff --git a/code/modules/mob/living/simple_animal/hostile/changeling.dm b/code/modules/mob/living/simple_animal/hostile/changeling.dm
index c11ee96728e..d5f254aad96 100644
--- a/code/modules/mob/living/simple_animal/hostile/changeling.dm
+++ b/code/modules/mob/living/simple_animal/hostile/changeling.dm
@@ -1,7 +1,8 @@
/mob/living/simple_animal/hostile/true_changeling
name = "shambling horror"
- desc = "A monstrous creature, made of twisted flesh and bone."
- speak_emote = list("gibbers")
+ desc = "An entity ripped from your nightmares. A monstrous creature, a warped parody of a living being. It is created from a twisted amalgamation of flesh and bone, covered in oozing sores, open wounds, and serrated knife-like blades of bone. A strong, sickening smell of rot, blood, and sickness emanates from it."
+ speak_emote = list("snarls")
+ emote_hear = list("gibbers")
icon = 'icons/mob/npc/animal.dmi'
icon_state = "abomination"
icon_living = "abomination"
@@ -15,33 +16,42 @@
tameable = FALSE
- organ_names = list("head", "chest", "tail", "leg")
- response_help = "pets"
+ organ_names = list("gaping maw", "misshapen head", "engorged abdomen", "bladed tail", "warped legs", "scythelike arm")
+ response_help = "pokes"
response_disarm = "shoves"
response_harm = "harmlessly punches"
- blood_amount = 600
- maxHealth = 750
- health = 750
+ blood_amount = 1000
+ maxHealth = 1250
+ health = 1250
harm_intent_damage = 0
melee_damage_lower = 30
- melee_damage_upper = 30
- resist_mod = 3
+ melee_damage_upper = 45
+ armor_penetration = 30
+ ranged = 1
+ projectiletype = /obj/item/projectile/bonedart/ling
+ projectilesound = 'sound/weapons/bloodyslice.ogg'
+ resist_mod = 15
mob_size = 25
environment_smash = 2
attacktext = "mangled"
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')
see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
minbodytemp = 0
maxbodytemp = 350
- min_oxy = 0
+ min_oxy = 5
max_co2 = 0
max_tox = 0
var/is_devouring = FALSE
var/mob/living/carbon/human/occupant = null
+ var/loud_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')
/mob/living/simple_animal/hostile/true_changeling/Initialize()
. = ..()
@@ -49,24 +59,27 @@
icon_state = "horror"
icon_living = "horror"
icon_dead = "horror_dead"
- else if(prob(25))
- icon_state = "horror_alt"
- icon_living = "horror_alt"
- icon_dead = "horror_alt_dead"
-/mob/living/simple_animal/hostile/true_changeling/Life()
- ..()
- adjustBruteLoss(-10) //it will slowly heal brute damage, making fire/laser a stronger option
+/mob/living/simple_animal/hostile/true_changeling/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override)
+ INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration)
/mob/living/simple_animal/hostile/true_changeling/mind_initialize()
..()
mind.assigned_role = "Changeling"
+
+/mob/living/simple_animal/hostile/true_changeling/Life()
+ if(prob(10))
+ custom_emote(VISIBLE_MESSAGE, pick( list("shrieks!","roars!", "screeches!", "snarls!", "bellows!", "screams!") ) )
+ var/sound = pick(loud_sounds)
+ playsound(src, sound, 90, 1, 15, usepressure = 0)
+
+
/mob/living/simple_animal/hostile/true_changeling/death(gibbed)
..()
if(!gibbed)
- visible_message("[src] lets out a waning scream as it falls, twitching, to the floor!")
- playsound(loc, 'sound/effects/creepyshriek.ogg', 30, 1)
+ visible_message("[src] lets out a waning scream as it disintegrates into a pile of flesh!")
+ playsound(loc, 'sound/effects/creatures/vannatusk_attack.ogg', 90, 1, 15)
if(occupant)
qdel(occupant)
gibs(src.loc)
@@ -75,7 +88,7 @@
/mob/living/simple_animal/hostile/true_changeling/verb/ling_devour(mob/living/target as mob in oview())
set category = "Changeling"
- set name = "Devour"
+ set name = "Devour (Heal)"
set desc = "Devours a creature, destroying its body and regenerating health."
if(!Adjacent(target))
@@ -124,26 +137,9 @@
src.is_devouring = FALSE
return
-/mob/living/simple_animal/hostile/true_changeling/verb/dart(mob/living/target as mob in oview())
- set name = "Launch Bone Dart"
- set desc = "Launches a Bone Dart at a target."
- set category = "Changeling"
-
- if(!health)
- to_chat(usr, "We are dead, we cannot use any abilities!")
- return
-
- if(last_special > world.time)
- return
-
- last_special = world.time + 30
-
- visible_message("\The [src]'s skin bulges and tears, launching a bone-dart at [target]!")
-
- playsound(src.loc, 'sound/weapons/bloodyslice.ogg', 50, 1)
- var/obj/item/bone_dart/A = new /obj/item/bone_dart(usr.loc)
- A.throw_at(target, 10, 20, usr)
- add_logs(src, target, "launched a bone dart at")
+/mob/living/simple_animal/hostile/true_changeling/attempt_grab(var/mob/living/grabber)
+ to_chat(grabber, SPAN_WARNING("\The [src] contorts and shifts away from you when you try to grab it!"))
+ return FALSE
/mob/living/simple_animal/hostile/lesser_changeling
name = "crawling horror"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 1cef88359b6..e4ea744a3ed 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -321,4 +321,10 @@
check_armor = "melee"
embed = TRUE
sharp = TRUE
- shrapnel_type = /obj/item/bone_dart/vannatusk
\ No newline at end of file
+ shrapnel_type = /obj/item/bone_dart/vannatusk
+
+/obj/item/projectile/bonedart/ling
+ name = "bone dart"
+ damage = 10
+ armor_penetration = 10
+ check_armor = "bullet"
\ No newline at end of file
diff --git a/html/changelogs/dansemacabre-horrorform.yml b/html/changelogs/dansemacabre-horrorform.yml
new file mode 100644
index 00000000000..561c21d5009
--- /dev/null
+++ b/html/changelogs/dansemacabre-horrorform.yml
@@ -0,0 +1,41 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: TheDanseMacabre
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - balance: "Changeling horror form has been reworked. It is now permanent, it does not passively regenerate health, cannot survive in a vacuum, and costs more chems to use the ability. In exchange, it has better stats across the board, and is marginally cheaper to purchase."