mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-16 13:13:03 +00:00
Makes the spawner object itself block air and prevent active edges before the game starts, so you can actually use these in maps now without creating tons of active edge warnings and making ZAS zones merge everywhere. Should save a loooot of time for mappers picking those window directions.
102 lines
3.1 KiB
Plaintext
102 lines
3.1 KiB
Plaintext
// Ported from Haine and WrongEnd with much gratitude!
|
|
/* ._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._. */
|
|
/*-=-=-=-=-=-=-=-=-=-=-=-=-=WHAT-EVER=-=-=-=-=-=-=-=-=-=-=-=-=-*/
|
|
/* '~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~'-._.-'~' */
|
|
|
|
/obj/effect/wingrille_spawn
|
|
name = "window grille spawner"
|
|
icon = 'icons/obj/structures.dmi'
|
|
icon_state = "wingrille"
|
|
density = 1
|
|
anchored = 1.0
|
|
pressure_resistance = 4*ONE_ATMOSPHERE
|
|
var/win_path = /obj/structure/window/basic
|
|
var/activated
|
|
|
|
/obj/effect/wingrille_spawn/attack_hand()
|
|
attack_generic()
|
|
|
|
/obj/effect/wingrille_spawn/attack_ghost()
|
|
attack_generic()
|
|
|
|
/obj/effect/wingrille_spawn/attack_generic()
|
|
activate()
|
|
|
|
/obj/effect/wingrille_spawn/CanPass(atom/movable/mover, turf/target, height=1.5, air_group = 0)
|
|
return FALSE
|
|
|
|
/obj/effect/wingrille_spawn/initialize()
|
|
..()
|
|
if(!win_path)
|
|
return
|
|
if(ticker && ticker.current_state < GAME_STATE_PLAYING)
|
|
activate()
|
|
|
|
/obj/effect/wingrille_spawn/proc/activate()
|
|
if(activated) return
|
|
if (!locate(/obj/structure/grille) in get_turf(src))
|
|
var/obj/structure/grille/G = PoolOrNew(/obj/structure/grille, src.loc)
|
|
handle_grille_spawn(G)
|
|
var/list/neighbours = list()
|
|
for (var/dir in cardinal)
|
|
var/turf/T = get_step(src, dir)
|
|
var/obj/effect/wingrille_spawn/other = locate(/obj/effect/wingrille_spawn) in T
|
|
if(!other)
|
|
var/found_connection
|
|
if(locate(/obj/structure/grille) in T)
|
|
for(var/obj/structure/window/W in T)
|
|
if(W.type == win_path && W.dir == get_dir(T,src))
|
|
found_connection = 1
|
|
qdel(W)
|
|
if(!found_connection)
|
|
var/obj/structure/window/new_win = PoolOrNew(win_path, src.loc)
|
|
new_win.set_dir(dir)
|
|
handle_window_spawn(new_win)
|
|
else
|
|
neighbours |= other
|
|
activated = 1
|
|
for(var/obj/effect/wingrille_spawn/other in neighbours)
|
|
if(!other.activated) other.activate()
|
|
qdel(src)
|
|
|
|
/obj/effect/wingrille_spawn/proc/handle_window_spawn(var/obj/structure/window/W)
|
|
return
|
|
|
|
// Currently unused, could be useful for pre-wired electrified windows.
|
|
/obj/effect/wingrille_spawn/proc/handle_grille_spawn(var/obj/structure/grille/G)
|
|
return
|
|
|
|
/obj/effect/wingrille_spawn/reinforced
|
|
name = "reinforced window grille spawner"
|
|
icon_state = "r-wingrille"
|
|
win_path = /obj/structure/window/reinforced
|
|
|
|
/obj/effect/wingrille_spawn/reinforced/crescent
|
|
name = "Crescent window grille spawner"
|
|
icon_state = "r-wingrille"
|
|
win_path = /obj/structure/window/reinforced
|
|
|
|
/obj/effect/wingrille_spawn/reinforced/crescent/handle_window_spawn(var/obj/structure/window/W)
|
|
W.maxhealth = 1000000
|
|
W.health = 1000000
|
|
|
|
/obj/effect/wingrille_spawn/phoron
|
|
name = "phoron window grille spawner"
|
|
icon_state = "p-wingrille"
|
|
win_path = /obj/structure/window/phoronbasic
|
|
|
|
/obj/effect/wingrille_spawn/reinforced_phoron
|
|
name = "reinforced phoron window grille spawner"
|
|
icon_state = "pr-wingrille"
|
|
win_path = /obj/structure/window/phoronreinforced
|
|
|
|
/obj/effect/wingrille_spawn/reinforced/polarized
|
|
name = "polarized window grille spawner"
|
|
color = "#444444"
|
|
win_path = /obj/structure/window/reinforced/polarized
|
|
var/id
|
|
|
|
/obj/effect/wingrille_spawn/reinforced/polarized/handle_window_spawn(var/obj/structure/window/reinforced/polarized/P)
|
|
if(id)
|
|
P.id = id
|