diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 95abdc80f92..6eef766fd9b 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -464,7 +464,7 @@
"aiV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plasteel,/area/security/armoury)
"aiW" = (/obj/structure/rack,/obj/item/weapon/storage/box/seccarts{pixel_x = 3; pixel_y = 2},/obj/item/weapon/storage/box/handcuffs,/obj/item/weapon/storage/box/flashbangs{pixel_x = -2; pixel_y = -2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/box/handcuffs,/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiX" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/gas{pixel_x = -3; pixel_y = -3},/obj/effect/decal/warning_stripes/red/hollow,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
-"aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
+"aiY" = (/obj/structure/table,/obj/effect/decal/warning_stripes/red/hollow,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/lock_buster,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/security/armoury)
"aiZ" = (/obj/machinery/recharger/wallcharger{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main)
"aja" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plasteel,/area/security/main)
"ajb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plasteel,/area/security/main)
@@ -7063,7 +7063,7 @@
"cFQ" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engineering,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/engineering,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel,/area/engine/hardsuitstorage)
"cFR" = (/obj/machinery/power/apc{dir = 4; name = "CE Office APC"; pixel_x = 24; pixel_y = 0; shock_proof = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cFS" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/engine/chiefs_office)
-"cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
+"cFT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/obj/structure/table/reinforced,/obj/item/weapon/rcd,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/rcd_ammo,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/clothing/glasses/meson{pixel_y = 4},/obj/item/device/megaphone,/obj/item/device/lock_buster,/mob/living/simple_animal/parrot/Poly,/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cFU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/closet/firecloset,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmospherics Requests Console"; pixel_x = -30},/turf/simulated/floor/plasteel,/area/atmos)
"cFV" = (/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = 10; pixel_y = 24; req_access_txt = "24"},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -10; pixel_y = 24; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for secure storage."; id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_x = 0; pixel_y = 24; req_access_txt = "11"},/obj/machinery/light_switch{pixel_y = 38},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
"cFW" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office)
diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm
index 5ac31a0f567..6817d265a0f 100644
--- a/code/game/machinery/computer/pod_tracking_console.dm
+++ b/code/game/machinery/computer/pod_tracking_console.dm
@@ -17,17 +17,20 @@
var/data[0]
var/list/pods[0]
for(var/obj/item/device/spacepod_equipment/misc/tracker/TR in world)
- var/obj/spacepod/myPod = TR.my_atom
+ var/obj/spacepod/my_pod = TR.my_atom
var/enabled = TR.enabled
- if(myPod && enabled)
- var/podname = capitalize(sanitize(myPod.name))
- var/occupant = "None"
- var/occupant2 = "None"
- if(myPod.occupant)
- occupant = myPod.occupant.name
- if(myPod.occupant2)
- occupant2 = myPod.occupant2.name
- pods.Add(list(list("pod" = "\ref[myPod]", "name" = podname, "occupant" = occupant, "occupant2" = occupant2, "x" = myPod.x, "y" = myPod.y, "z" = myPod.z)))
+ if(my_pod && enabled)
+ var/podname = capitalize(sanitize(my_pod.name))
+ var/list/chairs = list()
+ if(my_pod.pilot || my_pod.passengers)
+ if(my_pod.pilot)
+ chairs += list("pilot" = my_pod.pilot.name)
+ var/i = 1
+ for(var/mob/M in my_pod.passengers)
+ chairs += list("passenger [i]" = M.name)
+ i++
+
+ pods.Add(list(list("pod" = "\ref[my_pod]", "name" = podname) + chairs + list("x" = my_pod.x, "y" = my_pod.y, "z" = my_pod.z)))
data["pods"] = pods
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index f916998e26b..eab12bb22d5 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -519,7 +519,7 @@ var/list/turret_icons
assess_and_assign(ME.occupant, targets, secondarytargets)
for(var/obj/spacepod/SP in view(7,src))
- assess_and_assign(SP.occupant, targets, secondarytargets)
+ assess_and_assign(SP.pilot, targets, secondarytargets)
for(var/obj/vehicle/T in view(7,src))
assess_and_assign(T.buckled_mob, targets, secondarytargets)
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index b1d92718104..82060d47bc2 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -21,7 +21,7 @@
turretTargets |= Mech
else if( istype(O, /obj/spacepod) )
var/obj/spacepod/Pod = O
- if( Pod.occupant || Pod.occupant2 )
+ if( Pod.pilot )
turretTargets |= Pod
else if(istype(O,/mob/living/simple_animal))
turretTargets |= O
@@ -139,7 +139,7 @@
return 1
else if( istype(T, /obj/spacepod) )
var/obj/spacepod/SP = T
- if( SP.occupant || SP.occupant2 )
+ if( SP.pilot )
return 1
else if(istype(T,/mob/living/simple_animal))
var/mob/living/simple_animal/A = T
@@ -159,8 +159,8 @@
if(M.occupant)
new_targets += M
for(var/obj/spacepod/M in protected_area.turretTargets)
- if(M.occupant)
- new_targets += M
+ if(M.pilot)
+ new_targets += M.pilot
for(var/mob/living/simple_animal/M in protected_area.turretTargets)
if(!M.stat)
new_targets += M
@@ -488,7 +488,7 @@
return 1
else if(istype(target, /obj/spacepod))
var/obj/spacepod/S = target
- if(S.occupant || S.occupant2)
+ if(S.pilot)
return 1
return 0
@@ -522,14 +522,12 @@
continue //Don't shoot at empty mechs.
pos_targets += M
for(var/obj/spacepod/M in oview(scan_range, src))
- if(M.occupant)
- if(faction in M.occupant.faction)
+ if(M.pilot)
+ var/mob/P = M.pilot
+ if(faction in P.faction)
continue
- if(M.occupant2)
- if(faction in M.occupant2.faction)
- continue
- if(!M.occupant && !M.occupant2)
- continue //Don't shoot at empty mechs.
+ if(!M.pilot)
+ continue //Don't shoot at empty pods.
pos_targets += M
if(pos_targets.len)
target = pick(pos_targets)
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 72e709d5ac0..418c30199d0 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -118,8 +118,8 @@
return 1
if(istype(the_target, /obj/spacepod))
var/obj/spacepod/S = the_target
- if(S.occupant || S.occupant2)//Just so we don't attack empty mechs
- if(CanAttack(S.occupant) || CanAttack(S.occupant2))
+ if(S.pilot) //Just so we don't attack empty pods
+ if(CanAttack(S.pilot))
return 1
if(isliving(the_target))
var/mob/living/L = the_target
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
index cd34c8a6491..2e3718cd800 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -14,7 +14,7 @@
return A
else if(istype(A, /obj/spacepod))
var/obj/spacepod/M = A
- if(M.occupant || M.occupant2)
+ if(M.pilot)
return A
/mob/living/simple_animal/hostile/retaliate/ListTargets()
@@ -47,9 +47,9 @@
enemies |= M.occupant
else if(istype(A, /obj/spacepod))
var/obj/spacepod/M = A
- if(M.occupant || M.occupant2)
+ if(M.pilot)
enemies |= M
- enemies |= M.occupant
+ enemies |= M.pilot
for(var/mob/living/simple_animal/hostile/retaliate/H in around)
var/retaliate_faction_check = 0
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index c71f205e7bf..9eee62d810a 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -536,7 +536,7 @@
return 0
if (istype(the_target,/obj/spacepod))
var/obj/spacepod/S = the_target
- if (S.occupant || S.occupant2)
+ if (S.pilot)
return 0
return 1
diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm
index c1927e47654..759af82404d 100644
--- a/code/modules/research/designs/spacepod_designs.dm
+++ b/code/modules/research/designs/spacepod_designs.dm
@@ -12,6 +12,7 @@
//////////////////////////////////////////////////
/////////SPACEPOD PARTS///////////////////////////
//////////////////////////////////////////////////
+
/datum/design/podframe_fp
construction_time = 200
name = "Fore port pod frame"
@@ -89,6 +90,7 @@
//////////////////////////////////////////
//////SPACEPOD GUNS///////////////////////
//////////////////////////////////////////
+
/datum/design/pod_gun_taser
construction_time = 200
name = "Spacepod Equipment (Taser)"
@@ -157,6 +159,7 @@
materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_DIAMOND = 4000)
build_path = /obj/item/device/spacepod_equipment/weaponry/mining_laser_hyper
category = list("Pod_Weaponry")
+
//////////////////////////////////////////
//////SPACEPOD MISC. ITEMS////////////////
//////////////////////////////////////////
@@ -172,16 +175,57 @@
build_path = /obj/item/device/spacepod_equipment/misc/tracker
category = list("Pod_Parts")
+//////////////////////////////////////////
+//////SPACEPOD CARGO ITEMS////////////////
+//////////////////////////////////////////
+
/datum/design/pod_cargo_ore
construction_time = 100
name = "Spacepod Ore Storage Module"
desc = "Allows for the construction of a Space Pod Ore Storage Module."
id = "podcargo_ore"
- req_tech = list("materials" = 3)
+ req_tech = list("materials" = 3, "engineering" = 2)
build_type = PODFAB
materials = list(MAT_METAL=20000, MAT_GLASS=2000)
build_path = /obj/item/device/spacepod_equipment/cargo/ore
- category = list("Pod_Parts")
+ category = list("Pod_Cargo")
+
+/datum/design/pod_cargo_crate
+ construction_time = 100
+ name = "Spacepod Crate Storage Module"
+ desc = "Allows the construction of a Space Pod Crate Storage Module."
+ id = "podcargo_crate"
+ req_tech = list("materials" = 4, "engineering" = 2) //hollowing out this much of the pod without compromising structural integrity is hard
+ build_type = PODFAB
+ materials = list(MAT_METAL=25000)
+ build_path = /obj/item/device/spacepod_equipment/cargo/crate
+ category = list("Pod_Cargo")
+
+//////////////////////////////////////////
+//////SPACEPOD SEC CARGO ITEMS////////////
+//////////////////////////////////////////
+
+/datum/design/passenger_seat
+ construction_time = 100
+ name = "Spacepod Passenger Seat"
+ desc = "Allows the construction of a Space Pod Passenger Seat Module."
+ id = "podcargo_sec_seat"
+ req_tech = list("materials" = 1) // Because rule number one of refactoring
+ build_type = PODFAB
+ materials = list(MAT_METAL=7500, MAT_GLASS=2500)
+ build_path = /obj/item/device/spacepod_equipment/sec_cargo/chair
+ category = list("Pod_Cargo")
+
+/datum/design/loot_box
+ construction_time = 100
+ name = "Spacepod Loot Storage Module"
+ desc = "Allows the construction of a Space Pod Auxillary Cargo Module."
+ id = "podcargo_sec_lootbox"
+ req_tech = list("materials" = 1) //it's just a set of shelves, It's not that hard to make
+ build_type = PODFAB
+ materials = list(MAT_METAL=7500, MAT_GLASS=2500)
+ build_path = /obj/item/device/spacepod_equipment/sec_cargo/loot_box
+ category = list("Pod_Cargo")
//////////////////////////////////////////
//////SPACEPOD LOCK ITEMS////////////////
diff --git a/code/game/vehicles/spacepods/construction.dm b/code/modules/spacepods/construction.dm
similarity index 100%
rename from code/game/vehicles/spacepods/construction.dm
rename to code/modules/spacepods/construction.dm
diff --git a/code/game/vehicles/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm
similarity index 76%
rename from code/game/vehicles/spacepods/equipment.dm
rename to code/modules/spacepods/equipment.dm
index 91588fa0a8b..24c4fa5110b 100644
--- a/code/game/vehicles/spacepods/equipment.dm
+++ b/code/modules/spacepods/equipment.dm
@@ -46,12 +46,13 @@
/datum/spacepod/equipment
var/obj/spacepod/my_atom
+ var/list/obj/item/device/spacepod_equipment/installed_modules // holds an easy to access list of installed modules
+
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/cargo/sec_cargo_system // secondary 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
/datum/spacepod/equipment/New(var/obj/spacepod/SP)
..()
@@ -61,11 +62,17 @@
/obj/item/device/spacepod_equipment
name = "equipment"
var/obj/spacepod/my_atom
+ var/occupant_mod = 0 // so any module can modify occupancy
+ var/list/storage_mod = list("slots" = 0, "w_class" = 0) // so any module can modify storage slots
/obj/item/device/spacepod_equipment/proc/removed(var/mob/user) // So that you can unload cargo when you remove the module
return
-// base item for spacepod weapons
+/*
+///////////////////////////////////////
+/////////Weapon System///////////////////
+///////////////////////////////////////
+*/
/obj/item/device/spacepod_equipment/weaponry
name = "pod weapon"
@@ -135,7 +142,12 @@
fire_delay = 8
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
-//base item for spacepod misc equipment (tracker)
+/*
+///////////////////////////////////////
+/////////Misc. System///////////////////
+///////////////////////////////////////
+*/
+
/obj/item/device/spacepod_equipment/misc
name = "pod misc"
desc = "You shouldn't be seeing this"
@@ -160,37 +172,79 @@
else
..()
+/*
+///////////////////////////////////////
+/////////Cargo System//////////////////
+///////////////////////////////////////
+*/
+
/obj/item/device/spacepod_equipment/cargo
name = "pod cargo"
desc = "You shouldn't be seeing this"
icon = 'icons/vehicles/spacepod.dmi'
- icon_state = "blank"
+ icon_state = "cargo_blank"
+ var/obj/storage = null
/obj/item/device/spacepod_equipment/cargo/proc/passover(var/obj/item/I)
return
-/obj/item/device/spacepod_equipment/cargo/proc/unload()
- return
+/obj/item/device/spacepod_equipment/cargo/proc/unload() // called by unload verb
+ if(storage)
+ storage.forceMove(get_turf(my_atom))
+ storage = null
-/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 = "cargo_ore"
- var/obj/structure/ore_box/box
-
-/obj/item/device/spacepod_equipment/cargo/ore/passover(var/obj/item/I)
- if(box && istype(I,/obj/item/weapon/ore))
- I.forceMove(box)
-
-/obj/item/device/spacepod_equipment/cargo/ore/unload()
- if(box)
- box.forceMove(get_turf(my_atom))
- box = null
-
-/obj/item/device/spacepod_equipment/cargo/ore/removed(var/mob/user)
+/obj/item/device/spacepod_equipment/cargo/removed(var/mob/user) // called when system removed
. = ..()
unload()
+// Ore System
+/obj/item/device/spacepod_equipment/cargo/ore
+ name = "spacepod ore storage system"
+ desc = "An ore storage system for spacepods. Scoops up any ore you drive over."
+ icon_state = "cargo_ore"
+
+/obj/item/device/spacepod_equipment/cargo/ore/passover(var/obj/item/I)
+ if(storage && istype(I,/obj/item/weapon/ore))
+ I.forceMove(storage)
+
+// Crate System
+/obj/item/device/spacepod_equipment/cargo/crate
+ name = "spacepod crate storage system"
+ desc = "A heavy duty storage system for spacepods. Holds one crate."
+ icon_state = "cargo_crate"
+
+/*
+///////////////////////////////////////
+/////////Secondary Cargo System////////
+///////////////////////////////////////
+*/
+
+/obj/item/device/spacepod_equipment/sec_cargo
+ name = "secondary cargo"
+ desc = "you shouldn't be seeing this"
+ icon = 'icons/vehicles/spacepod.dmi'
+ icon_state = "blank"
+
+// Passenger Seat
+/obj/item/device/spacepod_equipment/sec_cargo/chair
+ name = "passanger seat"
+ desc = "A passenger seat for a spacepod"
+ icon_state = "sec_cargo_chair"
+ occupant_mod = 1
+
+// Loot Box
+/obj/item/device/spacepod_equipment/sec_cargo/loot_box
+ name = "loot box"
+ desc = "A small compartment to store valuables"
+ icon_state = "sec_cargo_loot"
+ storage_mod = list("slots" = 7, "w_class" = 14)
+
+/*
+///////////////////////////////////////
+/////////Lock System///////////////////
+///////////////////////////////////////
+*/
+
/obj/item/device/spacepod_equipment/lock
name = "pod lock"
desc = "You shouldn't be seeing this"
diff --git a/code/modules/spacepods/lock_buster.dm b/code/modules/spacepods/lock_buster.dm
new file mode 100644
index 00000000000..276386d89a6
--- /dev/null
+++ b/code/modules/spacepods/lock_buster.dm
@@ -0,0 +1,13 @@
+/obj/item/device/lock_buster
+ name = "pod lock buster"
+ desc = "Destroys a podlock in mere seconds once applied. Waranty void if used."
+ icon_state = "lock_buster_off"
+ var/on = 0
+
+/obj/item/device/lock_buster/attack_self(mob/user as mob)
+ on = !on
+ if(on)
+ icon_state = "lock_buster_on"
+ else
+ icon_state = "lock_buster_off"
+ to_chat(usr, "You turn the [src] [on ? "on" : "off"].")
\ No newline at end of file
diff --git a/code/game/vehicles/spacepods/parts.dm b/code/modules/spacepods/parts.dm
similarity index 100%
rename from code/game/vehicles/spacepods/parts.dm
rename to code/modules/spacepods/parts.dm
diff --git a/code/game/vehicles/spacepods/pod_fabricator.dm b/code/modules/spacepods/pod_fabricator.dm
similarity index 99%
rename from code/game/vehicles/spacepods/pod_fabricator.dm
rename to code/modules/spacepods/pod_fabricator.dm
index 948491c6d29..ed7f421f33e 100644
--- a/code/game/vehicles/spacepods/pod_fabricator.dm
+++ b/code/modules/spacepods/pod_fabricator.dm
@@ -35,6 +35,7 @@
var/list/part_sets = list(
"Pod_Weaponry",
"Pod_Armor",
+ "Pod_Cargo",
"Pod_Parts",
"Pod_Frame",
"Misc",
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm
similarity index 57%
rename from code/game/vehicles/spacepods/spacepod.dm
rename to code/modules/spacepods/spacepod.dm
index 707b8912460..4d6393b3348 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/modules/spacepods/spacepod.dm
@@ -14,8 +14,10 @@
layer = 3.9
infra_luminosity = 15
- var/mob/living/carbon/occupant
- var/mob/living/carbon/occupant2 //two seaters
+ var/list/mob/pilot //There is only ever one pilot and he gets all the privledge
+ var/list/mob/passengers = list() //passengers can't do anything and are variable in number
+ var/max_passengers = 0
+ var/obj/item/weapon/storage/internal/cargo_hold
var/datum/spacepod/equipment/equipment_system
@@ -47,7 +49,7 @@
"pod_black" = "#3B8FE5", \
"pod_industrial" = "#CCCC00")
- var/allow2enter = 1
+ var/unlocked = 1
var/move_delay = 2
var/next_move = 0
@@ -72,12 +74,19 @@
pr_give_air = new /datum/global_iterator/pod_tank_give_air(list(src))
equipment_system = new(src)
spacepods_list += src
+ cargo_hold = new/obj/item/weapon/storage/internal(src)
+ cargo_hold.w_class = 5 //so you can put bags in
+ cargo_hold.storage_slots = 0 //You need to install cargo modules to use it.
+ cargo_hold.max_w_class = 5 //fit almost anything
+ cargo_hold.max_combined_w_class = 0 //you can optimize your stash with larger items
/obj/spacepod/Destroy()
if (equipment_system.cargo_system)
equipment_system.cargo_system.removed(null)
qdel(equipment_system)
equipment_system = null
+ qdel(cargo_hold)
+ cargo_hold = null
qdel(battery)
battery = null
qdel(cabin_air)
@@ -91,12 +100,10 @@
qdel(ion_trail)
ion_trail = null
occupant_sanity_check()
- if(occupant)
- occupant.forceMove(get_turf(src))
- occupant = null
- if(occupant2)
- occupant2.forceMove(get_turf(src))
- occupant2 = null
+ if(passengers)
+ for(var/mob/M in passengers)
+ M.forceMove(get_turf(src))
+ passengers -= M
spacepods_list -= src
return ..()
@@ -106,7 +113,6 @@
else
processing_objects.Remove(src)
-
/obj/spacepod/proc/update_icons()
if(!pod_overlays)
pod_overlays = new/list(2)
@@ -155,34 +161,29 @@
health = max(0, health - damage)
var/percentage = (health / initial(health)) * 100
occupant_sanity_check()
- if(occupant && oldhealth > health && percentage <= 25 && percentage > 0)
+ if(passengers && oldhealth > health && percentage <= 25 && percentage > 0)
var/sound/S = sound('sound/effects/engine_alert2.ogg')
S.wait = 0 //No queue
S.channel = 0 //Any channel
S.volume = 50
- to_chat(occupant, S)
- if(occupant2)
- to_chat(occupant2, S)
- if(occupant && oldhealth > health && !health)
+ for(var/mob/M in passengers)
+ to_chat(M, S)
+ if(passengers && oldhealth > health && !health)
var/sound/S = sound('sound/effects/engine_alert1.ogg')
S.wait = 0
S.channel = 0
S.volume = 50
- to_chat(occupant, S)
- if(occupant2)
- to_chat(occupant2, S)
+ for(var/mob/M in passengers)
+ to_chat(M, S)
if(!health)
spawn(0)
- if(occupant)
- to_chat(occupant, "Critical damage to the vessel detected, core explosion imminent!")
- if(occupant2)
- to_chat(occupant2, "Critical damage to the vessel detected, core explosion imminent!")
-
+ if(passengers)
+ for(var/mob/M in passengers)
+ to_chat(M, "Critical damage to the vessel detected, core explosion imminent!")
for(var/i = 10, i >= 0; --i)
- if(occupant)
- to_chat(occupant, "[i]")
- if(occupant2)
- to_chat(occupant2, "[i]")
+ if(passengers)
+ for(var/mob/M in passengers)
+ to_chat(M, "[i]")
if(i == 0)
explosion(loc, 2, 4, 8)
qdel(src)
@@ -200,16 +201,12 @@
occupant_sanity_check()
switch(severity)
if(1)
- var/mob/living/carbon/human/H = occupant
- var/mob/living/carbon/human/H2 = occupant2
- if(H)
- H.forceMove(get_turf(src))
- H.ex_act(severity + 1)
- to_chat(H, "You are forcefully thrown from \the [src]!")
- if(H2)
- H2.forceMove(get_turf(src))
- H2.ex_act(severity + 1)
- to_chat(H2, "You are forcefully thrown from \the [src]!")
+ for(var/mob/M in passengers)
+ var/mob/living/carbon/human/H = M
+ if(H)
+ H.forceMove(get_turf(src))
+ H.ex_act(severity + 1)
+ to_chat(H, "You are forcefully thrown from \the [src]!")
qdel(ion_trail)
qdel(src)
if(2)
@@ -220,12 +217,14 @@
/obj/spacepod/emp_act(severity)
occupant_sanity_check()
+ cargo_hold.emp_act(severity)
switch(severity)
if(1)
- if(occupant)
- to_chat(occupant, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants
- if(occupant2)
- to_chat(occupant2, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the occupants
+ if(pilot)
+ to_chat(pilot, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")
+ if(passengers)
+ for(var/mob/M in passengers)
+ to_chat(M, "The pod console flashes 'Heavy EMP WAVE DETECTED'.")//warn the passengers
if(battery)
@@ -236,10 +235,11 @@
processing_objects.Add(src)
if(2)
- if(occupant)
- to_chat(occupant, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants
- if(occupant2)
- to_chat(occupant2, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the occupants
+ if(pilot)
+ to_chat(pilot, "The pod console flashes 'EMP WAVE DETECTED'.")
+ if(passengers)
+ for(var/mob/M in passengers)
+ to_chat(M, "The pod console flashes 'EMP WAVE DETECTED'.")//warn the passengers
deal_damage(40)
if(battery)
@@ -250,12 +250,13 @@
/obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params)
if(iscrowbar(W))
- if(!equipment_system.lock_system || allow2enter || hatch_open)
+ if(!equipment_system.lock_system || unlocked || 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!")
+ return
if(istype(W, /obj/item/weapon/stock_parts/cell))
if(!hatch_open)
to_chat(user, "\red The maintenance hatch is closed!")
@@ -272,61 +273,32 @@
to_chat(user, "\red The maintenance hatch is closed!")
return
if(!equipment_system)
- to_chat(user, "The pod has no equipment datum, yell at pomf")
+ to_chat(user, "The pod has no equipment datum, yell at the coders")
return
if(istype(W, /obj/item/device/spacepod_equipment/weaponry))
- if(equipment_system.weapon_system)
- to_chat(user, "The pod already has a weapon system, remove it first.")
- return
- else
- to_chat(user, "You insert \the [W] into the equipment system.")
- user.drop_item(W)
- W.forceMove(src)
- equipment_system.weapon_system = W
- equipment_system.weapon_system.my_atom = src
- return
-
+ add_equipment(user, W, "weapon_system")
+ return
if(istype(W, /obj/item/device/spacepod_equipment/misc))
- if(equipment_system.misc_system)
- to_chat(user, "The pod already has a miscellaneous system, remove it first.")
- return
- else
- to_chat(user, "You insert \the [W] into the equipment system.")
- user.drop_item(W)
- W.forceMove(src)
- equipment_system.misc_system = W
- equipment_system.misc_system.my_atom = src
- return
+ add_equipment(user, W, "misc_system")
+ return
if(istype(W, /obj/item/device/spacepod_equipment/cargo))
- if(equipment_system.cargo_system)
- to_chat(user, "The pod already has a cargo system, remove it first.")
- return
- else
- to_chat(user, "You insert \the [W] into the cargo system.")
- user.drop_item(W)
- W.forceMove(src)
- equipment_system.cargo_system = W
- equipment_system.cargo_system.my_atom = src
- return
+ add_equipment(user, W, "cargo_system")
+ return
+ if(istype(W, /obj/item/device/spacepod_equipment/sec_cargo))
+ add_equipment(user, W, "sec_cargo_system")
+ 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
+ add_equipment(user, W, "lock_system")
+ 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()
+ lock_pod()
+ return
else
to_chat(user, "This is the wrong key!")
- return
+ return
if(istype(W, /obj/item/weapon/weldingtool))
if(!hatch_open)
@@ -343,15 +315,76 @@
if(!src || !WT.remove_fuel(3, user)) return
repair_damage(10)
to_chat(user, "\blue You mend some [pick("dents","bumps","damage")] with \the [WT]")
- else
- to_chat(user, "\blue \The [src] is fully repaired!")
+ return
+ to_chat(user, "\blue \The [src] is fully repaired!")
+ return
+ if(istype(W, /obj/item/device/lock_buster))
+ var/obj/item/device/lock_buster/L = W
+ if(L.on & equipment_system.lock_system)
+ user.visible_message(user, "[user] is drilling through the [src]'s lock!",
+ "You start drilling through the [src]'s lock!")
+ if(do_after(user, 100, target = src))
+ qdel(equipment_system.lock_system)
+ equipment_system.lock_system = null
+ user.visible_message(user, "[user] has destroyed the [src]'s lock!",
+ "You destroy the [src]'s lock!")
+ else
+ user.visible_message(user, "[user] fails to break through the [src]'s lock!",
+ "You were unable to break through the [src]'s lock!")
+ return
+ to_chat(user, "Turn the [L] on first.")
+ return
+
+ if(cargo_hold.storage_slots > 0 && !hatch_open && unlocked) // must be the last option as all items not listed prior will be stored
+ cargo_hold.attackby(W, user, params)
+
+obj/spacepod/proc/add_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot)
+ if(equipment_system.vars[slot])
+ to_chat(user, "The pod already has a [slot], remove it first.")
+ return
+ else
+ to_chat(user, "You insert \the [SPE] into the pod.")
+ user.drop_item(SPE)
+ SPE.forceMove(src)
+ equipment_system.vars[slot] = SPE
+ var/obj/item/device/spacepod_equipment/system = equipment_system.vars[slot]
+ system.my_atom = src
+ equipment_system.installed_modules += SPE
+ max_passengers += SPE.occupant_mod
+ cargo_hold.storage_slots += SPE.storage_mod["slots"]
+ cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"]
/obj/spacepod/attack_hand(mob/user as mob)
+ if(user.a_intent == I_GRAB && unlocked)
+ var/mob/target
+ if(pilot)
+ target = pilot
+ else if(passengers.len > 0)
+ target = passengers[1]
+
+ if(target && istype(target))
+ src.visible_message("[user] is trying to rip the door open and pull [target] out of the [src]!",
+ "You see [user] outside the door trying to rip it open!")
+ if(do_after(user, 50, target = src))
+ target.forceMove(get_turf(src))
+ target.Stun(1)
+ passengers -= target
+ target.visible_message("[user] flings the door open and tears [target] out of the [src]",
+ "The door flies open and you are thrown out of the [src] and to the ground!")
+ return
+ target.visible_message("[user] was unable to get the door open!",
+ "You manage to keep [user] out of the [src]!")
+
if(!hatch_open)
+ if(cargo_hold.storage_slots > 0)
+ if(unlocked)
+ cargo_hold.open(user)
+ else
+ to_chat(user, "The storage compartment is locked")
return ..()
if(!equipment_system || !istype(equipment_system))
- to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at pomf.")
+ to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at IK3I.")
return
var/list/possible = list()
if(battery)
@@ -362,74 +395,81 @@
possible.Add("Misc. System")
if(equipment_system.cargo_system)
possible.Add("Cargo System")
+ if(equipment_system.sec_cargo_system)
+ possible.Add("Secondary Cargo System")
if(equipment_system.lock_system)
possible.Add("Lock System")
- /* Not yet implemented
- if(equipment_system.engine_system)
- possible.Add("Engine System")
- if(equipment_system.shield_system)
- possible.Add("Shield System")
- */
- var/obj/item/device/spacepod_equipment/SPE
switch(input(user, "Remove which equipment?", null, null) as null|anything in possible)
if("Energy Cell")
if(user.put_in_any_hand_if_possible(battery))
to_chat(user, "You remove \the [battery] from the space pod")
battery = null
+ else
+ to_chat(user, "You need an open hand to do that.")
+ return
if("Weapon System")
- SPE = equipment_system.weapon_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.weapon_system = null
- else
- to_chat(user, "You need an open hand to do that.")
+ remove_equipment(user, equipment_system.weapon_system, "weapon_system")
+ return
if("Misc. System")
- SPE = equipment_system.misc_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.misc_system = null
- else
- to_chat(user, "You need an open hand to do that.")
+ remove_equipment(user, equipment_system.misc_system, "misc_system")
+ return
if("Cargo System")
- SPE = equipment_system.cargo_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.cargo_system = null
- else
- to_chat(user, "You need an open hand to do that.")
+ remove_equipment(user, equipment_system.cargo_system, "cargo_system")
+ return
+ if("Secondary Cargo System")
+ remove_equipment(user, equipment_system.sec_cargo_system, "sec_cargo_system")
+ return
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
- if(user.put_in_any_hand_if_possible(SPE))
- to_chat(user, "You remove \the [SPE] from the equipment system.")
- equipment_system.engine_system = null
- else
- to_chat(user, "You need an open hand to do that.")
- if("shield system")
- SPE = equipment_system.shield_system
- if(user.put_in_any_hand_if_possible(SPE))
- to_chat(user, "You remove \the [SPE] from the equipment system.")
- equipment_system.shield_system = null
- else
- to_chat(user, "You need an open hand to do that.")
- */
+ remove_equipment(user, equipment_system.lock_system, "lock_system")
- return
+/obj/spacepod/proc/remove_equipment(mob/user, var/obj/item/device/spacepod_equipment/SPE, var/slot)
+
+ if(passengers.len > max_passengers - SPE.occupant_mod)
+ to_chat(user, "Someone is sitting in \the [SPE]!")
+ return
+
+ var/sum_w_class = 0
+ for(var/obj/item/I in cargo_hold.contents)
+ sum_w_class += I.w_class
+ if(cargo_hold.contents.len > cargo_hold.storage_slots - SPE.storage_mod["slots"] || sum_w_class > cargo_hold.max_combined_w_class - SPE.storage_mod["w_class"])
+ to_chat(user, "Empty \the [SPE] first!")
+ return
+
+ if(user.put_in_any_hand_if_possible(SPE))
+ to_chat(user, "You remove \the [SPE] from the equipment system.")
+ equipment_system.installed_modules -= SPE
+ max_passengers -= SPE.occupant_mod
+ cargo_hold.storage_slots -= SPE.storage_mod["slots"]
+ cargo_hold.max_combined_w_class -= SPE.storage_mod["w_class"]
+ SPE.removed(user)
+ SPE.my_atom = null
+ equipment_system.vars[slot] = null
+ return
+ to_chat(user, "You need an open hand to do that.")
+
+
+/obj/spacepod/hear_talk/hear_talk(mob/M, var/msg)
+ cargo_hold.hear_talk(M, msg)
+ ..()
+
+/obj/spacepod/hear_message(mob/M, var/msg)
+ cargo_hold.hear_message(M, msg)
+ ..()
+
+/obj/spacepod/proc/return_inv()
+
+ var/list/L = list( )
+
+ L += src.contents
+
+ for(var/obj/item/weapon/storage/S in src)
+ L += S.return_inv()
+ for(var/obj/item/weapon/gift/G in src)
+ L += G.gift
+ if (istype(G.gift, /obj/item/weapon/storage))
+ var/obj/item/weapon/storage/inv = G.gift
+ L += inv.return_inv()
+ return L
/obj/spacepod/civilian
icon_state = "pod_civ"
@@ -456,12 +496,16 @@
equipment_system.misc_system = L
equipment_system.misc_system.my_atom = src
equipment_system.misc_system.enabled = 1
+ var/obj/item/device/spacepod_equipment/sec_cargo/chair/C = new /obj/item/device/spacepod_equipment/sec_cargo/chair
+ C.loc = equipment_system
+ equipment_system.sec_cargo_system = C
+ equipment_system.sec_cargo_system.my_atom = src
+ max_passengers = 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()
..()
@@ -486,11 +530,11 @@
set category = "Spacepod"
set src = usr.loc
set popup_menu = 0
- if(usr!=src.occupant)
+ if(usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
return
use_internal_tank = !use_internal_tank
- to_chat(occupant, "Now taking air from [use_internal_tank?"internal airtank":"environment"].")
- return
+ to_chat(usr, "Now taking air from [use_internal_tank?"internal airtank":"environment"].")
/obj/spacepod/proc/add_cabin()
cabin_air = new
@@ -508,7 +552,6 @@
var/turf/T = get_turf(src)
if(T)
. = T.return_air()
- return
/obj/spacepod/remove_air(amount)
if(use_internal_tank)
@@ -517,7 +560,6 @@
var/turf/T = get_turf(src)
if(T)
return T.remove_air(amount)
- return
/obj/spacepod/return_air()
if(use_internal_tank)
@@ -532,7 +574,6 @@
var/datum/gas_mixture/t_air = get_turf_air()
if(t_air)
. = t_air.return_pressure()
- return
/obj/spacepod/proc/return_temperature()
. = 0
@@ -542,19 +583,21 @@
var/datum/gas_mixture/t_air = get_turf_air()
if(t_air)
. = t_air.return_temperature()
- return
/obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob)
occupant_sanity_check()
- if(!occupant2)
+ if(passengers.len < max_passengers)
H.stop_pulling()
H.forceMove(src)
- occupant2 = H
+ passengers += H
H.forceMove(src)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
return 1
/obj/spacepod/MouseDrop_T(atom/A, mob/user)
+ if(user == pilot || user in passengers)
+ return
+
if(istype(A,/mob))
var/mob/M = A
if(!isliving(M))
@@ -562,48 +605,51 @@
occupant_sanity_check()
- if(M != user && M.stat == DEAD && allow2enter)
- if(occupant2 && !occupant)
- to_chat(usr, "You can't put a corpse into the driver's seat!")
+ if(M != user && unlocked && (M.stat == DEAD || M.incapacitated()))
+ if(passengers.len >= max_passengers && !pilot)
+ to_chat(usr, "That person can't fly the pod!")
return 0
- if(!occupant2)
+ if(passengers.len < max_passengers)
visible_message("[user.name] starts loading [M.name] into the pod!")
- sleep(10)
- moved_other_inside(M)
+ if(do_after(user, 50, target = M))
+ moved_other_inside(M)
+ return
if(M == user)
- if(!equipment_system.lock_system || allow2enter)
- enter_pod(user)
- else
- to_chat(user, "\The [src]'s doors are locked!")
+ enter_pod(user)
+ return
-
- if(istype(A, /obj/structure/ore_box)) // For loading ore boxes
- var/obj/structure/ore_box/O = A
- if(equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore))
- var/obj/item/device/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system
- if(!C.box)
- to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]")
- if(do_after(user, 40, target = src))
- C.box = O
- O.forceMove(C)
- to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!")
- else
- to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]")
- else
- to_chat(user, "\The [src] already has \an [C.box]")
-
-/obj/spacepod/verb/enter_pod(mob/user = usr)
- set category = "Object"
- set name = "Enter Pod"
- set src in oview(1)
-
- if (usr.stat != CONSCIOUS)
+ if(istype(A, /obj/structure/ore_box) && equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/device/spacepod_equipment/cargo/ore)) // For loading ore boxes
+ load_cargo(user, A)
return
+ if(istype(A, /obj/structure/closet/crate) && equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/device/spacepod_equipment/cargo/crate)) // For loading crates
+ load_cargo(user, A)
+
+/obj/spacepod/proc/load_cargo(mob/user, var/obj/O)
+ var/obj/item/device/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system
+ if(!C.storage)
+ to_chat(user, "You begin loading \the [O] into \the [src]'s [equipment_system.cargo_system]")
+ if(do_after(user, 40, target = src))
+ C.storage = O
+ O.forceMove(C)
+ to_chat(user, "You load \the [O] into \the [src]'s [equipment_system.cargo_system]!")
+ else
+ to_chat(user, "You fail to load \the [O] into \the [src]'s [equipment_system.cargo_system]")
+ else
+ to_chat(user, "\The [src] already has \an [C.storage]")
+
+/obj/spacepod/proc/enter_pod(mob/user)
+ if (usr.stat != CONSCIOUS)
+ return 0
+
+ if(equipment_system.lock_system && !unlocked)
+ to_chat(user, "\The [src]'s doors are locked!")
+ return 0
+
if(get_dist(src, user) > 2 || get_dist(usr, user) > 1)
to_chat(usr, "They are too far away to put inside")
- return
+ return 0
if(!istype(user))
return 0
@@ -632,53 +678,45 @@
occupant_sanity_check()
- if(!occupant)
+ if(passengers.len <= max_passengers)
visible_message("[user] starts to climb into \the [src].")
if(do_after(user, 40, target = src))
- if(!occupant)
+ if(!pilot || pilot == null)
user.stop_pulling()
- occupant = user
+ pilot = user
+ user.forceMove(src)
+ add_fingerprint(user)
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return
+ if(passengers.len < max_passengers)
+ user.stop_pulling()
+ passengers += user
user.forceMove(src)
add_fingerprint(user)
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
else
- to_chat(user, "[occupant] was faster. Try better next time, loser.")
- else
- to_chat(user, "You stop entering \the [src].")
-
- else if(!occupant2)
- visible_message("[user] starts to climb into \the [src].")
- if(do_after(user, 40, target = src))
- if(!occupant2)
- user.stop_pulling()
- occupant2 = user
- user.forceMove(src)
- add_fingerprint(user)
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- else
- to_chat(user, "[occupant] was faster. Try better next time, loser.")
+ to_chat(user, "You were too slow. Try better next time, loser.")
else
to_chat(user, "You stop entering \the [src].")
else
to_chat(user, "You can't fit in \the [src], it's full!")
-/obj/spacepod/proc/occupant_sanity_check()
- if(occupant)
- if(!ismob(occupant))
- occupant.forceMove(get_turf(src))
- log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [occupant], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
- occupant = null
- else if(occupant.loc != src)
- log_debug("##SPACEPOD WARNING: OCCUPANT [occupant] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
- occupant = null
- if(occupant2)
- if(!ismob(occupant2))
- occupant2.forceMove(get_turf(src))
- log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [occupant2], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
- occupant2 = null
- else if(occupant2.loc != src)
- log_debug("##SPACEPOD WARNING: OCCUPANT [occupant2] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
- occupant2 = null
+/obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor
+ if(passengers)
+ if(passengers.len > max_passengers)
+ for(var/i = passengers.len; i <= max_passengers; i--)
+ var/mob/occupant = passengers[i - 1]
+ occupant.forceMove(get_turf(src))
+ log_debug("##SPACEPOD WARNING: passengers EXCEED CAP: MAX passengers [max_passengers], passengers [english_list(passengers)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
+ passengers[i - 1] = null
+ for(var/mob/M in passengers)
+ if(!ismob(M))
+ M.forceMove(get_turf(src))
+ log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [M], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
+ passengers -= M
+ else if(M.loc != src)
+ log_debug("##SPACEPOD WARNING: OCCUPANT [M] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]")
+ passengers -= M
/obj/spacepod/verb/exit_pod()
set name = "Exit pod"
@@ -686,64 +724,34 @@
set src = usr.loc
var/mob/user = usr
- var/spos = 0
if(!istype(user))
return
- occupant_sanity_check()
-
- if(occupant == user) spos = 1
- if(occupant2 == user) spos = 2
-
- switch(spos)
- if(0) return
- if(1)
- if(occupant2)
- to_chat(occupant2, "[occupant.name] climbs out of the pod!")
- occupant.forceMove(src.loc)
- occupant = null
- to_chat(user, "You climb out of \the [src].")
- if(2)
- if(occupant)
- to_chat(occupant, "[occupant2.name] climbs out of the pod!")
- occupant2.forceMove(src.loc)
- occupant2 = null
- to_chat(user, "You climb out of \the [src].")
-
-/obj/spacepod/verb/exit_pod2()
- set name = "Eject Secondary Seat"
- set category = "Spacepod"
- set src = usr.loc
+ if (user.stat != CONSCIOUS || user.incapacitated()) // unconscious and restrained people can't let themselves out
+ return
occupant_sanity_check()
- if(!occupant2)
- to_chat(usr, "There is no one in the second seat.")
- return
+ if(user == pilot)
+ user.forceMove(get_turf(src))
+ pilot = null
+ to_chat(user, "You climb out of \the [src].")
+ if(user in passengers)
+ user.forceMove(get_turf(src))
+ passengers -= user
+ to_chat(user, "You climb out of \the [src].")
- if(usr == occupant2)
- to_chat(usr, "How do you plan to do that? The eject button is out of reach.")
- return
-
- if(usr == occupant)
- to_chat(usr, "You eject [occupant2.name].")
- to_chat(occupant2, "\The [src] ejects you forcefully!")
- inertia_dir = 0
- occupant2.forceMove(src.loc)
- occupant2 = null
-
-/obj/spacepod/verb/locksecondseat()
+/obj/spacepod/verb/lock_pod()
set name = "Lock Doors"
set category = "Spacepod"
set src = usr.loc
- if(CheckIfOccupant2(usr))
- if(!allow2enter)
- to_chat(usr, "You can't [allow2enter ? "lock" : "unlock"] the doors from your seat.")
- return
+ if(usr in passengers && usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
+ return
- allow2enter = !allow2enter
- to_chat(usr, "You [allow2enter ? "unlock" : "lock"] the doors.")
+ unlocked = !unlocked
+ to_chat(usr, "You [unlocked ? "unlock" : "lock"] the doors.")
/obj/spacepod/verb/toggleDoors()
@@ -751,7 +759,10 @@
set category = "Spacepod"
set src = usr.loc
- if(CheckIfOccupant2(usr)) return
+ if(usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
+ return
+
for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src))
var/mob/living/carbon/human/L = usr
if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
@@ -761,41 +772,53 @@
else
P.close()
return 1
+ for(var/mob/living/carbon/human/O in passengers)
+ if(P.check_access(O.get_active_hand()) || P.check_access(O.wear_id))
+ if(P.density)
+ P.open()
+ return 1
+ else
+ P.close()
+ return 1
to_chat(usr, "Access denied.")
return
to_chat(usr, "You are not close to any pod doors.")
- return
-
/obj/spacepod/verb/fireWeapon()
- if(!CheckIfOccupant2(usr))
- set name = "Fire Pod Weapons"
- set desc = "Fire the weapons."
- set category = "Spacepod"
- set src = usr.loc
- if(!equipment_system.weapon_system)
- to_chat(usr, "\The [src] has no weapons!")
- return
- equipment_system.weapon_system.fire_weapons()
+ set name = "Fire Pod Weapons"
+ set desc = "Fire the weapons."
+ set category = "Spacepod"
+ set src = usr.loc
+ if(usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
+ return
+ if(!equipment_system.weapon_system)
+ to_chat(usr, "\The [src] has no weapons!")
+ return
+ equipment_system.weapon_system.fire_weapons()
/obj/spacepod/verb/unload()
- if(!CheckIfOccupant2(usr))
- set name = "Unload Cargo"
- set desc = "Unloads the cargo"
- set category = "Spacepod"
- set src = usr.loc
- if(!equipment_system.cargo_system)
- to_chat(usr, "\The [src] has no cargo system!")
- return
- equipment_system.cargo_system.unload()
+ set name = "Unload Cargo"
+ set desc = "Unloads the cargo"
+ set category = "Spacepod"
+ set src = usr.loc
+ if(usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
+ return
+ if(!equipment_system.cargo_system)
+ to_chat(usr, "\The [src] has no cargo system!")
+ return
+ equipment_system.cargo_system.unload()
/obj/spacepod/verb/toggleLights()
set name = "Toggle Lights"
set category = "Spacepod"
set src = usr.loc
- if(!CheckIfOccupant2(usr))
- lightsToggle()
+ if(usr != src.pilot)
+ to_chat(usr, "You can't reach the controls from your chair")
+ return
+ lightsToggle()
/obj/spacepod/proc/lightsToggle()
lights = !lights
@@ -803,8 +826,30 @@
set_light(lights_power)
else
set_light(0)
- to_chat(occupant, "Toggled lights [lights ? "on" : "off"].")
- return
+ to_chat(usr, "Lights toggled [lights ? "on" : "off"].")
+ for(var/mob/M in passengers)
+ to_chat(M, "Lights toggled [lights ? "on" : "off"].")
+
+/obj/spacepod/verb/checkSeat()
+ set name = "Check under Seat"
+ set category = "Spacepod"
+ set src = usr.loc
+ var/mob/user = usr
+ to_chat(user, "You start rooting around under the seat for lost items")
+ if(do_after(user, 40, target = src))
+ var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + passengers + equipment_system.installed_modules
+ var/list/true_contents = contents - badlist
+ if(true_contents.len > 0)
+ var/obj/I = pick(true_contents)
+ if(user.put_in_any_hand_if_possible(I))
+ src.contents -= I
+ to_chat(user, "You find a [I] [pick("under the seat", "under the console", "in the mainenance access")]!")
+ else
+ to_chat(user, "You think you saw something shiny, but you can't reach it!")
+ else
+ to_chat(user, "You fail to find anything of value.")
+ else
+ to_chat(user, "You decide against searching the [src]")
/obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5)
var/delayfraction = delay/numticks
@@ -825,7 +870,6 @@
if(spacepod.cabin_air && spacepod.cabin_air.return_volume() > 0)
var/delta = spacepod.cabin_air.temperature - T20C
spacepod.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1)))
- return
/datum/global_iterator/pod_tank_give_air
delay = 15
@@ -858,11 +902,11 @@
qdel(removed)
else
return stop()
- return
/obj/spacepod/relaymove(mob/user, direction)
- if(!CheckIfOccupant2(user))
- handlerelaymove(user, direction)
+ if(usr != src.pilot)
+ return
+ handlerelaymove(user, direction)
/obj/spacepod/proc/handlerelaymove(mob/user, direction)
if(world.time < next_move)
@@ -909,15 +953,6 @@
battery.charge = max(0, battery.charge - 1)
next_move = world.time + move_delay
-/obj/spacepod/proc/CheckIfOccupant2(mob/user)
- if(!src.occupant2)
- return 0
- if(src.occupant2)
- if(user == src.occupant2)
- return 1
- else
- return 0
-
/obj/effect/landmark/spacepod/random
name = "spacepod spawner"
invisibility = 101
@@ -929,4 +964,4 @@
..()
#undef DAMAGE
-#undef FIRE
+#undef FIRE
\ No newline at end of file
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 338b56148ee..6e749fc11ec 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/vehicles/spacepod.dmi b/icons/vehicles/spacepod.dmi
index e55085622c9..54edb864aba 100644
Binary files a/icons/vehicles/spacepod.dmi and b/icons/vehicles/spacepod.dmi differ
diff --git a/paradise.dme b/paradise.dme
index b9046da178d..bf55518d633 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -981,11 +981,6 @@
#include "code\game\turfs\unsimulated\beach.dm"
#include "code\game\turfs\unsimulated\floor.dm"
#include "code\game\turfs\unsimulated\walls.dm"
-#include "code\game\vehicles\spacepods\construction.dm"
-#include "code\game\vehicles\spacepods\equipment.dm"
-#include "code\game\vehicles\spacepods\parts.dm"
-#include "code\game\vehicles\spacepods\pod_fabricator.dm"
-#include "code\game\vehicles\spacepods\spacepod.dm"
#include "code\game\verbs\ooc.dm"
#include "code\game\verbs\suicide.dm"
#include "code\game\verbs\who.dm"
@@ -1975,6 +1970,12 @@
#include "code\modules\shuttle\supply.dm"
#include "code\modules\shuttle\syndicate.dm"
#include "code\modules\space_transition\space_transition.dm"
+#include "code\modules\spacepods\construction.dm"
+#include "code\modules\spacepods\equipment.dm"
+#include "code\modules\spacepods\lock_buster.dm"
+#include "code\modules\spacepods\parts.dm"
+#include "code\modules\spacepods\pod_fabricator.dm"
+#include "code\modules\spacepods\spacepod.dm"
#include "code\modules\store\items.dm"
#include "code\modules\store\store.dm"
#include "code\modules\surgery\bones.dm"