mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-29 02:21:44 +00:00
## About The Pull Request also makes the paralyze on a mob exiting the statue work I guess the most plausible way to get this was by getting a wizard holopara animate the wizard with a staff after they flesh to stone themselves then jaunting when their petrifaction timer is about to expire. The solution does make the petrifaction drop you out of stuff like closets or cargo holds of mecha or something, but that doesn't really seem like a huge problem to me. ## Why It's Good For The Game Fixes #73062 makes code work lmao ## Changelog 🆑 fix: fixed petrified statues dropping victims into nullspace if they somehow ended up in a jaunt fix: mobs exiting petrification actually get paralyzed for 10 seconds now as intended /🆑
133 lines
5.2 KiB
Plaintext
133 lines
5.2 KiB
Plaintext
/obj/structure/statue/petrified
|
|
name = "statue"
|
|
desc = "An incredibly lifelike marble carving."
|
|
icon_state = "human_male"
|
|
density = TRUE
|
|
anchored = TRUE
|
|
max_integrity = 200
|
|
///Should we leave a brain behind when the statue is wrecked?
|
|
var/brain = TRUE
|
|
///Time left before the petrification ends and we let the mob free
|
|
var/timer = 48 SECONDS
|
|
///The mob that got medusa'd
|
|
var/mob/living/petrified_mob
|
|
|
|
/obj/structure/statue/petrified/relaymove()
|
|
return
|
|
|
|
/obj/structure/statue/petrified/Initialize(mapload, mob/living/living, statue_timer, save_brain)
|
|
. = ..()
|
|
if(statue_timer)
|
|
timer = statue_timer
|
|
if(save_brain)
|
|
brain = save_brain
|
|
if(!living)
|
|
return
|
|
petrified_mob = living
|
|
if(living.buckled)
|
|
living.buckled.unbuckle_mob(living, force = TRUE)
|
|
living.visible_message(span_warning("[living]'s skin rapidly turns to marble!"), span_userdanger("Your body freezes up! Can't... move... can't... think..."))
|
|
living.forceMove(src)
|
|
living.add_traits(list(TRAIT_GODMODE, TRAIT_MUTE, TRAIT_NOBLOOD), STATUE_MUTE)
|
|
living.faction |= FACTION_MIMIC //Stops mimics from instaqdeling people in statues
|
|
atom_integrity = living.health + 100 //stoning damaged mobs will result in easier to shatter statues
|
|
max_integrity = atom_integrity
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/structure/statue/petrified/process(seconds_per_tick)
|
|
if(!petrified_mob)
|
|
STOP_PROCESSING(SSobj, src)
|
|
timer -= seconds_per_tick
|
|
petrified_mob.Stun(4 SECONDS) //So they can't do anything while petrified
|
|
if(timer <= 0)
|
|
STOP_PROCESSING(SSobj, src)
|
|
qdel(src)
|
|
|
|
/obj/structure/statue/petrified/contents_explosion(severity, target)
|
|
return
|
|
|
|
/obj/structure/statue/petrified/Exited(atom/movable/gone, direction)
|
|
. = ..()
|
|
if(gone == petrified_mob)
|
|
petrified_mob.remove_traits(list(TRAIT_GODMODE, TRAIT_MUTE, TRAIT_NOBLOOD), STATUE_MUTE)
|
|
petrified_mob.Paralyze(10 SECONDS)
|
|
petrified_mob.take_overall_damage((petrified_mob.health - atom_integrity + 100)) //any new damage the statue incurred is transferred to the mob
|
|
petrified_mob.faction -= FACTION_MIMIC
|
|
petrified_mob = null
|
|
|
|
/obj/structure/statue/petrified/Destroy()
|
|
var/turf/dropoff_turf = drop_location()
|
|
if(istype(loc, /mob/living/basic/statue))
|
|
var/mob/living/basic/statue/statue_mob = loc
|
|
forceMove(dropoff_turf)
|
|
if(statue_mob.mind)
|
|
if(petrified_mob)
|
|
statue_mob.mind.transfer_to(petrified_mob)
|
|
to_chat(petrified_mob, span_notice("You slowly come back to your senses. You are in control of yourself again!"))
|
|
qdel(statue_mob)
|
|
|
|
for(var/obj/statue_contents in src)
|
|
statue_contents.forceMove(dropoff_turf)
|
|
|
|
petrified_mob?.forceMove(dropoff_turf)
|
|
return ..()
|
|
|
|
/obj/structure/statue/petrified/atom_deconstruct(disassembled = TRUE)
|
|
var/destruction_message = "[src] shatters!"
|
|
if(!disassembled)
|
|
if(petrified_mob)
|
|
petrified_mob.investigate_log("has been dusted by statue deconstruction.", INVESTIGATE_DEATHS)
|
|
if(iscarbon(petrified_mob) && brain)
|
|
var/mob/living/carbon/petrified_carbon = petrified_mob
|
|
var/obj/item/organ/brain/carbon_brain = petrified_carbon.get_organ_slot(ORGAN_SLOT_BRAIN)
|
|
carbon_brain.Remove(petrified_carbon)
|
|
carbon_brain.forceMove(get_turf(src))
|
|
carbon_brain.name = "petrified [carbon_brain.name]"
|
|
carbon_brain.desc = "[carbon_brain.desc] This one seems a bit more... smooth than a normal brain. Probably'd still work."
|
|
carbon_brain.add_atom_colour(list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)), FIXED_COLOUR_PRIORITY)
|
|
destruction_message = "[src] shatters, a solid brain tumbling out!"
|
|
petrified_mob.dust()
|
|
visible_message(span_danger(destruction_message))
|
|
|
|
/obj/structure/statue/petrified/animate_atom_living(mob/living/owner)
|
|
if(isnull(petrified_mob))
|
|
return ..()
|
|
var/mob/living/basic/statue/new_statue = new(drop_location())
|
|
new_statue.name = "statue of [petrified_mob.name]"
|
|
if(owner)
|
|
new_statue.befriend(owner)
|
|
new_statue.icon = 'icons/blanks/32x32.dmi'
|
|
new_statue.icon_state = "nothing"
|
|
new_statue.appearance_flags |= KEEP_TOGETHER
|
|
new_statue.copy_overlays(src, cut_old = TRUE)
|
|
new_statue.atom_colours = atom_colours.Copy()
|
|
new_statue.update_atom_colour()
|
|
petrified_mob.mind?.transfer_to(new_statue)
|
|
to_chat(new_statue, span_userdanger("You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! [owner ? "Do not harm [owner], your creator" : ""]."))
|
|
forceMove(new_statue)
|
|
|
|
|
|
/mob/proc/petrify(statue_timer)
|
|
return
|
|
|
|
/mob/living/carbon/human/petrify(statue_timer, save_brain, colorlist)
|
|
if(!isturf(loc))
|
|
return FALSE
|
|
var/obj/structure/statue/petrified/new_statue = new(loc, src, statue_timer, save_brain)
|
|
new_statue.name = "statue of [name]"
|
|
new_statue.icon = 'icons/blanks/32x32.dmi'
|
|
new_statue.icon_state = "nothing"
|
|
new_statue.appearance_flags |= KEEP_TOGETHER
|
|
new_statue.copy_overlays(src, cut_old = TRUE)
|
|
new_statue.add_atom_colour(colorlist || list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0)), FIXED_COLOUR_PRIORITY)
|
|
return TRUE
|
|
|
|
/mob/living/basic/pet/dog/corgi/petrify(statue_timer)
|
|
if(!isturf(loc))
|
|
return FALSE
|
|
var/obj/structure/statue/petrified/new_statue = new (loc, src, statue_timer)
|
|
new_statue.name = "statue of a corgi"
|
|
new_statue.icon_state = "corgi"
|
|
new_statue.desc = "If it takes forever, I will wait for you..."
|
|
return TRUE
|