Files
Bubberstation/code/modules/mob/living/basic/boss/thing/thing_objects.dm
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

131 lines
4.3 KiB
Plaintext

/obj/structure/thing_boss_spike
name = "blades"
desc = "A sharp flurry of blades that have erupted from the ground."
icon_state = "thingspike"
density = FALSE //so ai considers it
anchored = TRUE
max_integrity = 1 // 1 hit
/// time before we fall apart
var/expiry_time = 10 SECONDS
/obj/structure/thing_boss_spike/Initialize(mapload)
. = ..()
var/turf/our_turf = get_turf(src)
#ifndef UNIT_TESTS //just in case
new /obj/effect/temp_visual/mook_dust(loc)
#endif
var/hit_someone = FALSE
for(var/atom/movable/potential_target as anything in our_turf)
if (ismegafauna(potential_target) || potential_target == src)
continue
var/mob/living/living_victim = potential_target
if(isliving(living_victim))
hit_someone = TRUE
living_victim.apply_damage(40, damagetype = BRUTE, sharpness = SHARP_POINTY, wound_bonus = -10)
else if(potential_target.uses_integrity && !(potential_target.resistance_flags & INDESTRUCTIBLE) && initial(potential_target.density) && !HAS_TRAIT(potential_target, TRAIT_UNDERFLOOR))
potential_target.take_damage(100, BRUTE)
if (hit_someone)
expiry_time /= 2
playsound(src, 'sound/items/weapons/slice.ogg', vol = 50, vary = TRUE, pressure_affected = FALSE)
else
playsound(src, 'sound/misc/splort.ogg', vol = 25, vary = TRUE, pressure_affected = FALSE)
QDEL_IN(src, expiry_time)
/obj/structure/thing_boss_spike/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
if(damage_amount)
playsound(src, 'sound/effects/blob/blobattack.ogg', 50, TRUE)
else
playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE)
/obj/structure/thing_boss_spike/CanAllowThrough(atom/movable/mover, border_dir)
. = ..()
if(!istype(mover, /mob/living/basic/boss/thing))
return FALSE
/obj/structure/thing_boss_spike/CanAStarPass(to_dir, datum/can_pass_info/pass_info)
if(!istype(pass_info.requester_ref?.resolve(), /mob/living/basic/boss/thing))
return FALSE
return ..()
/obj/effect/temp_visual/telegraphing/exclamation
icon = 'icons/mob/telegraphing/telegraph.dmi'
icon_state = "exclamation"
duration = 1 SECONDS
/obj/effect/temp_visual/telegraphing/exclamation/Initialize(mapload, duration)
if(!isnull(duration))
src.duration = duration
return ..()
/obj/effect/temp_visual/telegraphing/exclamation/animated
alpha = 0
/obj/effect/temp_visual/telegraphing/exclamation/animated/Initialize(mapload)
. = ..()
transform = matrix()*2
animate(src, alpha = 255, transform = matrix(), time = duration/3)
/obj/effect/temp_visual/telegraphing/big
icon = 'icons/mob/telegraphing/telegraph_96x96.dmi'
icon_state = "target_largebox"
pixel_x = -32
pixel_y = -32
color = COLOR_RED
duration = 2 SECONDS
/obj/effect/temp_visual/incoming_thing_acid
icon = 'icons/obj/weapons/guns/projectiles.dmi'
icon_state = "toxin"
name = "acid"
desc = "Get out of the way!"
layer = FLY_LAYER
plane = ABOVE_GAME_PLANE
randomdir = FALSE
duration = 0.9 SECONDS
pixel_z = 270
/obj/effect/temp_visual/incoming_thing_acid/Initialize(mapload)
. = ..()
animate(src, pixel_z = 0, time = duration)
addtimer(CALLBACK(src, PROC_REF(make_acid)), 0.85 SECONDS)
/obj/effect/temp_visual/incoming_thing_acid/proc/make_acid()
for(var/turf/open/open in RANGE_TURFS(1, loc))
new /obj/effect/thing_acid(open)
/obj/effect/thing_acid
name = "stomach acid"
icon = 'icons/effects/acid.dmi'
icon_state = "default"
layer = BELOW_MOB_LAYER
plane = GAME_PLANE
anchored = TRUE
/// how long does the acid exist for
var/duration_time = 5 SECONDS
/obj/effect/thing_acid/Initialize(mapload)
. = ..()
var/static/list/loc_connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
)
AddElement(/datum/element/connect_loc, loc_connections)
QDEL_IN(src, duration_time)
/obj/effect/thing_acid/proc/on_entered(datum/source, mob/living/victim)
SIGNAL_HANDLER
if(!istype(victim) || ismegafauna(victim))
return
for(var/zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
var/blocked = victim.run_armor_check(zone, ACID)
victim.apply_damage(25, BURN, def_zone = zone, blocked = blocked)
to_chat(victim, span_userdanger("You are burnt by the acid!"))
playsound(victim, 'sound/effects/wounds/sizzle1.ogg', vol = 50, vary = TRUE)
qdel(src)
/obj/item/keycard/thing_boss
name = "Storage Room 2 Keycard"
desc = "A fancy keycard for storage room 2."
color = COLOR_PALE_GREEN
puzzle_id = "thingbosslootroom"