mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 12:37:26 +01:00
THE HACKS HURTS US PRECIOUS
This commit is contained in:
@@ -43,7 +43,15 @@
|
||||
#define SHUTTLE_ENDGAME 6
|
||||
|
||||
// Shuttle return values
|
||||
#define SHUTTLE_ALREADY_DOCKED 7
|
||||
#define SHUTTLE_CAN_DOCK "can_dock"
|
||||
#define SHUTTLE_NOT_A_DOCKING_PORT "not_a_docking_port"
|
||||
#define SHUTTLE_DWIDTH_TOO_LARGE "docking_width_too_large"
|
||||
#define SHUTTLE_WIDTH_TOO_LARGE "width_too_large"
|
||||
#define SHUTTLE_DHEIGHT_TOO_LARGE "docking_height_too_large"
|
||||
#define SHUTTLE_HEIGHT_TOO_LARGE "height_too_large"
|
||||
#define SHUTTLE_ALREADY_DOCKED "we_are_already_docked"
|
||||
#define SHUTTLE_SOMEONE_ELSE_DOCKED "someone_else_docked"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -21,10 +21,17 @@
|
||||
// A timid shuttle will not register itself with the shuttle subsystem
|
||||
// All shuttle templates are timid
|
||||
var/timid = FALSE
|
||||
var/JUSTDOIT = FALSE //ITS A HACKY VAR FOR THIS SHIT OKAY
|
||||
|
||||
//these objects are indestructable
|
||||
/obj/docking_port/Destroy()
|
||||
return QDEL_HINT_LETMELIVE
|
||||
if(JUSTDOIT)
|
||||
..()
|
||||
. = QDEL_HINT_HARDDEL_NOW
|
||||
JUSTDOIT = FALSE //THIS HURTS US PRECIOUS
|
||||
else
|
||||
|
||||
return QDEL_HINT_LETMELIVE
|
||||
|
||||
/obj/docking_port/singularity_pull()
|
||||
return
|
||||
@@ -239,10 +246,11 @@
|
||||
return 1
|
||||
|
||||
/obj/docking_port/mobile/Destroy()
|
||||
shuttle_master.mobile -= src
|
||||
areaInstance = null
|
||||
destination = null
|
||||
previous = null
|
||||
if(JUSTDOIT)
|
||||
shuttle_master.mobile -= src
|
||||
areaInstance = null
|
||||
destination = null
|
||||
previous = null
|
||||
. = ..()
|
||||
|
||||
//this is a hook for custom behaviour. Maybe at some point we could add checks to see if engines are intact
|
||||
@@ -252,37 +260,44 @@
|
||||
//this is to check if this shuttle can physically dock at dock S
|
||||
/obj/docking_port/mobile/proc/canDock(obj/docking_port/stationary/S)
|
||||
if(!istype(S))
|
||||
return 1
|
||||
return SHUTTLE_NOT_A_DOCKING_PORT
|
||||
if(istype(S, /obj/docking_port/stationary/transit))
|
||||
return 0
|
||||
return SHUTTLE_CAN_DOCK
|
||||
//check dock is big enough to contain us
|
||||
if(dwidth > S.dwidth)
|
||||
return 2
|
||||
return SHUTTLE_DWIDTH_TOO_LARGE
|
||||
if(width-dwidth > S.width-S.dwidth)
|
||||
return 3
|
||||
return SHUTTLE_WIDTH_TOO_LARGE
|
||||
if(dheight > S.dheight)
|
||||
return 4
|
||||
return SHUTTLE_DHEIGHT_TOO_LARGE
|
||||
if(height-dheight > S.height-S.dheight)
|
||||
return 5
|
||||
return SHUTTLE_HEIGHT_TOO_LARGE
|
||||
//check the dock isn't occupied
|
||||
// by someone other than us
|
||||
if(S.get_docked())
|
||||
return 6
|
||||
return 0
|
||||
return SHUTTLE_SOMEONE_ELSE_DOCKED
|
||||
return SHUTTLE_CAN_DOCK
|
||||
|
||||
/obj/docking_port/mobile/proc/check_dock(obj/docking_port/stationary/S)
|
||||
var/status = canDock(S)
|
||||
if(status == SHUTTLE_CAN_DOCK)
|
||||
return TRUE
|
||||
else if(status == SHUTTLE_ALREADY_DOCKED)
|
||||
// We're already docked there, don't need to do anything.
|
||||
// Triggering shuttle movement code in place is weird
|
||||
return FALSE
|
||||
else
|
||||
var/msg = "check_dock(): shuttle [src] cannot dock at [S], error: [status]"
|
||||
message_admins(msg)
|
||||
throw EXCEPTION(msg)
|
||||
return FALSE
|
||||
|
||||
|
||||
//call the shuttle to destination S
|
||||
/obj/docking_port/mobile/proc/request(obj/docking_port/stationary/S)
|
||||
var/status = canDock(S)
|
||||
if(status == SHUTTLE_ALREADY_DOCKED)
|
||||
// We're already docked there, don't need to do anything.
|
||||
|
||||
if(!check_dock(S))
|
||||
return
|
||||
else if(status)
|
||||
. = status
|
||||
spawn(0)
|
||||
var/msg = "request(): shuttle [src] cannot dock at [S], \
|
||||
error: [status]"
|
||||
message_admins(msg)
|
||||
throw EXCEPTION(msg)
|
||||
return status //we can't dock at S
|
||||
|
||||
switch(mode)
|
||||
if(SHUTTLE_CALL)
|
||||
@@ -349,6 +364,8 @@
|
||||
/obj/docking_port/mobile/proc/jumpToNullSpace()
|
||||
// Destroys the docking port and the shuttle contents.
|
||||
// Not in a fancy way, it just ceases.
|
||||
|
||||
JUSTDOIT = TRUE //GOD WHY WHY GOD
|
||||
var/obj/docking_port/stationary/S0 = get_docked()
|
||||
var/turf_type = /turf/space
|
||||
var/area_type = /area/space
|
||||
@@ -386,7 +403,6 @@
|
||||
T0.CalculateAdjacentTurfs()
|
||||
air_master.add_to_active(T0,1)
|
||||
|
||||
to_chat(usr, "[src] moved to nullspace")
|
||||
qdel(src)
|
||||
|
||||
//this is the main proc. It instantly moves our mobile port to stationary port S1
|
||||
@@ -394,16 +410,8 @@
|
||||
/obj/docking_port/mobile/proc/dock(obj/docking_port/stationary/S1, force=FALSE)
|
||||
// Crashing this ship with NO SURVIVORS
|
||||
if(!force)
|
||||
var/status = canDock(S1)
|
||||
if(status == 7)
|
||||
return SHUTTLE_ALREADY_DOCKED
|
||||
else if(status)
|
||||
spawn(0)
|
||||
var/msg = "dock(): shuttle [src] cannot dock at [S1], \
|
||||
error: [status]"
|
||||
message_admins(msg)
|
||||
throw EXCEPTION(msg)
|
||||
return status
|
||||
if(!check_dock(S1))
|
||||
return -1
|
||||
|
||||
if(canMove())
|
||||
return -1
|
||||
@@ -549,7 +557,7 @@
|
||||
|
||||
/obj/docking_port/mobile/proc/findTransitDock()
|
||||
var/obj/docking_port/stationary/transit/T = shuttle_master.getDock("[id]_transit")
|
||||
if(T && !canDock(T))
|
||||
if(T && check_dock(T))
|
||||
return T
|
||||
|
||||
|
||||
@@ -760,7 +768,7 @@
|
||||
for(var/obj/docking_port/stationary/S in shuttle_master.stationary)
|
||||
if(!options.Find(S.id))
|
||||
continue
|
||||
if(M.canDock(S))
|
||||
if(!M.check_dock(S))
|
||||
continue
|
||||
destination_found = 1
|
||||
dat += "<A href='?src=[UID()];move=[S.id]'>Send to [S.name]</A><br>"
|
||||
|
||||
@@ -216,8 +216,7 @@
|
||||
feedback_add_details("shuttle_manipulator", mdp.name)
|
||||
|
||||
|
||||
/obj/machinery/shuttle_manipulator/proc/action_load(
|
||||
datum/map_template/shuttle/loading_template)
|
||||
/obj/machinery/shuttle_manipulator/proc/action_load(datum/map_template/shuttle/loading_template)
|
||||
// Check for an existing preview
|
||||
if(preview_shuttle && (loading_template != preview_template))
|
||||
preview_shuttle.jumpToNullSpace()
|
||||
@@ -245,14 +244,14 @@
|
||||
WARNING(m)
|
||||
throw EXCEPTION(m)
|
||||
|
||||
existing_shuttle.jumpToNullSpace()
|
||||
|
||||
var/result = preview_shuttle.canDock(D)
|
||||
// truthy value means that it cannot dock for some reason
|
||||
// but we can ignore the someone else docked error because we'll
|
||||
// be moving into their place shortly
|
||||
if(result && (result != 6))
|
||||
if((result != SHUTTLE_CAN_DOCK) && (result != SHUTTLE_SOMEONE_ELSE_DOCKED))
|
||||
|
||||
var/m = "Unsuccessful dock of [preview_shuttle] ([result])."
|
||||
message_admins("[m]")
|
||||
WARNING(m)
|
||||
return
|
||||
|
||||
@@ -277,8 +276,7 @@
|
||||
|
||||
return preview_shuttle
|
||||
|
||||
/obj/machinery/shuttle_manipulator/proc/load_template(
|
||||
datum/map_template/shuttle/S)
|
||||
/obj/machinery/shuttle_manipulator/proc/load_template(datum/map_template/shuttle/S)
|
||||
// load shuttle template, centred at shuttle import landmark,
|
||||
var/turf/landmark_turf = get_turf(locate("landmark*Shuttle Import"))
|
||||
S.load(landmark_turf, centered = TRUE)
|
||||
@@ -327,4 +325,4 @@
|
||||
if(preview_shuttle)
|
||||
to_chat(usr, "unloading: [preview_shuttle]")
|
||||
preview_shuttle.jumpToNullSpace()
|
||||
preview_shuttle = null
|
||||
preview_shuttle = null
|
||||
|
||||
Reference in New Issue
Block a user