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