mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 09:05:11 +01:00
f64bbf74df
## 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 /🆑
203 lines
7.9 KiB
Plaintext
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))
|