diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 9b70cb9117..a2c60618ac 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -435,11 +435,13 @@ GLOBAL_LIST_EMPTY(the_station_areas) GLOB.the_gateway.awaygate = new_gate GLOB.the_gateway.wait = world.time -/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override) +/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override) UNTIL(initialized && !clearing_reserved_turfs) var/datum/turf_reservation/reserve = new type if(turf_type_override) reserve.turf_type = turf_type_override + if(border_type_override) + reserve.borderturf = border_type_override if(!z) for(var/i in levels_by_trait(ZTRAIT_RESERVED)) if(reserve.Reserve(width, height, i)) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 8402a0150e..e2e7c3d327 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -443,17 +443,22 @@ SUBSYSTEM_DEF(shuttle) */ var/transit_path = /turf/open/space/transit + var/border_path = /turf/open/space/transit/border switch(travel_dir) if(NORTH) transit_path = /turf/open/space/transit/north + border_path = /turf/open/space/transit/border/north if(SOUTH) transit_path = /turf/open/space/transit/south + border_path = /turf/open/space/transit/border/south if(EAST) transit_path = /turf/open/space/transit/east + border_path = /turf/open/space/transit/border/east if(WEST) transit_path = /turf/open/space/transit/west + border_path = /turf/open/space/transit/border/west - var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path) + var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path, border_path) if(!istype(proposal)) return FALSE diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 8416684e73..0cc262d5a5 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -26,12 +26,37 @@ /turf/open/space/transit/east dir = EAST +/turf/open/space/transit/border + opacity = TRUE + +/turf/open/space/transit/border/south + dir = SOUTH + +/turf/open/space/transit/border/north + dir = NORTH + +/turf/open/space/transit/border/west + dir = WEST + +/turf/open/space/transit/border/east + dir = EAST + /turf/open/space/transit/Entered(atom/movable/AM, atom/OldLoc) ..() - if(!locate(/obj/structure/lattice) in src) + if(!locate(/obj/structure/lattice) in src && !SSshuttle.is_in_shuttle_bounds(src)) throw_atom(AM) /turf/open/space/transit/proc/throw_atom(atom/movable/AM) + if(!AM || istype(AM, /obj/docking_port)) + return + if(AM.loc != src) + return + if(AM.throwing) + return + var/turf/T = get_ranged_target_turf(src, turn(dir, 180), 10) + AM.safe_throw_at(T, 10, 1, null, FALSE) + +/turf/open/space/transit/border/throw_atom(atom/movable/AM) set waitfor = FALSE if(!AM || istype(AM, /obj/docking_port)) return diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm index f1b3b1ccdc..eee6a7e1cd 100644 --- a/code/modules/mapping/space_management/space_reservation.dm +++ b/code/modules/mapping/space_management/space_reservation.dm @@ -9,9 +9,11 @@ var/top_right_coords[3] var/wipe_reservation_on_release = TRUE var/turf_type = /turf/open/space + var/borderturf /datum/turf_reservation/transit turf_type = /turf/open/space/transit + borderturf = /turf/open/space/transit/border /datum/turf_reservation/proc/Release() var/v = reserved_turfs.Copy() @@ -60,7 +62,10 @@ T.flags_1 &= ~UNUSED_RESERVATION_TURF_1 SSmapping.unused_turfs["[T.z]"] -= T SSmapping.used_turfs[T] = src - T.ChangeTurf(turf_type, turf_type) + if(borderturf && (T.x == BL.x || T.x == TR.x || T.y == BL.y || T.y == TR.y)) + T.ChangeTurf(borderturf, borderturf) + else + T.ChangeTurf(turf_type, turf_type) src.width = width src.height = height return TRUE