diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index e41bfee03fd..bc2eac85f08 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -12,6 +12,7 @@
layer = 3.9
infra_luminosity = 15
var/mob/living/carbon/occupant
+ var/mob/living/carbon/occupant2 //two seaters
var/datum/spacepod/equipment/equipment_system
var/obj/item/weapon/cell/high/battery
var/datum/gas_mixture/cabin_air
@@ -27,6 +28,7 @@
var/health = 100
var/lights = 0
var/lights_power = 6
+ var/allow2enter = 1
/obj/spacepod/New()
. = ..()
@@ -77,19 +79,27 @@
S.channel = 0 //Any channel
S.volume = 50
occupant << S
+ if(occupant2)
+ occupant2 << S
if(occupant && oldhealth > health && !health)
var/sound/S = sound('sound/effects/engine_alert1.ogg')
S.wait = 0
S.channel = 0
S.volume = 50
occupant << S
+ if(occupant2)
+ occupant2 << S
if(!health)
spawn(0)
if(occupant)
+ if(occupant2)
+ occupant2 << "Critical damage to the vessel detected, core explosion imminent!"
occupant << "Critical damage to the vessel detected, core explosion imminent!"
for(var/i = 10, i >= 0; --i)
if(occupant)
occupant << "[i]"
+ if(occupant2)
+ occupant2 << "[i]"
if(i == 0)
explosion(loc, 2, 4, 8)
sleep(10)
@@ -100,10 +110,15 @@
switch(severity)
if(1)
var/mob/living/carbon/human/H = occupant
+ var/mob/living/carbon/human/H2 = occupant2
if(H)
H.loc = get_turf(src)
H.ex_act(severity + 1)
H << "You are forcefully thrown from \the [src]!"
+ if(H2)
+ H2.loc = get_turf(src)
+ H2.ex_act(severity + 1)
+ H2 << "You are forcefully thrown from \the [src]!"
del(ion_trail)
del(src)
if(2)
@@ -297,40 +312,91 @@
return
/obj/spacepod/proc/moved_inside(var/mob/living/carbon/human/H as mob)
+ var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
+ if(fukkendisk)
+ usr << "\red The nuke-disk locks the door as you try to get in. You evil person."
+ return
+
if(H && H.client && H in range(1))
- H.reset_view(src)
- /*
- H.client.perspective = EYE_PERSPECTIVE
- H.client.eye = src
- */
- H.stop_pulling()
- H.forceMove(src)
- src.occupant = H
- src.add_fingerprint(H)
- src.forceMove(src.loc)
- //dir = dir_in
- playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
- return 1
+ if(src.occupant)
+ H.reset_view(src)
+ /*
+ H.client.perspective = EYE_PERSPECTIVE
+ H.client.eye = src
+ */
+ H.stop_pulling()
+ H.forceMove(src)
+ src.occupant2 = H
+ src.add_fingerprint(H)
+ src.forceMove(src.loc)
+ //dir = dir_in
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return 1
+
+ else
+ H.reset_view(src)
+ /*
+ H.client.perspective = EYE_PERSPECTIVE
+ H.client.eye = src
+ */
+ H.stop_pulling()
+ H.forceMove(src)
+ src.occupant = H
+ src.add_fingerprint(H)
+ src.forceMove(src.loc)
+ //dir = dir_in
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return 1
else
return 0
+/obj/spacepod/proc/moved_other_inside(var/mob/living/carbon/human/H as mob)
+ H.reset_view(src)
+ H.stop_pulling()
+ H.forceMove(src)
+ src.occupant2 = H
+ src.forceMove(src.loc)
+ playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
+ return 1
+
+
+
/obj/spacepod/MouseDrop_T(mob/M as mob, mob/user as mob)
if(M != user)
- return
- move_inside(M, user)
+ if(M.stat != 0)
+ move_inside(M, user)
+ else
+ return
+ else
+ move_inside(M, user)
+
/obj/spacepod/verb/move_inside()
set category = "Object"
set name = "Enter Pod"
set src in oview(1)
+ var/fukkendisk = usr.GetTypeInAllContents(/obj/item/weapon/disk/nuclear)
+
+ if(fukkendisk)
+ usr << "\red The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod."
+ return
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
return
if (usr.stat || !ishuman(usr))
return
if (src.occupant)
- usr << "\blue The [src.name] is already occupied!"
- return
+ if(allow2enter)
+ usr << "\blue You starts climbing into the secondary seat."
+ visible_message("\blue [usr] starts to climb into [src.name]")
+ if(enter_after(40,usr))
+ moved_inside(usr)
+ else
+ usr << "You stop entering the spacepod."
+ return
+ else
+ usr << "\red The [src.name]'s doors are locked."
+ return
/*
if (usr.abiotic())
usr << "\blue Subject cannot have abiotic items on."
@@ -359,53 +425,155 @@
set src = usr.loc
if(usr != src.occupant)
+ if(src.occupant2)
+ if(usr != src.occupant2)
+ return
+ else
+ inertia_dir = 0 // engage reverse thruster and power down pod
+ src.occupant2.loc = src.loc
+ src.occupant2 = null
+ usr << "You climb out of the pod"
+
+ else
+ return
+ else
+ inertia_dir = 0 // engage reverse thruster and power down pod
+ src.occupant.loc = src.loc
+ src.occupant = null
+ usr << "You climb out of the pod"
return
- inertia_dir = 0 // engage reverse thruster and power down pod
- src.occupant.loc = src.loc
- src.occupant = null
- usr << "You climb out of the pod"
- return
+
+/obj/spacepod/verb/exit_pod2()
+ if(!src.occupant2)
+ set hidden = 1
+ return
+ else
+ set name = "Eject Secondary Seat"
+ set category = "Spacepod"
+ set src = usr.loc
+ set hidden = 0
+
+ if(usr.ckey == src.occupant2.ckey)
+ usr << "Use 'Exit Pod'"
+ return
+ else
+ usr << "You eject [src.occupant2.name]."
+ src.occupant2.visible_message("You were ejected from the pod!")
+ inertia_dir = 0 // engage reverse thruster and power down pod
+ src.occupant2.loc = src.loc
+ src.occupant2 = null
+
+
+/obj/spacepod/verb/locksecondseat()
+ set name = "Lock Doors"
+ set category = "Spacepod"
+ set src = usr.loc
+
+ if(usr.ckey == src.occupant2.ckey)
+ if(!allow2enter)
+ usr << "You can't unlock the doors from your seat. "
+ return
+ else
+ usr << "You can't lock the doors from your seat. "
+ return
+ else
+ if(src.allow2enter)
+ src.allow2enter = 0
+ usr << "You lock the doors."
+ else
+ src.allow2enter = 1
+ usr << "You unlock the doors."
/obj/spacepod/verb/toggleDoors()
- set name = "Toggle Nearby Pod Doors"
- set category = "Spacepod"
- set src = usr.loc
+ if(src.occupant2)
+ if(usr.ckey != src.occupant2.ckey)
+ set name = "Toggle Nearby Pod Doors"
+ set category = "Spacepod"
+ set src = usr.loc
- for(var/obj/machinery/door/poddoor/P in oview(3,src))
- if(istype(P, /obj/machinery/door/poddoor/three_tile_hor) || istype(P, /obj/machinery/door/poddoor/three_tile_ver) || istype(P, /obj/machinery/door/poddoor/four_tile_hor) || istype(P, /obj/machinery/door/poddoor/four_tile_ver))
- var/mob/living/carbon/human/L = usr
- if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
- if(P.density)
- P.open()
- return 1
- else
- P.close()
- return 1
- usr << "Access denied."
+ for(var/obj/machinery/door/poddoor/P in oview(3,src))
+ if(istype(P, /obj/machinery/door/poddoor/three_tile_hor) || istype(P, /obj/machinery/door/poddoor/three_tile_ver) || istype(P, /obj/machinery/door/poddoor/four_tile_hor) || istype(P, /obj/machinery/door/poddoor/four_tile_ver))
+ var/mob/living/carbon/human/L = usr
+ if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
+ if(P.density)
+ P.open()
+ return 1
+ else
+ P.close()
+ return 1
+ usr << "Access denied."
+ return
+ usr << "You are not close to any pod doors."
return
- usr << "You are not close to any pod doors."
- return
+ else
+ return
+ else
+ set name = "Toggle Nearby Pod Doors"
+ set category = "Spacepod"
+ set src = usr.loc
+
+ for(var/obj/machinery/door/poddoor/P in oview(3,src))
+ if(istype(P, /obj/machinery/door/poddoor/three_tile_hor) || istype(P, /obj/machinery/door/poddoor/three_tile_ver) || istype(P, /obj/machinery/door/poddoor/four_tile_hor) || istype(P, /obj/machinery/door/poddoor/four_tile_ver))
+ var/mob/living/carbon/human/L = usr
+ if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id))
+ if(P.density)
+ P.open()
+ return 1
+ else
+ P.close()
+ return 1
+ usr << "Access denied."
+ return
+ usr << "You are not close to any pod doors."
+ return
/obj/spacepod/verb/fireWeapon()
- set name = "Fire Pod Weapons"
- set desc = "Fire the weapons."
- set category = "Spacepod"
- set src = usr.loc
- equipment_system.weapon_system.fire_weapons()
+ if(src.occupant2)
+ if(usr.ckey != src.occupant2.ckey)
+ set name = "Fire Pod Weapons"
+ set desc = "Fire the weapons."
+ set category = "Spacepod"
+ set src = usr.loc
+ equipment_system.weapon_system.fire_weapons()
+ else
+ return
+ else
+ set name = "Fire Pod Weapons"
+ set desc = "Fire the weapons."
+ set category = "Spacepod"
+ set src = usr.loc
+ equipment_system.weapon_system.fire_weapons()
obj/spacepod/verb/toggleLights()
- set name = "Toggle Lights"
- set category = "Spacepod"
- set src = usr.loc
- if (usr != occupant)
- return
- lights = !lights
- if(lights)
- SetLuminosity(luminosity + lights_power)
+ if(src.occupant2)
+ if(usr.ckey != src.occupant2.ckey)
+ set name = "Toggle Lights"
+ set category = "Spacepod"
+ set src = usr.loc
+ if (usr != occupant)
+ return
+ lights = !lights
+ if(lights)
+ SetLuminosity(luminosity + lights_power)
+ else
+ SetLuminosity(luminosity - lights_power)
+ occupant << "Toggled lights [lights?"on":"off"]."
+ return
+ else
+ return
else
- SetLuminosity(luminosity - lights_power)
- occupant << "Toggled lights [lights?"on":"off"]."
- return
+ set name = "Toggle Lights"
+ set category = "Spacepod"
+ set src = usr.loc
+ if (usr != occupant)
+ return
+ lights = !lights
+ if(lights)
+ SetLuminosity(luminosity + lights_power)
+ else
+ SetLuminosity(luminosity - lights_power)
+ occupant << "Toggled lights [lights?"on":"off"]."
+ return
/obj/spacepod/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5)
var/delayfraction = delay/numticks
@@ -480,41 +648,82 @@ obj/spacepod/verb/toggleLights()
return 1
/obj/spacepod/relaymove(mob/user, direction)
- var/moveship = 1
- if(battery && battery.charge >= 3 && health)
- src.dir = direction
- switch(direction)
- if(1)
- if(inertia_dir == 2)
- inertia_dir = 0
- moveship = 0
- if(2)
- if(inertia_dir == 1)
- inertia_dir = 0
- moveship = 0
- if(4)
- if(inertia_dir == 8)
- inertia_dir = 0
- moveship = 0
- if(8)
- if(inertia_dir == 4)
- inertia_dir = 0
- moveship = 0
- if(moveship)
- step(src, direction)
- if(istype(src.loc, /turf/space))
- inertia_dir = direction
- else
- if(!battery)
- user << "No energy cell detected."
- else if(battery.charge < 3)
- user << "Not enough charge left."
- else if(!health)
- user << "She's dead, Jim"
+ if(src.occupant2)
+ if(user.ckey != src.occupant2.ckey)
+ var/moveship = 1
+ if(battery && battery.charge >= 3 && health)
+ src.dir = direction
+ switch(direction)
+ if(1)
+ if(inertia_dir == 2)
+ inertia_dir = 0
+ moveship = 0
+ if(2)
+ if(inertia_dir == 1)
+ inertia_dir = 0
+ moveship = 0
+ if(4)
+ if(inertia_dir == 8)
+ inertia_dir = 0
+ moveship = 0
+ if(8)
+ if(inertia_dir == 4)
+ inertia_dir = 0
+ moveship = 0
+ if(moveship)
+ step(src, direction)
+ if(istype(src.loc, /turf/space))
+ inertia_dir = direction
+ else
+ if(!battery)
+ user << "No energy cell detected."
+ else if(battery.charge < 3)
+ user << "Not enough charge left."
+ else if(!health)
+ user << "She's dead, Jim"
+ else
+ user << "Unknown error has occurred, yell at pomf."
+ return 0
+ battery.charge = max(0, battery.charge - 3)
else
- user << "Unknown error has occurred, yell at pomf."
- return 0
- battery.charge = max(0, battery.charge - 3)
+ return
+
+ else
+ var/moveship = 1
+ if(battery && battery.charge >= 3 && health)
+ src.dir = direction
+ switch(direction)
+ if(1)
+ if(inertia_dir == 2)
+ inertia_dir = 0
+ moveship = 0
+ if(2)
+ if(inertia_dir == 1)
+ inertia_dir = 0
+ moveship = 0
+ if(4)
+ if(inertia_dir == 8)
+ inertia_dir = 0
+ moveship = 0
+ if(8)
+ if(inertia_dir == 4)
+ inertia_dir = 0
+ moveship = 0
+ if(moveship)
+ step(src, direction)
+ if(istype(src.loc, /turf/space))
+ inertia_dir = direction
+ else
+ if(!battery)
+ user << "No energy cell detected."
+ else if(battery.charge < 3)
+ user << "Not enough charge left."
+ else if(!health)
+ user << "She's dead, Jim"
+ else
+ user << "Unknown error has occurred, yell at pomf."
+ return 0
+ battery.charge = max(0, battery.charge - 3)
/obj/effect/landmark/spacepod/random
name = "spacepod spawner"