Tg port 2 15 (#230)
* defines/helpers * globalvars, onclick, controllers * datums and game * woooooooooorld. Uh. dm * modules sans mobs client admin * modules/admin * pref shit * modules/mob * icon updates * extra things * Cherrypicked fixes from open PRs * metastation.tgm fix * a better meta fix * reverts async breakings
This commit is contained in:
@@ -73,7 +73,7 @@
|
||||
if(alert)
|
||||
var/area/alarmed = get_area(src)
|
||||
alarmed.burglaralert(src)
|
||||
playsound(src, "sound/effects/alert.ogg", 50, 1)
|
||||
playsound(src, 'sound/effects/alert.ogg', 50, 1)
|
||||
|
||||
/*
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
|
||||
//Timeless prisons: Spawns in Wish Granter prisons in lavaland. Ghosts become age-old users of the Wish Granter and are advised to seek repentance for their past.
|
||||
/obj/effect/mob_spawn/human/exile
|
||||
@@ -113,7 +113,7 @@
|
||||
mob_species = species
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("\A [initial(species.id)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
notify_ghosts("\A [initial(species.id)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE)
|
||||
if(has_owner && creator)
|
||||
flavour_text = "You are a golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \
|
||||
Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost."
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
return
|
||||
if(user.pulling != L)
|
||||
return
|
||||
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 25, 1)
|
||||
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
|
||||
L.loc = src.loc
|
||||
L.emote("scream")
|
||||
|
||||
90
code/game/objects/structures/life_candle.dm
Normal file
90
code/game/objects/structures/life_candle.dm
Normal file
@@ -0,0 +1,90 @@
|
||||
/obj/structure/life_candle
|
||||
name = "life candle"
|
||||
desc = "You are dead. Insert quarter to continue."
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candle1"
|
||||
|
||||
var/icon_state_active = "candle1_lit"
|
||||
var/icon_state_inactive = "candle1"
|
||||
|
||||
anchored = TRUE
|
||||
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
|
||||
|
||||
var/lit_luminosity = 2
|
||||
var/list/datum/mind/linked_minds = list()
|
||||
|
||||
// If the body is destroyed, what do we spawn for them
|
||||
var/mob_type = /mob/living/carbon/human
|
||||
|
||||
// If the respawned person is given a specific outfit
|
||||
var/datum/outfit/outfit
|
||||
// How long until we respawn them after their death.
|
||||
var/respawn_time = 50
|
||||
var/respawn_sound = 'sound/magic/Staff_animation.ogg'
|
||||
|
||||
/obj/structure/life_candle/attack_hand(mob/user)
|
||||
if(!user.mind)
|
||||
return
|
||||
if(user.mind in linked_minds)
|
||||
user.visible_message("<span class='notice'>[user] reaches out and pinches the flame of [src].</span>", "<span class='warning'>You sever the connection between yourself and [src].</span>")
|
||||
linked_minds -= user.mind
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] touches [src]. It seems to respond to their presence!</span>", "<span class='warning'>You create a connection between you and [src].</span>")
|
||||
linked_minds |= user.mind
|
||||
|
||||
update_icon()
|
||||
float(linked_minds.len)
|
||||
if(linked_minds.len)
|
||||
START_PROCESSING(SSobj, src)
|
||||
SetLuminosity(lit_luminosity)
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
SetLuminosity(0)
|
||||
|
||||
/obj/structure/life_candle/update_icon()
|
||||
if(linked_minds.len)
|
||||
icon_state = icon_state_active
|
||||
else
|
||||
icon_state = icon_state_inactive
|
||||
|
||||
/obj/structure/life_candle/examine(mob/user)
|
||||
. = ..()
|
||||
if(linked_minds.len)
|
||||
user << "[src] is active, and linked to [linked_minds.len] souls."
|
||||
else
|
||||
user << "It is static, still, unmoving."
|
||||
|
||||
/obj/structure/life_candle/process()
|
||||
if(!linked_minds.len)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
for(var/m in linked_minds)
|
||||
var/datum/mind/mind = m
|
||||
if(!mind.current || (mind.current && mind.current.stat == DEAD))
|
||||
addtimer(CALLBACK(src, .proc/respawn, mind), respawn_time, TIMER_UNIQUE)
|
||||
|
||||
/obj/structure/life_candle/proc/respawn(datum/mind/mind)
|
||||
var/turf/T = get_turf(src)
|
||||
var/mob/living/body
|
||||
if(mind.current)
|
||||
if(mind.current.stat != DEAD)
|
||||
return
|
||||
else
|
||||
body = mind.current
|
||||
if(!body)
|
||||
body = new mob_type(T)
|
||||
var/mob/ghostie = mind.get_ghost(TRUE)
|
||||
if(ghostie.client && ghostie.client.prefs)
|
||||
ghostie.client.prefs.copy_to(body)
|
||||
mind.transfer_to(body)
|
||||
else
|
||||
body.forceMove(T)
|
||||
body.revive(1,1)
|
||||
mind.grab_ghost(TRUE)
|
||||
body.flash_act()
|
||||
|
||||
if(ishuman(body) && istype(outfit))
|
||||
outfit.equip(body)
|
||||
playsound(T, respawn_sound, 50, 1)
|
||||
Reference in New Issue
Block a user