mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
Improve space map edges
This commit is contained in:
@@ -52,7 +52,6 @@ What is the naming convention for planes or layers?
|
||||
#define OVER_OPENSPACE_PLANE -57
|
||||
|
||||
// Turf Planes
|
||||
#define SPACE_PLANE -82 // Space turfs themselves
|
||||
#define PLATING_PLANE -44 // Plating
|
||||
#define DISPOSAL_LAYER 2.1 // Under objects, even when planeswapped
|
||||
#define PIPES_LAYER 2.2 // Under objects, even when planeswapped
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Turf-only flags.
|
||||
#define NOJAUNT 1 // This is used in literally one place, turf.dm, to block ethereal jaunt.
|
||||
|
||||
#define TRANSITIONEDGE 7 // Distance from edge to move to another z-level.
|
||||
#define TRANSITIONEDGE 1 // Distance from edge to move to another z-level.
|
||||
|
||||
// Invisibility constants. These should only be used for TRUE invisibility, AKA nothing living players touch
|
||||
#define INVISIBILITY_LIGHTING 20
|
||||
|
||||
@@ -4,12 +4,13 @@ SUBSYSTEM_DEF(skybox)
|
||||
name = "Space skybox"
|
||||
init_order = INIT_ORDER_SKYBOX
|
||||
flags = SS_NO_FIRE
|
||||
var/list/skybox_cache = list()
|
||||
var/static/list/skybox_cache = list()
|
||||
|
||||
var/list/dust_cache = list()
|
||||
var/list/speedspace_cache = list()
|
||||
var/list/phase_shift_by_x = list()
|
||||
var/list/phase_shift_by_y = list()
|
||||
var/static/list/dust_cache = list()
|
||||
var/static/list/speedspace_cache = list()
|
||||
var/static/list/mapedge_cache = list()
|
||||
var/static/list/phase_shift_by_x = list()
|
||||
var/static/list/phase_shift_by_y = list()
|
||||
|
||||
/datum/controller/subsystem/skybox/PreInit()
|
||||
//Static
|
||||
@@ -31,6 +32,29 @@ SUBSYSTEM_DEF(skybox)
|
||||
im.plane = DUST_PLANE
|
||||
im.blend_mode = BLEND_ADD
|
||||
speedspace_cache["EW_[i]"] = im
|
||||
//Over-the-edge images
|
||||
for (var/dir in alldirs)
|
||||
var/image/I = image('icons/turf/space.dmi', "white")
|
||||
var/matrix/M = matrix()
|
||||
var/horizontal = (dir & (WEST|EAST))
|
||||
var/vertical = (dir & (NORTH|SOUTH))
|
||||
M.Scale(horizontal ? 8 : 1, vertical ? 8 : 1)
|
||||
I.transform = M
|
||||
I.appearance_flags = KEEP_APART | TILE_BOUND
|
||||
I.plane = SPACE_PLANE
|
||||
I.layer = 0
|
||||
|
||||
if(dir & NORTH)
|
||||
I.pixel_y = 112
|
||||
else if(dir & SOUTH)
|
||||
I.pixel_y = -112
|
||||
|
||||
if(dir & EAST)
|
||||
I.pixel_x = 112
|
||||
else if(dir & WEST)
|
||||
I.pixel_x = -112
|
||||
|
||||
mapedge_cache["[dir]"] = I
|
||||
|
||||
//Shuffle some lists
|
||||
phase_shift_by_x = get_cross_shift_list(15)
|
||||
@@ -41,9 +65,6 @@ SUBSYSTEM_DEF(skybox)
|
||||
/datum/controller/subsystem/skybox/Initialize()
|
||||
. = ..()
|
||||
|
||||
/datum/controller/subsystem/skybox/Recover()
|
||||
skybox_cache = SSskybox.skybox_cache
|
||||
|
||||
/datum/controller/subsystem/skybox/proc/get_skybox(z)
|
||||
if(!skybox_cache["[z]"])
|
||||
skybox_cache["[z]"] = generate_skybox(z)
|
||||
|
||||
@@ -462,30 +462,33 @@
|
||||
|
||||
var/move_to_z = src.get_transit_zlevel()
|
||||
if(move_to_z)
|
||||
z = move_to_z
|
||||
var/new_z = move_to_z
|
||||
var/new_x
|
||||
var/new_y
|
||||
|
||||
if(x <= TRANSITIONEDGE)
|
||||
x = world.maxx - TRANSITIONEDGE - 2
|
||||
y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
||||
new_x = world.maxx - TRANSITIONEDGE - 2
|
||||
new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
||||
|
||||
else if (x >= (world.maxx - TRANSITIONEDGE + 1))
|
||||
x = TRANSITIONEDGE + 1
|
||||
y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
||||
new_x = TRANSITIONEDGE + 1
|
||||
new_y = rand(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 2)
|
||||
|
||||
else if (y <= TRANSITIONEDGE)
|
||||
y = world.maxy - TRANSITIONEDGE -2
|
||||
x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
||||
new_y = world.maxy - TRANSITIONEDGE -2
|
||||
new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
||||
|
||||
else if (y >= (world.maxy - TRANSITIONEDGE + 1))
|
||||
y = TRANSITIONEDGE + 1
|
||||
x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
||||
new_y = TRANSITIONEDGE + 1
|
||||
new_x = rand(TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 2)
|
||||
|
||||
if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
|
||||
var/datum/game_mode/nuclear/G = ticker.mode
|
||||
G.check_nuke_disks()
|
||||
|
||||
spawn(0)
|
||||
if(loc) loc.Entered(src)
|
||||
var/turf/T = locate(new_x, new_y, new_z)
|
||||
if(istype(T))
|
||||
forceMove(T)
|
||||
|
||||
//by default, transition randomly to another zlevel
|
||||
/atom/movable/proc/get_transit_zlevel()
|
||||
|
||||
@@ -9,21 +9,23 @@
|
||||
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
|
||||
can_build_into_floor = TRUE
|
||||
var/keep_sprite = FALSE
|
||||
var/edge = 0
|
||||
|
||||
/turf/space/Initialize()
|
||||
. = ..()
|
||||
|
||||
|
||||
if(!keep_sprite)
|
||||
icon_state = "white"
|
||||
|
||||
|
||||
if(config.starlight)
|
||||
update_starlight()
|
||||
|
||||
|
||||
build_overedge() //Spread out over the edge of the map if we're an edge
|
||||
toggle_transit() //Add static dust (not passing a dir)
|
||||
|
||||
/turf/space/proc/toggle_transit(var/direction)
|
||||
cut_overlays()
|
||||
|
||||
|
||||
if(!direction)
|
||||
add_overlay(SSskybox.dust_cache["[((x + y) ^ ~(x * y) + z) % 25]"])
|
||||
return
|
||||
@@ -36,7 +38,7 @@
|
||||
var/y_shift = SSskybox.phase_shift_by_y[src.y % (SSskybox.phase_shift_by_y.len - 1) + 1]
|
||||
var/transit_state = ((direction & WEST ? world.maxx - src.x : src.x) + y_shift)%15
|
||||
add_overlay(SSskybox.speedspace_cache["EW_[transit_state]"])
|
||||
|
||||
|
||||
for(var/atom/movable/AM in src)
|
||||
if (!AM.simulated)
|
||||
continue
|
||||
@@ -46,6 +48,22 @@
|
||||
else if (istype(AM, /obj/effect/decal))
|
||||
qdel(AM) //No more space blood coming with the shuttle
|
||||
|
||||
/turf/space/proc/build_overedge(var/forced_dirs)
|
||||
if(y == world.maxy || forced_dirs & NORTH)
|
||||
edge |= NORTH
|
||||
else if(y == 1 || forced_dirs & SOUTH)
|
||||
edge |= SOUTH
|
||||
|
||||
if(x == 1 || forced_dirs & WEST)
|
||||
edge |= WEST
|
||||
else if(x == world.maxx || forced_dirs & EAST)
|
||||
edge |= EAST
|
||||
|
||||
if(!edge)
|
||||
return
|
||||
|
||||
add_overlay(SSskybox.mapedge_cache["[edge]"], TRUE)
|
||||
|
||||
/turf/space/is_space()
|
||||
return 1
|
||||
|
||||
@@ -117,24 +135,16 @@
|
||||
// If that's changed, then you'll want to swipe the rest of the roofing code from code/game/turfs/simulated/floor_attackby.dm
|
||||
return
|
||||
|
||||
|
||||
// Ported from unstable r355
|
||||
|
||||
/turf/space/Entered(atom/movable/A as mob|obj)
|
||||
if(movement_disabled)
|
||||
to_chat(usr, "<span class='warning'>Movement is admin-disabled.</span>") //This is to identify lag problems
|
||||
return
|
||||
/turf/space/Entered(var/atom/movable/A)
|
||||
..()
|
||||
if ((!(A) || src != A.loc)) return
|
||||
|
||||
if (!A || src != A.loc)
|
||||
return
|
||||
|
||||
inertial_drift(A)
|
||||
|
||||
if(ticker && ticker.mode)
|
||||
|
||||
// Okay, so let's make it so that people can travel z levels but not nuke disks!
|
||||
// if(ticker.mode.name == "mercenary") return
|
||||
if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE + 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE + 1))
|
||||
A.touch_map_edge()
|
||||
if(edge && ticker?.mode)
|
||||
A.touch_map_edge()
|
||||
|
||||
/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj)
|
||||
var/cur_x
|
||||
|
||||
@@ -74,6 +74,12 @@
|
||||
global.using_map.contact_levels |= map_z
|
||||
global.using_map.map_levels |= map_z
|
||||
|
||||
/obj/effect/overmap/visitable/proc/get_space_zlevels()
|
||||
if(in_space)
|
||||
return map_z
|
||||
else
|
||||
return list()
|
||||
|
||||
//Helper for init.
|
||||
/obj/effect/overmap/visitable/proc/check_ownership(obj/object)
|
||||
if((object.z in map_z) && !(get_area(object) in SSshuttles.shuttle_areas))
|
||||
|
||||
@@ -96,10 +96,10 @@ proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A)
|
||||
break
|
||||
if(!TM)
|
||||
TM = get_deepspace(M.x,M.y)
|
||||
nz = pick(TM.map_z)
|
||||
nz = pick(TM.get_space_zlevels())
|
||||
|
||||
var/turf/dest = locate(nx,ny,nz)
|
||||
if(dest)
|
||||
if(istype(dest))
|
||||
A.forceMove(dest)
|
||||
if(ismob(A))
|
||||
var/mob/D = A
|
||||
@@ -110,5 +110,5 @@ proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A)
|
||||
var/obj/effect/overmap/visitable/sector/temporary/source = M
|
||||
if (source.can_die())
|
||||
testing("Caching [M] for future use")
|
||||
source.forceMove(null)
|
||||
source.loc = null
|
||||
cached_space += source
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
Reference in New Issue
Block a user