diff --git a/baystation12.dme b/baystation12.dme
index a6894bb4c1c..7c0c1425ac1 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -438,9 +438,9 @@
#include "code\game\mecha\equipment\tools\medical_tools.dm"
#include "code\game\mecha\equipment\tools\tools.dm"
#include "code\game\mecha\equipment\weapons\weapons.dm"
-#include "code\game\mecha\hoverpod\hoverpod.dm"
#include "code\game\mecha\medical\medical.dm"
#include "code\game\mecha\medical\odysseus.dm"
+#include "code\game\mecha\working\hoverpod.dm"
#include "code\game\mecha\working\ripley.dm"
#include "code\game\mecha\working\working.dm"
#include "code\game\objects\empulse.dm"
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index cf85a5bf059..12925ffc613 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -628,7 +628,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
/datum/supply_packs/hoverpod
name = "Hoverpod Shipment"
contains = list()
- cost = 75
+ cost = 80
containertype = /obj/structure/largecrate/hoverpod
containername = "Hoverpod Crate"
group = "Operations"
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 42f5debc622..960f6d99c88 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -5,7 +5,7 @@
energy_drain = 10
var/dam_force = 20
var/obj/mecha/working/ripley/cargo_holder
- required_type = list(/obj/mecha/working, /obj/mecha/hoverpod) //so that hoverpods are a bit more useful as space transportation
+ required_type = /obj/mecha/working
attach(obj/mecha/M as obj)
..()
@@ -70,7 +70,7 @@
equip_cooldown = 30
energy_drain = 10
force = 15
- required_type = list(/obj/mecha/working, /obj/mecha/combat)
+ required_type = list(/obj/mecha/working/ripley, /obj/mecha/combat)
action(atom/target)
if(!action_checks(target)) return
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 50cce47271e..da6188263a3 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -10,7 +10,7 @@
var/fire_sound //Sound played while firing.
var/fire_volume = 50 //How loud it is played.
var/auto_rearm = 0 //Does the weapon reload itself after each shot?
- required_type = /obj/mecha/combat
+ required_type = list(/obj/mecha/combat, /obj/mecha/working/hoverpod/combatpod)
/obj/item/mecha_parts/mecha_equipment/weapon/action_checks(atom/target)
if(projectiles <= 0)
diff --git a/code/game/mecha/hoverpod/hoverpod.dm b/code/game/mecha/hoverpod/hoverpod.dm
deleted file mode 100644
index e44feccca63..00000000000
--- a/code/game/mecha/hoverpod/hoverpod.dm
+++ /dev/null
@@ -1,134 +0,0 @@
-/obj/mecha/hoverpod
- desc = "Stubby and round, this space-capable craft is an ancient favorite."
- name = "Hover Pod"
- icon_state = "engineering_pod"
- initial_icon = "engineering_pod"
- internal_damage_threshold = 80
- step_in = 4
- step_energy_drain = 10
- max_temperature = 20000
- health = 150
- infra_luminosity = 6
- wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
- var/list/cargo = new
- var/cargo_capacity = 3
- max_equip = 2
- var/datum/effect/effect/system/ion_trail_follow/ion_trail
-
-/obj/mecha/hoverpod/New()
- ..()
- var/turf/T = get_turf(src)
- if(T.z != 2)
- new /obj/item/mecha_parts/mecha_tracking(src)
-
- ion_trail = new /datum/effect/effect/system/ion_trail_follow()
- ion_trail.set_up(src)
- ion_trail.start()
-
-/obj/mecha/hoverpod/range_action(atom/target as obj|mob|turf)
- return
-
-//No space drifting
-/obj/mecha/hoverpod/check_for_support()
- //does the hoverpod have enough charge left to stabilize itself?
- if (has_charge(step_energy_drain))
- if (!ion_trail.on)
- ion_trail.start()
- return 1
-
- ion_trail.stop()
- return ..()
-
-//these three procs overriden to play different sounds
-/obj/mecha/hoverpod/mechturn(direction)
- dir = direction
- //playsound(src,'sound/machines/hiss.ogg',40,1)
- return 1
-
-/obj/mecha/hoverpod/mechstep(direction)
- var/result = step(src,direction)
- if(result)
- playsound(src,'sound/machines/hiss.ogg',40,1)
- return result
-
-
-/obj/mecha/hoverpod/mechsteprand()
- var/result = step_rand(src)
- if(result)
- playsound(src,'sound/machines/hiss.ogg',40,1)
- return result
-
-/obj/mecha/hoverpod/Exit(atom/movable/O)
- if(O in cargo)
- return 0
- return ..()
-
-/obj/mecha/hoverpod/Topic(href, href_list)
- ..()
- if(href_list["drop_from_cargo"])
- var/obj/O = locate(href_list["drop_from_cargo"])
- if(O && O in src.cargo)
- src.occupant_message("\blue You unload [O].")
- O.loc = get_turf(src)
- src.cargo -= O
- var/turf/T = get_turf(O)
- if(T)
- T.Entered(O)
- src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
- return
-
-
-/obj/mecha/hoverpod/get_stats_part()
- var/output = ..()
- output += "Cargo Compartment Contents:
"
- if(src.cargo.len)
- for(var/obj/O in src.cargo)
- output += "
Unload : [O]
"
- else
- output += "Nothing"
- output += "
"
- return output
-
-/obj/mecha/hoverpod/Del()
- for(var/mob/M in src)
- if(M==src.occupant)
- continue
- M.loc = get_turf(src)
- M.loc.Entered(M)
- step_rand(M)
- for(var/atom/movable/A in src.cargo)
- A.loc = get_turf(src)
- var/turf/T = get_turf(A)
- if(T)
- T.Entered(A)
- step_rand(A)
- ..()
- return
-
-//Hoverpod variants
-
-/* Commented out the combatpod as they can't reattach their equipment if it ever gets dropped,
- * and making a special exception for them seems lame.
-/obj/mecha/hoverpod/combatpod
- desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon.
- name = "Combat Hoverpod"
- health = 200
- internal_damage_threshold = 35
-
-/obj/mecha/hoverpod/combatpod/New()
- ..()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
- ME.attach(src)
- ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
- ME.attach(src)
-*/
-
-/obj/mecha/hoverpod/shuttlepod
- desc = "Who knew a tiny ball could fit three people?"
-
-/obj/mecha/hoverpod/shuttlepod/New()
- ..()
- var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
- ME.attach(src)
- ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
- ME.attach(src)
\ No newline at end of file
diff --git a/code/game/mecha/working/hoverpod.dm b/code/game/mecha/working/hoverpod.dm
new file mode 100644
index 00000000000..5f775d619b5
--- /dev/null
+++ b/code/game/mecha/working/hoverpod.dm
@@ -0,0 +1,102 @@
+/obj/mecha/working/hoverpod
+ desc = "Stubby and round, this space-capable craft is an ancient favorite."
+ name = "Hover Pod"
+ icon_state = "engineering_pod"
+ initial_icon = "engineering_pod"
+ internal_damage_threshold = 80
+ step_in = 4
+ step_energy_drain = 15
+ max_temperature = 20000
+ health = 150
+ infra_luminosity = 6
+ wreckage = /obj/effect/decal/mecha_wreckage/hoverpod
+ cargo_capacity = 5
+ max_equip = 3
+ var/datum/effect/effect/system/ion_trail_follow/ion_trail
+ var/stabilization_enabled = 1
+
+/obj/mecha/working/hoverpod/New()
+ ..()
+ ion_trail = new /datum/effect/effect/system/ion_trail_follow()
+ ion_trail.set_up(src)
+ ion_trail.start()
+
+//Modified phazon code
+/obj/mecha/working/hoverpod/Topic(href, href_list)
+ ..()
+ if (href_list["toggle_stabilization"])
+ stabilization_enabled = !stabilization_enabled
+ send_byjax(src.occupant,"exosuit.browser","stabilization_command","[stabilization_enabled?"Dis":"En"]able thruster stabilization")
+ src.occupant_message("\blue Thruster stabilization [stabilization_enabled? "enabled" : "disabled"].")
+ return
+
+/obj/mecha/working/hoverpod/get_commands()
+ var/output = {"
+ "}
+ output += ..()
+ return output
+
+//No space drifting
+/obj/mecha/working/hoverpod/check_for_support()
+ //does the hoverpod have enough charge left to stabilize itself?
+ if (!has_charge(step_energy_drain))
+ ion_trail.stop()
+ else
+ if (!ion_trail.on)
+ ion_trail.start()
+ if (stabilization_enabled)
+ return 1
+
+ return ..()
+
+//these three procs overriden to play different sounds
+/obj/mecha/working/hoverpod/mechturn(direction)
+ dir = direction
+ //playsound(src,'sound/machines/hiss.ogg',40,1)
+ return 1
+
+/obj/mecha/working/hoverpod/mechstep(direction)
+ var/result = step(src,direction)
+ if(result)
+ playsound(src,'sound/machines/hiss.ogg',40,1)
+ return result
+
+
+/obj/mecha/working/hoverpod/mechsteprand()
+ var/result = step_rand(src)
+ if(result)
+ playsound(src,'sound/machines/hiss.ogg',40,1)
+ return result
+
+
+//Hoverpod variants
+/obj/mecha/working/hoverpod/combatpod
+ desc = "An ancient, run-down combat spacecraft." // Ideally would have a seperate icon.
+ name = "Combat Hoverpod"
+ health = 200
+ internal_damage_threshold = 35
+ cargo_capacity = 2
+ max_equip = 2
+
+/obj/mecha/working/hoverpod/combatpod/New()
+ ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
+ ME.attach(src)
+
+
+/obj/mecha/working/hoverpod/shuttlepod
+ desc = "Who knew a tiny ball could fit three people?"
+
+/obj/mecha/working/hoverpod/shuttlepod/New()
+ ..()
+ var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
+ ME.attach(src)
+ ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
+ ME.attach(src)
\ No newline at end of file
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index e445e94465b..5beb3c7244f 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -7,14 +7,7 @@
max_temperature = 20000
health = 200
wreckage = /obj/effect/decal/mecha_wreckage/ripley
- var/list/cargo = new
- var/cargo_capacity = 10
-
-/*
-/obj/mecha/working/ripley/New()
- ..()
- return
-*/
+ cargo_capacity = 10
/obj/mecha/working/ripley/firefighter
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
@@ -63,50 +56,4 @@
for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily
del (B)
-/obj/mecha/working/ripley/Exit(atom/movable/O)
- if(O in cargo)
- return 0
- return ..()
-/obj/mecha/working/ripley/Topic(href, href_list)
- ..()
- if(href_list["drop_from_cargo"])
- var/obj/O = locate(href_list["drop_from_cargo"])
- if(O && O in src.cargo)
- src.occupant_message("\blue You unload [O].")
- O.loc = get_turf(src)
- src.cargo -= O
- var/turf/T = get_turf(O)
- if(T)
- T.Entered(O)
- src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
- return
-
-
-
-/obj/mecha/working/ripley/get_stats_part()
- var/output = ..()
- output += "Cargo Compartment Contents:"
- if(src.cargo.len)
- for(var/obj/O in src.cargo)
- output += "
Unload : [O]
"
- else
- output += "Nothing"
- output += "
"
- return output
-
-/obj/mecha/working/ripley/Del()
- for(var/mob/M in src)
- if(M==src.occupant)
- continue
- M.loc = get_turf(src)
- M.loc.Entered(M)
- step_rand(M)
- for(var/atom/movable/A in src.cargo)
- A.loc = get_turf(src)
- var/turf/T = get_turf(A)
- if(T)
- T.Entered(A)
- step_rand(A)
- ..()
- return
\ No newline at end of file
diff --git a/code/game/mecha/working/working.dm b/code/game/mecha/working/working.dm
index ad66d310321..83df31f8c19 100644
--- a/code/game/mecha/working/working.dm
+++ b/code/game/mecha/working/working.dm
@@ -1,5 +1,7 @@
/obj/mecha/working
internal_damage_threshold = 60
+ var/list/cargo = new
+ var/cargo_capacity = 5
/obj/mecha/working/New()
..()
@@ -8,27 +10,51 @@
new /obj/item/mecha_parts/mecha_tracking(src)
return
-/*
-/obj/mecha/working/melee_action(atom/target as obj|mob|turf)
- if(internal_damage&MECHA_INT_CONTROL_LOST)
- target = pick(oview(1,src))
- if(selected_tool)
- selected_tool.action(target)
- return
-*/
-
-/obj/mecha/working/range_action(atom/target as obj|mob|turf)
+/obj/mecha/working/Del()
+ for(var/mob/M in src)
+ if(M==src.occupant)
+ continue
+ M.loc = get_turf(src)
+ M.loc.Entered(M)
+ step_rand(M)
+ for(var/atom/movable/A in src.cargo)
+ A.loc = get_turf(src)
+ var/turf/T = get_turf(A)
+ if(T)
+ T.Entered(A)
+ step_rand(A)
+ ..()
return
-/*
+/obj/mecha/working/Topic(href, href_list)
+ ..()
+ if(href_list["drop_from_cargo"])
+ var/obj/O = locate(href_list["drop_from_cargo"])
+ if(O && O in src.cargo)
+ src.occupant_message("\blue You unload [O].")
+ O.loc = get_turf(src)
+ src.cargo -= O
+ var/turf/T = get_turf(O)
+ if(T)
+ T.Entered(O)
+ src.log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - src.cargo.len]")
+ return
+
+/obj/mecha/working/Exit(atom/movable/O)
+ if(O in cargo)
+ return 0
+ return ..()
+
/obj/mecha/working/get_stats_part()
var/output = ..()
- output += "[src.name] Tools:"
- if(equipment.len)
- for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment)
- output += "[selected==MT?"
":""][MT.get_equip_info()][selected==MT?"":""]
"
+ output += "
Cargo Compartment Contents:"
+ if(src.cargo.len)
+ for(var/obj/O in src.cargo)
+ output += "
Unload : [O]
"
else
- output += "None"
+ output += "Nothing"
output += "
"
return output
-*/
\ No newline at end of file
+
+/obj/mecha/working/range_action(atom/target as obj|mob|turf)
+ return
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 2923ba2321b..1958bac750c 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -70,5 +70,11 @@
/obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/crowbar))
- new /obj/mecha/hoverpod(loc)
+ var/obj/item/mecha_parts/mecha_equipment/ME
+ var/obj/mecha/working/hoverpod/H = new (loc)
+
+ ME = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
+ ME.attach(H)
+ ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
+ ME.attach(H)
..()
\ No newline at end of file