Improve space map edges

This commit is contained in:
Aronai Sieyes
2020-04-02 01:07:38 -04:00
parent 896c2bf6b8
commit 09003a6c61
8 changed files with 82 additions and 43 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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

View File

@@ -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))

View File

@@ -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