From 411fa0f101b628393fa9fe30925b1b7eeea06cd1 Mon Sep 17 00:00:00 2001 From: TheDanseMacabre <57339900+TheDanseMacabre@users.noreply.github.com> Date: Sun, 19 Mar 2023 07:42:51 -0400 Subject: [PATCH] Major Changeling Tweaks (#15993) * wadawd * Revert "revert" This reverts commit 55e480dd85f6283dd38b0272ba05b7146a3fb6a5. * w * w * w * a * w * you can no longer grab The Thing --------- Co-authored-by: DanseMacabre --- .../gamemodes/changeling/helpers/_store.dm | 6 +- .../changeling/implements/powers/body.dm | 21 +---- .../simple_animal/hostile/changeling.dm | 76 +++++++++---------- .../modules/projectiles/projectile/special.dm | 8 +- html/changelogs/dansemacabre-horrorform.yml | 41 ++++++++++ 5 files changed, 91 insertions(+), 61 deletions(-) create mode 100644 html/changelogs/dansemacabre-horrorform.yml 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."