Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ports a few Dropship PRs #154

Merged
merged 3 commits into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions code/__DEFINES/dropships.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@
#define DROPSHIP_MIN_AUTO_DELAY 10 SECONDS
#define DROPSHIP_AUTO_RETRY_COOLDOWN 20 SECONDS
#define DROPSHIP_MEDEVAC_COOLDOWN 20 SECONDS

//Hatches states
#define SHUTTLE_DOOR_BROKEN -1
#define SHUTTLE_DOOR_UNLOCKED 0
#define SHUTTLE_DOOR_LOCKED 1
2 changes: 1 addition & 1 deletion code/game/machinery/door_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
if(is_mainship_level(z)) // on the almayer
return

shuttle.control_doors("lock", "all", force=FALSE)
shuttle.control_doors("force-lock", "all", force=FALSE)

/obj/structure/machinery/door_control/proc/handle_door()
for(var/obj/structure/machinery/door/airlock/D in range(range))
Expand Down
12 changes: 6 additions & 6 deletions code/game/machinery/doors/airlock_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -123,15 +123,15 @@
radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)


/obj/structure/machinery/door/airlock/open(surpress_send)
/obj/structure/machinery/door/airlock/open(forced)
. = ..()
if(!surpress_send) send_status()
if(!forced)
send_status()


/obj/structure/machinery/door/airlock/close(surpress_send)
/obj/structure/machinery/door/airlock/close(forced)
. = ..()
if(!surpress_send) send_status()

if(!forced)
send_status()

/obj/structure/machinery/door/airlock/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/door.dm
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@
flick("door_deny", src)
return

/obj/structure/machinery/door/proc/open(forced=0)
/obj/structure/machinery/door/proc/open(forced)
if(!density)
return TRUE
if(operating || !loc)
Expand Down
78 changes: 73 additions & 5 deletions code/game/machinery/doors/multi_tile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -241,10 +241,42 @@
no_panel = 1
not_weldable = 1
var/queen_pryable = TRUE
var/obj/docking_port/mobile/marine_dropship/linked_dropship

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ex_act(severity)
return

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/attackby(obj/item/item, mob/user)
if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL))
var/direction
switch(id)
if("starboard_door")
direction = "starboard"
if("port_door")
direction = "port"
if("aft_door")
direction = "aft"
if(!linked_dropship || !linked_dropship.door_control.door_controllers[direction])
return ..()
var/datum/door_controller/single/control = linked_dropship.door_control.door_controllers[direction]
if (control.status != SHUTTLE_DOOR_BROKEN)
return ..()
if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
to_chat(user, SPAN_WARNING("You don't seem to understand how to restore a remote connection to [src]."))
return
if(user.action_busy)
return

to_chat(user, SPAN_WARNING("You begin to restore the remote connection to [src]."))
if(!do_after(user, 5 SECONDS, INTERRUPT_ALL, BUSY_ICON_BUILD))
to_chat(user, SPAN_WARNING("You fail to restore a remote connection to [src]."))
return
unlock(TRUE)
close(FALSE)
control.status = SHUTTLE_DOOR_UNLOCKED
to_chat(user, SPAN_WARNING("You successfully restored the remote connection to [src]."))
return
..()

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/unlock()
if(is_reserved_level(z))
Expand All @@ -258,13 +290,32 @@
if(!queen_pryable)
return ..()

if(!locked)
return ..()

to_chat(xeno, SPAN_NOTICE("You try and force the doors open"))
if(xeno.action_busy)
return

var/direction
switch(id)
if("starboard_door")
direction = "starboard"
if("port_door")
direction = "port"
if("aft_door")
direction = "aft"
var/datum/door_controller/single/control
if(linked_dropship && linked_dropship.door_control.door_controllers[direction])
control = linked_dropship.door_control.door_controllers[direction]

if(control && control.status == SHUTTLE_DOOR_BROKEN)
to_chat(xeno, SPAN_NOTICE("The door is already disabled."))
return

