mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
108 lines
3.2 KiB
Plaintext
108 lines
3.2 KiB
Plaintext
//Dimension of overmap (squares 4 lyfe)
|
|
var/global/list/map_sectors = list()
|
|
|
|
/area/overmap
|
|
name = "System Map"
|
|
icon_state = "start"
|
|
requires_power = 0
|
|
base_turf = /turf/unsimulated/map
|
|
|
|
/turf/unsimulated/map
|
|
icon = 'icons/turf/space.dmi'
|
|
icon_state = "map"
|
|
alpha = 200
|
|
|
|
/turf/unsimulated/map/edge
|
|
opacity = 1
|
|
density = TRUE
|
|
alpha = 255
|
|
var/map_is_to_my
|
|
var/turf/unsimulated/map/edge/wrap_buddy
|
|
|
|
/turf/unsimulated/map/edge/Initialize()
|
|
..()
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/turf/unsimulated/map/edge/LateInitialize()
|
|
//This could be done by using the using_map.overmap_size much faster, HOWEVER, doing it programatically to 'find'
|
|
// the edges this way allows for 'sub overmaps' elsewhere and whatnot.
|
|
for(var/side in alldirs) //The order of this list is relevant: It should definitely break on finding a cardinal FIRST.
|
|
var/turf/T = get_step(src, side)
|
|
if(T?.type == /turf/unsimulated/map) //Not a wall, not something else, EXACTLY a flat map turf.
|
|
map_is_to_my = side
|
|
break
|
|
|
|
if(map_is_to_my)
|
|
var/turf/T = get_step(src, map_is_to_my) //Should be a normal map turf
|
|
while(istype(T, /turf/unsimulated/map))
|
|
T = get_step(T, map_is_to_my) //Could be a wall if the map is only 1 turf big
|
|
if(istype(T, /turf/unsimulated/map/edge))
|
|
wrap_buddy = T
|
|
break
|
|
|
|
/turf/unsimulated/map/edge/Destroy()
|
|
wrap_buddy = null
|
|
return ..()
|
|
|
|
/turf/unsimulated/map/edge/Bumped(var/atom/movable/AM)
|
|
if(wrap_buddy?.map_is_to_my)
|
|
AM.forceMove(get_step(wrap_buddy, wrap_buddy.map_is_to_my))
|
|
else
|
|
. = ..()
|
|
|
|
/turf/unsimulated/map/Initialize()
|
|
. = ..()
|
|
name = "[x]-[y]"
|
|
var/list/numbers = list()
|
|
|
|
if(x == 1 || x == global.using_map.overmap_size)
|
|
numbers += list("[round(y/10)]","[round(y%10)]")
|
|
if(y == 1 || y == global.using_map.overmap_size)
|
|
numbers += "-"
|
|
if(y == 1 || y == global.using_map.overmap_size)
|
|
numbers += list("[round(x/10)]","[round(x%10)]")
|
|
|
|
for(var/i = 1 to numbers.len)
|
|
var/image/I = image('icons/effects/numbers.dmi',numbers[i])
|
|
I.pixel_x = 5*i - 2
|
|
I.pixel_y = world.icon_size/2 - 3
|
|
if(y == 1)
|
|
I.pixel_y = 3
|
|
I.pixel_x = 5*i + 4
|
|
if(y == global.using_map.overmap_size)
|
|
I.pixel_y = world.icon_size - 9
|
|
I.pixel_x = 5*i + 4
|
|
if(x == 1)
|
|
I.pixel_x = 5*i - 2
|
|
if(x == global.using_map.overmap_size)
|
|
I.pixel_x = 5*i + 2
|
|
add_overlay(I)
|
|
AddElement(/datum/element/turf_z_transparency)
|
|
|
|
/turf/unsimulated/map/Entered(var/atom/movable/O, var/atom/oldloc)
|
|
..()
|
|
if(istype(O, /obj/effect/overmap/visitable/ship))
|
|
GLOB.overmap_event_handler.on_turf_entered(src, O, oldloc)
|
|
|
|
/turf/unsimulated/map/Exited(var/atom/movable/O, var/atom/newloc)
|
|
..()
|
|
if(istype(O, /obj/effect/overmap/visitable/ship))
|
|
GLOB.overmap_event_handler.on_turf_exited(src, O, newloc)
|
|
|
|
//list used to track which zlevels are being 'moved' by the proc below
|
|
var/list/moving_levels = list()
|
|
//Proc to 'move' stars in spess
|
|
//yes it looks ugly, but it should only fire when state actually change.
|
|
//null direction stops movement
|
|
/proc/toggle_move_stars(zlevel, direction)
|
|
if(!zlevel)
|
|
return
|
|
|
|
if (moving_levels["[zlevel]"] != direction)
|
|
moving_levels["[zlevel]"] = direction
|
|
|
|
var/list/spaceturfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel))
|
|
for(var/turf/space/T in spaceturfs)
|
|
T.toggle_transit(direction)
|
|
CHECK_TICK
|