diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 9d9f703d70c..47df198e5b8 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -164,7 +164,7 @@
"adh" = (/obj/structure/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 0; pixel_y = 0},/obj/item/clothing/head/helmet/alt,/obj/item/clothing/suit/armor/bulletproof{pixel_x = 0; pixel_y = 0},/obj/item/clothing/head/helmet/alt,/obj/item/clothing/suit/armor/bulletproof{pixel_x = 0; pixel_y = 0},/obj/item/clothing/head/helmet/alt,/turf/simulated/floor/plasteel{dir = 8; icon_state = "vault"; tag = "icon-vault (WEST)"},/area/security/securearmoury)
"adi" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/effect/decal/warning_stripes/northeast,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/securearmoury)
"adj" = (/obj/item/device/radio/intercom/department/security{pixel_x = -28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos)
-"adk" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hos,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/carpet,/area/security/hos)
+"adk" = (/obj/structure/table/woodentable,/obj/item/weapon/stamp/hos,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/item/device/spacepod_key{id = 100000},/turf/simulated/floor/carpet,/area/security/hos)
"adl" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/carpet,/area/security/hos)
"adm" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/sop_security,/obj/item/weapon/book/manual/sop_legal,/turf/simulated/floor/carpet,/area/security/hos)
"adn" = (/obj/machinery/door_control{id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -28; pixel_y = -3; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/hos)
@@ -314,7 +314,7 @@
"agb" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/securehallway)
"agc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/securehallway)
"agd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall,/area/security/podbay)
-"age" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table/reinforced,/obj/item/clothing/suit/jacket/pilot,/obj/item/clothing/head/beret/sec,/obj/machinery/light_switch{pixel_x = -25},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay)
+"age" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/table/reinforced,/obj/item/clothing/suit/jacket/pilot,/obj/item/clothing/head/beret/sec,/obj/machinery/light_switch{pixel_x = -25},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/item/device/spacepod_key{id = 100000},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay)
"agf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay)
"agg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay)
"agh" = (/obj/structure/closet/secure_closet/security,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Security Podbay APC"; pixel_x = 25},/obj/item/device/spacepod_equipment/weaponry/laser,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/podbay)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 8de2f1baf60..dedcd52164a 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -206,7 +206,8 @@
/obj/item/clothing/shoes/magboots,
/obj/item/areaeditor/blueprints,
/obj/item/clothing/head/helmet/space,
- /obj/item/weapon/storage/internal
+ /obj/item/weapon/storage/internal,
+ /obj/item/device/spacepod_key
)
// These items will NOT be preserved
var/list/do_not_preserve_items = list (
diff --git a/code/game/vehicles/spacepods/equipment.dm b/code/game/vehicles/spacepods/equipment.dm
index 734216657ce..91588fa0a8b 100644
--- a/code/game/vehicles/spacepods/equipment.dm
+++ b/code/game/vehicles/spacepods/equipment.dm
@@ -49,6 +49,7 @@
var/obj/item/device/spacepod_equipment/weaponry/weapon_system // weapons system
var/obj/item/device/spacepod_equipment/misc/misc_system // misc system
var/obj/item/device/spacepod_equipment/cargo/cargo_system // cargo system
+ var/obj/item/device/spacepod_equipment/lock/lock_system // lock system
//var/obj/item/device/spacepod_equipment/engine/engine_system // engine system
//var/obj/item/device/spacepod_equipment/shield/shield_system // shielding system
@@ -69,7 +70,7 @@
/obj/item/device/spacepod_equipment/weaponry
name = "pod weapon"
desc = "You shouldn't be seeing this"
- icon = 'icons/goonstation/pods/ship.dmi'
+ icon = 'icons/vehicles/spacepod.dmi'
icon_state = "blank"
var/projectile_type
var/shot_cost = 0
@@ -80,7 +81,7 @@
/obj/item/device/spacepod_equipment/weaponry/taser
name = "disabler system"
desc = "A weak taser system for space pods, fires disabler beams."
- icon_state = "pod_taser"
+ icon_state = "weapon_taser"
projectile_type = "/obj/item/projectile/beam/disabler"
shot_cost = 400
fire_sound = "sound/weapons/Taser.ogg"
@@ -88,7 +89,7 @@
/obj/item/device/spacepod_equipment/weaponry/burst_taser
name = "burst taser system"
desc = "A weak taser system for space pods, this one fires 3 at a time."
- icon_state = "pod_b_taser"
+ icon_state = "weapon_burst_taser"
projectile_type = "/obj/item/projectile/beam/disabler"
shot_cost = 1200
shots_per = 3
@@ -98,7 +99,7 @@
/obj/item/device/spacepod_equipment/weaponry/laser
name = "laser system"
desc = "A weak laser system for space pods, fires concentrated bursts of energy"
- icon_state = "pod_w_laser"
+ icon_state = "weapon_laser"
projectile_type = "/obj/item/projectile/beam"
shot_cost = 600
fire_sound = 'sound/weapons/Laser.ogg'
@@ -107,6 +108,7 @@
/obj/item/device/spacepod_equipment/weaponry/mining_laser_basic
name = "weak mining laser system"
desc = "A weak mining laser system for space pods, fires bursts of energy that cut through rock"
+ icon = 'icons/goonstation/pods/ship.dmi'
icon_state = "pod_taser"
projectile_type = "/obj/item/projectile/kinetic"
shot_cost = 300
@@ -116,6 +118,7 @@
/obj/item/device/spacepod_equipment/weaponry/mining_laser
name = "mining laser system"
desc = "A mining laser system for space pods, fires bursts of energy that cut through rock"
+ icon = 'icons/goonstation/pods/ship.dmi'
icon_state = "pod_m_laser"
projectile_type = "/obj/item/projectile/kinetic/super"
shot_cost = 250
@@ -125,6 +128,7 @@
/obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper
name = "enhanced mining laser system"
desc = "An enhanced mining laser system for space pods, fires bursts of energy that cut through rock"
+ icon = 'icons/goonstation/pods/ship.dmi'
icon_state = "pod_w_laser"
projectile_type = "/obj/item/projectile/kinetic/hyper"
shot_cost = 200
@@ -159,7 +163,7 @@
/obj/item/device/spacepod_equipment/cargo
name = "pod cargo"
desc = "You shouldn't be seeing this"
- icon = 'icons/goonstation/pods/ship.dmi'
+ icon = 'icons/vehicles/spacepod.dmi'
icon_state = "blank"
/obj/item/device/spacepod_equipment/cargo/proc/passover(var/obj/item/I)
@@ -171,7 +175,7 @@
/obj/item/device/spacepod_equipment/cargo/ore
name = "\improper spacepod ore storage system"
desc = "An ore storage system for spacepods. Scoops up any ore you drive over."
- icon_state = "pod_locator"
+ icon_state = "cargo_ore"
var/obj/structure/ore_box/box
/obj/item/device/spacepod_equipment/cargo/ore/passover(var/obj/item/I)
@@ -186,3 +190,43 @@
/obj/item/device/spacepod_equipment/cargo/ore/removed(var/mob/user)
. = ..()
unload()
+
+/obj/item/device/spacepod_equipment/lock
+ name = "pod lock"
+ desc = "You shouldn't be seeing this"
+ icon = 'icons/vehicles/spacepod.dmi'
+ icon_state = "blank"
+ var/mode = 0
+ var/id = null
+
+// Key and Tumbler System
+/obj/item/device/spacepod_equipment/lock/keyed
+ name = "spacepod tumbler lock"
+ desc = "A locking system to stop podjacking. This version uses a standalone key."
+ icon_state = "lock_tumbler"
+ var/static/id_source = 0
+
+/obj/item/device/spacepod_equipment/lock/keyed/New()
+ ..()
+ id = ++id_source
+
+// The key
+/obj/item/device/spacepod_key
+ name = "spacepod key"
+ desc = "A key for a spacepod lock."
+ icon = 'icons/vehicles/spacepod.dmi'
+ icon_state = "podkey"
+ w_class = 1.0
+ var/id = 0
+
+// Key - Lock Interactions
+/obj/item/device/spacepod_equipment/lock/keyed/attackby(obj/item/I as obj, mob/user as mob, params)
+ if(istype(I, /obj/item/device/spacepod_key))
+ var/obj/item/device/spacepod_key/key = I
+ if(!key.id)
+ key.id = id
+ to_chat(user, "You grind the blank key to fit the lock.")
+ else
+ to_chat(user, "This key is already ground!")
+ else
+ ..()
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index bfa4cf1dd6a..707b8912460 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -250,9 +250,12 @@
/obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params)
if(iscrowbar(W))
- hatch_open = !hatch_open
- playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
- to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.")
+ if(!equipment_system.lock_system || allow2enter || hatch_open)
+ hatch_open = !hatch_open
+ playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
+ to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.")
+ else
+ to_chat(user, "The hatch is locked shut!")
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(!hatch_open)
to_chat(user, "\red The maintenance hatch is closed!")
@@ -305,6 +308,25 @@
equipment_system.cargo_system = W
equipment_system.cargo_system.my_atom = src
return
+ if(istype(W, /obj/item/device/spacepod_equipment/lock))
+ if(equipment_system.lock_system)
+ to_chat(user, "The pod already has a lock system, remove it first.")
+ return
+ else
+ to_chat(user, "You insert \the [W] into the lock system.")
+ user.drop_item(W)
+ W.forceMove(src)
+ equipment_system.lock_system = W
+ equipment_system.lock_system.my_atom = src
+ return
+
+ if(istype(W, /obj/item/device/spacepod_key) && istype(equipment_system.lock_system, /obj/item/device/spacepod_equipment/lock/keyed))
+ var/obj/item/device/spacepod_key/key = W
+ if (key.id == equipment_system.lock_system.id)
+ locksecondseat()
+ else
+ to_chat(user, "This is the wrong key!")
+ return
if(istype(W, /obj/item/weapon/weldingtool))
if(!hatch_open)
@@ -340,6 +362,8 @@
possible.Add("Misc. System")
if(equipment_system.cargo_system)
possible.Add("Cargo System")
+ if(equipment_system.lock_system)
+ possible.Add("Lock System")
/* Not yet implemented
if(equipment_system.engine_system)
possible.Add("Engine System")
@@ -379,6 +403,15 @@
equipment_system.cargo_system = null
else
to_chat(user, "You need an open hand to do that.")
+ if("Lock System")
+ SPE = equipment_system.lock_system
+ if(user.put_in_any_hand_if_possible(SPE))
+ to_chat(user, "You remove \the [SPE] from the equipment system.")
+ SPE.removed(user)
+ SPE.my_atom = null
+ equipment_system.lock_system = null
+ else
+ to_chat(user, "You need an open hand to do that.")
/*
if("engine system")
SPE = equipment_system.engine_system
@@ -423,6 +456,11 @@
equipment_system.misc_system = L
equipment_system.misc_system.my_atom = src
equipment_system.misc_system.enabled = 1
+ var/obj/item/device/spacepod_equipment/lock/keyed/K = new /obj/item/device/spacepod_equipment/lock/keyed
+ K.loc = equipment_system
+ equipment_system.lock_system = K
+ equipment_system.lock_system.my_atom = src
+ equipment_system.lock_system.id = 100000
return
/obj/spacepod/random/New()
@@ -534,7 +572,11 @@
moved_other_inside(M)
if(M == user)
- enter_pod(user)
+ if(!equipment_system.lock_system || allow2enter)
+ enter_pod(user)
+ else
+ to_chat(user, "\The [src]'s doors are locked!")
+
if(istype(A, /obj/structure/ore_box)) // For loading ore boxes
var/obj/structure/ore_box/O = A
@@ -638,10 +680,6 @@
log_debug("##SPACEPOD WARNING: OCCUPANT [occupant2] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
occupant2 = null
- if(!occupant && !allow2enter)
- allow2enter = 1
- log_debug("##SPACEPOD WARNING: DOORS WERE STILL LOCKED WITH NO OCCUPANT, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
-
/obj/spacepod/verb/exit_pod()
set name = "Exit pod"
set category = "Spacepod"
diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm
index cd965caf540..c1927e47654 100644
--- a/code/modules/research/designs/spacepod_designs.dm
+++ b/code/modules/research/designs/spacepod_designs.dm
@@ -181,4 +181,29 @@
build_type = PODFAB
materials = list(MAT_METAL=20000, MAT_GLASS=2000)
build_path = /obj/item/device/spacepod_equipment/cargo/ore
+ category = list("Pod_Parts")
+
+//////////////////////////////////////////
+//////SPACEPOD LOCK ITEMS////////////////
+//////////////////////////////////////////
+/datum/design/pod_lock_keyed
+ construction_time = 100
+ name = "Spacepod Tumbler Lock"
+ desc = "Allows for the construction of a tumbler style podlock."
+ id = "podlock_keyed"
+ req_tech = list("materials" = 1) //The most basic kind of locking system
+ build_type = PODFAB
+ materials = list(MAT_METAL=4500)
+ build_path = /obj/item/device/spacepod_equipment/lock/keyed
+ category = list("Pod_Parts")
+
+/datum/design/pod_key
+ construction_time = 100
+ name = "Spacepod Tumbler Lock Key"
+ desc = "Allows for the construction of a blank key for a podlock."
+ id = "podkey"
+ req_tech = list("materials" = 1) //The most basic kind of locking system
+ build_type = PODFAB
+ materials = list(MAT_METAL=500)
+ build_path = /obj/item/device/spacepod_key
category = list("Pod_Parts")
\ No newline at end of file
diff --git a/icons/vehicles/spacepod.dmi b/icons/vehicles/spacepod.dmi
new file mode 100644
index 00000000000..e55085622c9
Binary files /dev/null and b/icons/vehicles/spacepod.dmi differ