to_chat(xeno, SPAN_WARNING("You try and force the doors open!"))
if(do_after(xeno, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE))
if(control)
control.status = SHUTTLE_DOOR_BROKEN
unlock(TRUE)
open(1)
open(TRUE)
lock(TRUE)

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds1
Expand All @@ -275,6 +326,23 @@
name = "\improper Normandy cargo door"
icon = 'icons/obj/structures/doors/dropship2_cargo.dmi'

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside
width = 2

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1
name = "\improper Alamo crew hatch"
icon = 'icons/obj/structures/doors/dropship1_side2.dmi'

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds1/midway
name = "\improper Midway crew hatch"

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2
name = "\improper Normandy crew hatch"
icon = 'icons/obj/structures/doors/dropship2_side2.dmi'

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2/cyclone
name = "\improper Cyclone crew hatch"

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/upp
name = "\improper Akademia Nauk cargo door"
icon = 'icons/obj/structures/doors/dropshipupp_cargo.dmi'
Expand Down Expand Up @@ -329,7 +397,7 @@
continue
INVOKE_ASYNC(atom_movable, TYPE_PROC_REF(/atom/movable, throw_atom), projected, 1, SPEED_FAST, null, FALSE)

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override)
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/lifeboat/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
. = ..()
if(istype(port, /obj/docking_port/mobile/crashable/lifeboat))
var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = port
Expand Down
2 changes: 1 addition & 1 deletion code/modules/shuttle/computers/escape_pod_computer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
.["docking_status"] = STATE_LAUNCHED
var/obj/structure/machinery/door/door = shuttle.door_handler.doors[1]
.["door_state"] = door.density
.["door_lock"] = shuttle.door_handler.is_locked
.["door_lock"] = shuttle.door_handler.status == SHUTTLE_DOOR_LOCKED
.["can_delay"] = TRUE//launch_status[2]
.["launch_without_evac"] = launch_without_evac

Expand Down
28 changes: 17 additions & 11 deletions code/modules/shuttle/helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
if(!door_controllers[direction])
var/datum/door_controller/single/new_controller = new()
new_controller.label = label
new_controller.is_locked = FALSE
new_controller.status = SHUTTLE_DOOR_UNLOCKED
door_controllers[direction] = new_controller

var/datum/door_controller/single/controller = door_controllers[direction]
Expand All @@ -29,12 +29,12 @@
if(direction == "all")
for(var/i in door_controllers)
var/datum/door_controller/single/control = door_controllers[i]
if(!control.is_locked)
if(control.status != SHUTTLE_DOOR_LOCKED)
return FALSE
return TRUE
if(door_controllers[direction])
var/datum/door_controller/single/single_controller = door_controllers[direction]
return single_controller.is_locked
return single_controller.status == SHUTTLE_DOOR_LOCKED
else
WARNING("Direction [direction] does not exist.")
return FALSE
Expand All @@ -60,9 +60,9 @@

for(var/direction in door_controllers)
var/datum/door_controller/single/controller = door_controllers[direction]
var/list/door_data = list("id" = direction, "value" = controller.is_locked)
var/list/door_data = list("id" = direction, "value" = controller.status)
. += list(door_data)
if(!controller.is_locked)
if(controller.status == SHUTTLE_DOOR_UNLOCKED)
all_locked = FALSE

var/list/door_data = list("id" = "all", "value" = all_locked)
Expand All @@ -74,7 +74,7 @@
/datum/door_controller/single
var/label = "dropship"
var/list/doors = list()
var/is_locked = FALSE
var/status = SHUTTLE_DOOR_UNLOCKED

