Files
LePiromano f64bbf74df slight nerfs to Jimmy W. Campbell's "The Thing" (©2025) (#89527)
## About The Pull Request
tweaks some stats of The Thing as a boss to make it slightly more
bearable to fight specially for people with higher ping.
more specifically increasing some of the telegraphs' time and reducing
some wound chances, also halved the charge's knockdown time (1s to 0.5s)

also (i think) fixed an issue where the spike walls that the thing
summons destroy items on the floor (sucks ass to have your pkcrusher
destroyed)
## Why It's Good For The Game

the thing is one of if not the most fun megafauna added so far, as it's
the first basic mob boss, but it's a bit hard to keep up with specially
if you're a high ping player, the boss itself is also not in a
depressurized enviroment so i think it's justified to make it a bit
easier to dodge since some of the healing items miners have only work in
low pressure
## Changelog
🆑
balance: nerfed Icebox's "The Thing" boss
fix: fixed "The Thing" 's spike walls destroying items on the floor when
summoned
/🆑
2025-03-12 16:35:29 -04:00

203 lines
7.9 KiB
Plaintext

/datum/action/cooldown/mob_cooldown/the_thing
shared_cooldown = MOB_SHARED_COOLDOWN_3
/// in what phases of The Thing bossfight is this available
var/list/available_in_phases = list(1,2,3)
/datum/action/cooldown/mob_cooldown/the_thing/IsAvailable(feedback)
var/mob/living/basic/boss/thing/the_thing = owner
if(!istype(the_thing))
return ..()
return ..() && (the_thing.phase in available_in_phases)
//decimate
/datum/action/cooldown/mob_cooldown/the_thing/decimate
name = "Decimate"
desc = "Create spikes in a radius."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
click_to_activate = FALSE
cooldown_time = 10 SECONDS
/datum/action/cooldown/mob_cooldown/the_thing/decimate/Activate(atom/caster)
if(HAS_TRAIT_FROM(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
. = ..()
ADD_TRAIT(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT)
caster.Shake(1.4, 0.8, 0.3 SECONDS)
caster.visible_message(span_danger("[caster] shakes violently!"))
for(var/turf/open/target in RANGE_TURFS(2, caster) - caster.loc)
new /obj/effect/temp_visual/telegraphing/exclamation/animated(target, 1.5 SECONDS)
addtimer(CALLBACK(src, PROC_REF(make_spikes), caster), 1.5 SECONDS)
/datum/action/cooldown/mob_cooldown/the_thing/decimate/proc/make_spikes(atom/caster)
REMOVE_TRAIT(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT)
for(var/turf/open/target in RANGE_TURFS(2, caster))
if(locate(/obj/structure/thing_boss_spike) in target)
continue
new /obj/structure/thing_boss_spike(target)
// charge
/datum/action/cooldown/mob_cooldown/charge/the_thing
shared_cooldown = NONE
charge_damage = 35
charge_past = 3
/datum/action/cooldown/mob_cooldown/charge/the_thing/charge_sequence(atom/movable/charger, atom/target_atom, delay, past)
if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
var/mob/living/basic/boss/thing/the_thing = owner
var/charge_count = the_thing.phase != 3 ? 1 : 2
for(var/i in 1 to charge_count)
do_charge(owner, target_atom, charge_delay * i, charge_past)
/datum/action/cooldown/mob_cooldown/charge/the_thing/do_charge_indicator(atom/charger, atom/charge_target)
var/turf/target_turf = get_turf(charge_target)
if(!target_turf)
return
new /obj/effect/temp_visual/telegraphing/exclamation/animated(target_turf)
var/obj/effect/temp_visual/decoy/decoy = new /obj/effect/temp_visual/decoy(charger.loc, charger)
animate(decoy, alpha = 0, color = COLOR_RED, transform = matrix()*2, time = 3)
/datum/action/cooldown/mob_cooldown/charge/the_thing/hit_target(atom/movable/source, mob/living/target, damage_dealt)
target.visible_message(span_danger("[source] lunges into [target]!"), span_userdanger("[source] knocks you into the ground, slashing you in the process!"))
target.apply_damage(damage_dealt, BRUTE)
target.Knockdown(0.5 SECONDS)
playsound(get_turf(target), 'sound/items/weapons/rapierhit.ogg', 100, TRUE)
shake_camera(target, 4, 3)
// square tendrils
/datum/action/cooldown/mob_cooldown/the_thing/big_tendrils
name = "Square Tendrils"
desc = "Create spikes in a square around the target."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
cooldown_time = 5 SECONDS
available_in_phases = list(2,3)
/datum/action/cooldown/mob_cooldown/the_thing/big_tendrils/Activate(atom/target)
if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
. = ..()
target = get_turf(target)
var/mob/living/living_owner = owner
var/delay = 1 SECONDS
if((living_owner.health <= living_owner.maxHealth/3) ? 2 : 1)
delay += 1 SECONDS
new /obj/effect/temp_visual/telegraphing/big(target, delay)
else
new /obj/effect/temp_visual/telegraphing/exclamation/animated(target)
addtimer(CALLBACK(src, PROC_REF(make_spikes), target), delay)
/datum/action/cooldown/mob_cooldown/the_thing/big_tendrils/proc/make_spikes(atom/epicenter)
var/mob/living/living_owner = owner
var/radius = living_owner.health <= living_owner.maxHealth/3 ? 2 : 1
for(var/turf/open/target in RANGE_TURFS(radius, epicenter))
if(locate(/obj/structure/thing_boss_spike) in target)
continue
new /obj/effect/temp_visual/mook_dust(target)
new /obj/structure/thing_boss_spike(target)
// shriek
/datum/action/cooldown/mob_cooldown/the_thing/shriek
name = "Shriek"
desc = "Confuse in a radius."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
click_to_activate = FALSE
cooldown_time = 10 SECONDS
shared_cooldown = NONE
available_in_phases = list(2,3)
/datum/action/cooldown/mob_cooldown/the_thing/shriek/Activate(atom/caster)
if(HAS_TRAIT_FROM(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
. = ..()
ADD_TRAIT(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT)
caster.visible_message(span_danger("[caster][caster.p_s()] flesh starts becoming filled with holes!"))
for(var/turf/open/target in RANGE_TURFS(2, caster))
new /obj/effect/temp_visual/telegraphing/exclamation(target, 1.2 SECONDS)
addtimer(CALLBACK(src, PROC_REF(shriek), owner), 1.2 SECONDS)
/datum/action/cooldown/mob_cooldown/the_thing/shriek/proc/shriek(atom/caster)
REMOVE_TRAIT(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT)
caster.visible_message(span_danger("[caster] shrieks! The sheer frequency of the sound makes your skin hurt and you feel like your brain is on fire!"))
SEND_SOUND(caster, sound('sound/effects/screech.ogg'))
for(var/mob/living/target in range(2, caster))
if(target == owner)
continue
target.set_confusion_if_lower(5 SECONDS)
target.set_jitter_if_lower(5 SECONDS)
var/mob/living/carbon/carbon_target = target
if(istype(carbon_target))
carbon_target.drop_all_held_items()
SEND_SOUND(target, sound('sound/effects/screech.ogg'))
// card. tendrils
/datum/action/cooldown/mob_cooldown/the_thing/cardinal_tendrils
name = "Cardinal Tendrils"
desc = "Create tendrils in all cardinal directions."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
cooldown_time = 10 SECONDS
available_in_phases = list(2,3)
click_to_activate = FALSE
/// range of tendril
var/range = 9
/datum/action/cooldown/mob_cooldown/the_thing/cardinal_tendrils/Activate(atom/targetted_turf)
if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
. = ..()
targetted_turf = get_turf(targetted_turf)
owner.Shake(1.4, 0.8, 0.3 SECONDS)
owner.visible_message(span_danger("[owner] shakes violently!"))
var/list/turf/target_turfs = find_turfs(targetted_turf)
for(var/turf/open/target in target_turfs)
new /obj/effect/temp_visual/telegraphing/exclamation/animated(target, 1.5 SECONDS)
addtimer(CALLBACK(src, PROC_REF(make_spikes), target_turfs, owner), 1.5 SECONDS)
/datum/action/cooldown/mob_cooldown/the_thing/cardinal_tendrils/proc/find_turfs(atom/caster)
. = list()
for(var/direction in GLOB.cardinals)
for(var/turf/potential_turf as anything in get_line(caster, get_ranged_target_turf(caster, direction, range)))
if(potential_turf.density)
break
. += potential_turf
/datum/action/cooldown/mob_cooldown/the_thing/cardinal_tendrils/proc/make_spikes(list/target_turfs, atom/caster)
REMOVE_TRAIT(caster, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT)
for(var/turf/open/target as anything in target_turfs)
if(locate(/obj/structure/thing_boss_spike) in target)
continue
new /obj/effect/temp_visual/mook_dust(target)
new /obj/structure/thing_boss_spike(target)
// acid
/datum/action/cooldown/mob_cooldown/the_thing/acid_spit
name = "Acid Shower"
desc = "Spit patches of acid in a radius around you."
button_icon = 'icons/obj/weapons/stabby.dmi'
button_icon_state = "huntingknife"
cooldown_time = 10 SECONDS
click_to_activate = FALSE
available_in_phases = list(3)
/datum/action/cooldown/mob_cooldown/the_thing/acid_spit/Activate(atom/target)
if(HAS_TRAIT_FROM(owner, TRAIT_IMMOBILIZED, MEGAFAUNA_TRAIT))
return
. = ..()
var/turf/owner_turf = get_turf(owner)
owner.visible_message(span_danger("[owner] spits acid!"))
var/list/potential = RANGE_TURFS(4, owner_turf)
for(var/i = 1 to rand(2,4))
new /obj/effect/temp_visual/incoming_thing_acid(pick(potential))