mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2026-08-18 18:26:35 +01:00
In total: - Adds span defines for `reallybig hypnophrase`, `big warning`, `header` - Fixes a missing apostrophe for hypno stare - Makes a special exception for cuddling.dm, which uses an irregular span - Puts the spans file back
147 lines
6.2 KiB
Plaintext
147 lines
6.2 KiB
Plaintext
/obj/structure/statue/boney //wow thanks so much, it's almost like no one would ever make bone statues
|
|
name = "statue of an ashwalker"
|
|
icon = 'modular_splurt/icons/obj/structures/statue.dmi'
|
|
icon_state = "ashie"
|
|
max_integrity = 300
|
|
desc = "This is a suprisingly-well done statue made out of bone."
|
|
impressiveness = 10
|
|
custom_materials = list(/datum/material/bone = MINERAL_MATERIAL_AMOUNT*5)
|
|
abstract_type = /obj/structure/statue/bone
|
|
|
|
/obj/structure/statue/boney/ashwalker
|
|
icon_state = "bone"
|
|
desc = "A statue honoring Owia-Akeshi, a brave ashwalker that perished while defending the nest from a wild ash drake. May his soul rest in peace."
|
|
impressiveness = 25
|
|
|
|
/obj/structure/statue/gargoyle
|
|
name = "statue"
|
|
desc = "An incredibly intricate statue, which... almost seems alive!"
|
|
icon = 'modular_splurt/icons/obj/structures/statue.dmi'
|
|
icon_state = "gargoyle" //empty sprite because it's supposed to copy over the overlays anyway, and otherwise, you end up with a white human male underlay beneath the statue.
|
|
density = TRUE
|
|
anchored = TRUE
|
|
flags_1 = PREVENT_CONTENTS_EXPLOSION_1
|
|
max_integrity = 200
|
|
var/mob/living/petrified_mob
|
|
var/old_max_health
|
|
var/old_size
|
|
var/was_tilted
|
|
var/was_lying
|
|
var/was_lying_prev
|
|
var/deconstructed = FALSE
|
|
|
|
/obj/structure/statue/gargoyle/Initialize(mapload, mob/living/L)
|
|
. = ..()
|
|
if(L)
|
|
petrified_mob = L
|
|
if(L.buckled)
|
|
L.buckled.unbuckle_mob(L,force=1)
|
|
L.visible_message(span_warning("[L]'s skin rapidly turns to stone!"), span_warning("Your skin abruptly hardens as you turn to stone once more!"))
|
|
dir = L.dir
|
|
transform = L.transform
|
|
pixel_x = L.pixel_x
|
|
pixel_y = L.pixel_y
|
|
layer = L.layer
|
|
was_tilted = L.is_tilted
|
|
was_lying = L.lying
|
|
was_lying_prev = L.lying_prev
|
|
L.forceMove(src)
|
|
ADD_TRAIT(L, TRAIT_MUTE, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_NOBREATH, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_NOHUNGER, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_NOTHIRST, STATUE_TRAIT)
|
|
ADD_TRAIT(L, TRAIT_NOFIRE, STATUE_TRAIT) //OH GOD HELP I'M ON FIRE INSIDE THE STATUE I CAN'T MOVE AND I CAN'T STOP IT HAAAAALP - person who experienced this
|
|
L.click_intercept = src
|
|
L.faction += "mimic" //Stops mimics from instaqdeling people in statues
|
|
L.status_flags |= GODMODE
|
|
old_max_health = L.maxHealth
|
|
old_size = get_size(L)
|
|
obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
|
max_integrity = obj_integrity
|
|
|
|
/obj/structure/statue/gargoyle/proc/InterceptClickOn(mob/living/caller, params, atom/A) //technically could be bypassed by doing something that also uses click intercept but shrug
|
|
var/atom/movable/screen/movable/action_button/ab = A
|
|
if (istype(ab))
|
|
if (istype(ab.linked_action, /datum/action/gargoyle))
|
|
return FALSE
|
|
var/list/modifiers = params2list(params)
|
|
if (modifiers["shift"] && !modifiers["ctrl"] && !modifiers["middle"])
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/obj/structure/statue/gargoyle/examine_more(mob/user) //something about the funny signals doesn't work here no matter how much I fucked around with it (ie registering to COMSIG_PARENT_EXAMINE_MORE doesn't do anything), so we have to overwrite the proc
|
|
. = ..()
|
|
if (petrified_mob)
|
|
SEND_SIGNAL(petrified_mob, COMSIG_PARENT_EXAMINE, user, .)
|
|
. -= span_notice("<i>You examine [src] closer, but find nothing of interest...</i>")
|
|
|
|
/obj/structure/statue/gargoyle/handle_atom_del(atom/A)
|
|
if(A == petrified_mob)
|
|
petrified_mob = null
|
|
|
|
/obj/structure/statue/gargoyle/Destroy()
|
|
if(petrified_mob)
|
|
petrified_mob.status_flags &= ~GODMODE
|
|
petrified_mob.forceMove(loc)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_MUTE, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOMOVE, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOPICKUP, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_MOBILITY_NOUSE, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_NOBREATH, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_NOHUNGER, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_NOTHIRST, STATUE_TRAIT)
|
|
REMOVE_TRAIT(petrified_mob, TRAIT_NOFIRE, STATUE_TRAIT)
|
|
petrified_mob.faction -= "mimic"
|
|
petrified_mob.click_intercept = null
|
|
petrified_mob.dir = dir
|
|
petrified_mob.update_size(old_size)
|
|
var/damage = deconstructed ? petrified_mob.health : petrified_mob.health*(old_max_health/petrified_mob.maxHealth) - obj_integrity + 100
|
|
petrified_mob.take_overall_damage(damage) //any new damage the statue incurred is transfered to the mob
|
|
petrified_mob.transform = transform
|
|
petrified_mob.lying = was_lying
|
|
petrified_mob.lying_prev = was_lying_prev
|
|
petrified_mob.update_mobility()
|
|
petrified_mob.pixel_x = pixel_x
|
|
petrified_mob.pixel_y = pixel_y
|
|
petrified_mob.layer = layer
|
|
petrified_mob.is_shifted = TRUE //just prevents bad things tbh
|
|
petrified_mob.is_tilted = was_tilted
|
|
if (pulledby && pulledby.pulling == src) //gotta checked just in case
|
|
pulledby.start_pulling(petrified_mob, supress_message = TRUE)
|
|
var/datum/quirk/gargoyle/T = locate() in petrified_mob.roundstart_quirks
|
|
if (T)
|
|
T.transformed = 0
|
|
petrified_mob = null
|
|
return ..()
|
|
|
|
/obj/structure/statue/gargoyle/deconstruct(disassembled = TRUE)
|
|
deconstructed = TRUE
|
|
visible_message(span_danger("[src] shatters!"))
|
|
qdel(src)
|
|
|
|
/obj/structure/statue/gargoyle/attackby(obj/item/W, mob/living/user, params)
|
|
add_fingerprint(user)
|
|
if(!(flags_1 & NODECONSTRUCT_1))
|
|
if(default_unfasten_wrench(user, W))
|
|
return
|
|
if(W.tool_behaviour == TOOL_WELDER)
|
|
if(!W.tool_start_check(user, amount=0))
|
|
return FALSE
|
|
|
|
if (petrified_mob && alert(user, "You are slicing apart a gargoyle! Are you sure you want to continue? This will severely harm them, if not outright kill them.",, "Continue", "Cancel") == "Cancel")
|
|
return
|
|
|
|
user.visible_message(span_notice("[user] is slicing apart the [name]."), \
|
|
span_notice("You are slicing apart the [name]..."))
|
|
if (petrified_mob)
|
|
to_chat(petrified_mob, span_userdanger("You are being sliced apart by [user]!"))
|
|
if(W.use_tool(src, user, 40, volume=50))
|
|
user.visible_message(span_notice("[user] slices apart the [name]."), \
|
|
span_notice("You slice apart the [name]!"))
|
|
deconstruct(TRUE)
|
|
return
|
|
return ..()
|