/datum/door_controller/single/Destroy(force, ...)
. = ..()
Expand All @@ -93,23 +93,29 @@
if("close")
INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, close))
if("force-lock")
if (status == SHUTTLE_DOOR_BROKEN)
continue
INVOKE_ASYNC(src, PROC_REF(lockdown_door), door)
is_locked = TRUE
status = SHUTTLE_DOOR_LOCKED
if("lock")
INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, lock))
is_locked = TRUE
if (status != SHUTTLE_DOOR_BROKEN)
status = SHUTTLE_DOOR_LOCKED
if("unlock")
INVOKE_ASYNC(door, TYPE_PROC_REF(/obj/structure/machinery/door/airlock, unlock))
is_locked = FALSE
if (status != SHUTTLE_DOOR_BROKEN)
status = SHUTTLE_DOOR_UNLOCKED
if("force-lock-launch")
if(asynchronous)
INVOKE_ASYNC(src, PROC_REF(lockdown_door_launch), door)
else
lockdown_door_launch(door)
is_locked = TRUE
if (status != SHUTTLE_DOOR_BROKEN)
status = SHUTTLE_DOOR_LOCKED
if("force-unlock")
INVOKE_ASYNC(src, PROC_REF(force_lock_open_door), door)
is_locked = FALSE
if (status != SHUTTLE_DOOR_BROKEN)
status = SHUTTLE_DOOR_UNLOCKED
else
CRASH("Unknown door command [action]")

Expand Down
3 changes: 3 additions & 0 deletions code/modules/shuttle/shuttles/dropship.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@
door_control.add_door(air, "port")
if("aft_door")
door_control.add_door(air, "aft")
var/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/hatch = air
if(istype(hatch))
hatch.linked_dropship = src

/obj/docking_port/mobile/marine_dropship/Destroy(force)
. = ..()
Expand Down
Binary file added icons/obj/structures/doors/dropship1_side2.dmi
Binary file not shown.
Binary file added icons/obj/structures/doors/dropship2_side2.dmi
Binary file not shown.
44 changes: 35 additions & 9 deletions maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -27970,6 +27970,16 @@
icon_state = "plate"
},
/area/lv522/atmos/cargo_intake)
"lgw" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 4;
id = "UD6 East";
indestructible = 1
},
/turf/open/shuttle/dropship{
icon_state = "rasputin3"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
"lgR" = (
/obj/structure/largecrate/random/secure,
/turf/open/floor/plating,
Expand Down Expand Up @@ -41284,6 +41294,20 @@
icon_state = "platingdmg3"
},
/area/lv522/indoors/a_block/dorms)
"qjy" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 4;
id = "UD6 East";
indestructible = 1
},
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
dir = 1;
name = "\improper Tornado crew hatch"
},
/turf/open/shuttle/dropship{
icon_state = "rasputin3"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
"qjC" = (
/obj/item/stack/rods,
/turf/open/floor/prison,
Expand Down Expand Up @@ -42172,8 +42196,9 @@
/turf/open/floor/wood,
/area/lv522/indoors/a_block/fitness/glass)
"qzp" = (
/obj/structure/machinery/door/airlock/dropship_hatch/two{
dir = 8
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
dir = 1;
name = "\improper Typhoon crew hatch"
},
/turf/open/shuttle/dropship{
icon_state = "rasputin3"
Expand Down Expand Up @@ -62477,8 +62502,9 @@
},
/area/lv522/outdoors/colony_streets/north_street)
"xRM" = (
/obj/structure/machinery/door/airlock/dropship_hatch/two{
dir = 8
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds2{
dir = 1;
name = "\improper Tornado crew hatch"
},
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 4;
Expand Down Expand Up @@ -66220,7 +66246,7 @@ pRK
qmM
qGQ
qTh
qzp
rjP
qzp
nfq
fDg
Expand Down Expand Up @@ -67582,7 +67608,7 @@ pUc
qst
qLz
qVl
qzp
rjP
qzp
rFp
sdE
Expand Down Expand Up @@ -103011,7 +103037,7 @@ sCp
toY
uwQ
wzg
xRM
lgw
xRM
bpZ
wRL
Expand Down Expand Up @@ -104373,8 +104399,8 @@ tcu
tSo
vjv
wCr
xRM
xRM
lgw
qjy
fXn
uSB
ecP
Expand Down
Loading
Loading