mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-21 12:16:44 +01:00
* Linter diagnostics + bans non-var relative pathing * Enable DreamChecker Annotations * make it executable * update hashFiles * oops * tries to fix it... again * trying again * path * repath * fix perms * fixes weird capitalisation issue
140 lines
3.6 KiB
Plaintext
140 lines
3.6 KiB
Plaintext
//Space stragglers go here
|
|
/obj/effect/overmap/visitable/sector/temporary
|
|
name = "Deep Space"
|
|
invisibility = 101
|
|
known = 0
|
|
in_space = TRUE
|
|
|
|
/obj/effect/overmap/visitable/sector/temporary/New(var/nx, var/ny)
|
|
loc = locate(nx, ny, global.using_map.overmap_z)
|
|
x = nx
|
|
y = ny
|
|
var/emptyz = global.using_map.get_empty_zlevel()
|
|
map_z += emptyz
|
|
map_sectors["[emptyz]"] = src
|
|
testing("Temporary sector at [x],[y] was created, corresponding zlevel is [emptyz].")
|
|
|
|
/obj/effect/overmap/visitable/sector/temporary/Destroy()
|
|
for(var/zlevel in map_z)
|
|
using_map.cache_empty_zlevel(zlevel)
|
|
testing("Temporary sector at [x],[y] was destroyed, returning empty zlevel [map_z[1]] to map datum.")
|
|
return ..()
|
|
|
|
/obj/effect/overmap/visitable/sector/temporary/proc/can_die(var/mob/observer)
|
|
testing("Checking if sector at [map_z[1]] can die.")
|
|
for(var/mob/M in global.player_list)
|
|
if(M != observer && (M.z in map_z))
|
|
testing("There are people on it.")
|
|
return 0
|
|
return 1
|
|
|
|
/obj/effect/overmap/visitable/sector/temporary/cleanup()
|
|
if(can_die())
|
|
qdel(src)
|
|
|
|
/proc/get_deepspace(x,y)
|
|
var/turf/unsimulated/map/overmap_turf = locate(x,y,global.using_map.overmap_z)
|
|
if(!istype(overmap_turf))
|
|
CRASH("Attempt to get deepspace at ([x],[y]) which is not on overmap: [overmap_turf]")
|
|
var/obj/effect/overmap/visitable/sector/temporary/res = locate() in overmap_turf
|
|
if(istype(res))
|
|
return res
|
|
return new /obj/effect/overmap/visitable/sector/temporary(x, y)
|
|
|
|
/atom/movable/proc/lost_in_space()
|
|
for(var/atom/movable/AM in contents)
|
|
if(!AM.lost_in_space())
|
|
return FALSE
|
|
if(has_buckled_mobs())
|
|
for(var/mob/M in buckled_mobs)
|
|
if(!M.lost_in_space())
|
|
return FALSE
|
|
|
|
return TRUE
|
|
|
|
/obj/item/device/uav/lost_in_space()
|
|
if(state == 1)
|
|
return FALSE
|
|
return ..()
|
|
|
|
/obj/machinery/power/supermatter/lost_in_space()
|
|
return FALSE
|
|
|
|
/obj/singularity/lost_in_space()
|
|
return FALSE
|
|
|
|
/obj/vehicle/lost_in_space()
|
|
if(load && !load.lost_in_space())
|
|
return FALSE
|
|
return ..()
|
|
|
|
/mob/lost_in_space()
|
|
return isnull(client)
|
|
|
|
/mob/living/carbon/human/lost_in_space()
|
|
return FALSE
|
|
// return isnull(client) && !key && stat == DEAD // Allows bodies that players have ghosted from to be deleted - Ater
|
|
|
|
/proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A)
|
|
if (!T || !A)
|
|
return
|
|
|
|
var/obj/effect/overmap/visitable/M = get_overmap_sector(T.z)
|
|
if (!M)
|
|
return
|
|
|
|
// Is the landmark still on the map.
|
|
if(!isturf(M.loc))
|
|
return
|
|
|
|
// Don't let AI eyes yeet themselves off the map
|
|
if(istype(A, /mob/observer/eye))
|
|
return
|
|
|
|
if(A.lost_in_space())
|
|
if(!QDELETED(A))
|
|
qdel(A)
|
|
return
|
|
|
|
var/nx = 1
|
|
var/ny = 1
|
|
var/nz = 1
|
|
|
|
if(T.x <= TRANSITIONEDGE)
|
|
nx = world.maxx - TRANSITIONEDGE - 2
|
|
ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
|
|
|
else if (A.x >= (world.maxx - TRANSITIONEDGE - 1))
|
|
nx = TRANSITIONEDGE + 2
|
|
ny = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
|
|
|
else if (T.y <= TRANSITIONEDGE)
|
|
ny = world.maxy - TRANSITIONEDGE -2
|
|
nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
|
|
|
else if (A.y >= (world.maxy - TRANSITIONEDGE - 1))
|
|
ny = TRANSITIONEDGE + 2
|
|
nx = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
|
|
|
testing("[A] spacemoving from [M] ([M.x], [M.y]).")
|
|
|
|
var/turf/map = locate(M.x,M.y,global.using_map.overmap_z)
|
|
var/obj/effect/overmap/visitable/TM
|
|
for(var/obj/effect/overmap/visitable/O in map)
|
|
if(O != M && O.in_space && prob(50))
|
|
TM = O
|
|
break
|
|
if(!TM)
|
|
TM = get_deepspace(M.x,M.y)
|
|
nz = pick(TM.get_space_zlevels())
|
|
|
|
var/turf/dest = locate(nx,ny,nz)
|
|
if(istype(dest))
|
|
A.forceMove(dest)
|
|
if(ismob(A))
|
|
var/mob/D = A
|
|
if(D.pulling)
|
|
D.pulling.forceMove(dest)
|
|
|
|
M.cleanup()
|