Files
John Willard 7b04440de1 Re-adds the Dragoon tomb ruin & Spear (#90781)
## About The Pull Request

It was removed in https://github.com/tgstation/tgstation/pull/27799
because the spear was broken and the Flans' AI sucked with not-great
sprites and was all just one big reference. Original addition:
https://github.com/tgstation/tgstation/pull/22270

This re-adds it, updates the map (now using airless turfs) with extra
ambiance, using ash whelps (lavaland variation of ice whelps) instead of
Flans, re-adds the spear, and adds armor as well this time around.

The spear gives you a jump ability to crash down upon a player below
you, rather than teleporting to wherever you throw the spear at. You
can't attack while mid-air, you can go through tables but not
walls/doors, and you also can't un-dualwield or drop the spear mid-jump.
Landing on a mob deals double damage to them (36 to unarmored people),
while landing on objects deals 150 damage to them (taken from savannah's
jump ability, which was in turn taken from hulk's punching)
It's also got some extra throw force (24 compared to default spear's 20)

The armor has basic security-level armor but covers your whole body.
Does not include space protection, and can be worn by Ian.

Video demonstration


https://github.com/user-attachments/assets/a77c3a0d-17d2-4e8d-88b6-cdbca8b1f2c3

New sprites demonstration

https://github.com/user-attachments/assets/0e465351-5484-406f-8adc-ffa1ac180daf

Armor demonstration

https://github.com/user-attachments/assets/abdfcac6-65bf-443c-bde2-27d157ee3a80

Map

![436285657-104a555f-60dc-46f0-8283-a92db2ca5352](https://github.com/user-attachments/assets/a1677c9a-7157-4562-9703-5ad44c923e8d)

With the changes in https://github.com/tgstation/tgstation/pull/90771 I
had to mess with ash whelp abilities a bit, I decided to make them use
cold fire instead of hardcoding blue color on top of the fire sprites,
and it now acts accordingly too


https://github.com/user-attachments/assets/cfca0d70-d13d-4c73-996d-2d4a7519866d

The jump was taken from Savannah Ivanov, and Goof's bunny jumping.

##### Code bounty by Ezel/Improvedname

## Why It's Good For The Game

This Re-implements a old spear that got removed for its buggyness/bad
mapping and on the authors request as well not wanting to deal with it.

Re-introduces the SkyBulge as a space ruin, referencing Dragoons from
Final Fantasy. this just like any normal spear, but using the savannah
jump mechanic, this allows you to close distances with the spear
avoiding ranged projectiles in the jump, and if you directly land on
your target you will do double the damage.

##### -Ezel/Improvedname

## Changelog

🆑 Ezel/Improvedname, Toriate, JohnFulpWillard
add: Re-added the Dragoon Tomb lair, now has a Skybulge spear and
Drachen armor.
balance: Ice whelps now spit out cold fire.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-05-30 11:36:38 +10:00

143 lines
4.7 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/following/Initialize(mapload, duration, obj/following)
. = ..()
if(isnull(following))
return INITIALIZE_HINT_QDEL
glide_size = following.glide_size
RegisterSignal(following, COMSIG_MOVABLE_MOVED, PROC_REF(follow))
///called when the thing we're following moves
/obj/effect/temp_visual/telegraphing/exclamation/following/proc/follow(datum/source)
SIGNAL_HANDLER
forceMove(get_turf(source))
/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"