From 61b1ac947a9718257a2e23d4f4d624fdff623e6e Mon Sep 17 00:00:00 2001
From: CHOMPStation2StaffMirrorBot
<94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com>
Date: Sun, 5 Jan 2025 15:02:12 -0700
Subject: [PATCH] [MIRROR] Improved/Buildable Fighter Exosuits (#9801)
Co-authored-by: Aroliacue <96730930+Aroliacue@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
---
code/__defines/exosuit_fab.dm | 8 +-
code/game/mecha/combat/fighter.dm | 47 +-
code/game/mecha/mech_fabricator.dm | 6 +
code/game/mecha/mech_prosthetics.dm | 2 +
code/game/mecha/mecha_construction_paths.dm | 568 ++++++++++++++++++
code/game/mecha/mecha_parts.dm | 117 ++++
.../items/weapons/circuitboards/mecha.dm | 57 +-
.../research/designs/circuits/circuits.dm | 62 ++
code/modules/research/mechfab_designs.dm | 126 ++++
icons/mecha/fighters_construct64x64.dmi | Bin 0 -> 30394 bytes
icons/mecha/fighters_construction64x64.dmi | Bin 0 -> 46241 bytes
sound/mecha/fighter/engine_mid_boost_01.ogg | Bin 0 -> 19713 bytes
.../mecha/fighter/engine_mid_fighter_move.ogg | Bin 0 -> 16696 bytes
13 files changed, 973 insertions(+), 20 deletions(-)
create mode 100644 icons/mecha/fighters_construct64x64.dmi
create mode 100644 icons/mecha/fighters_construction64x64.dmi
create mode 100644 sound/mecha/fighter/engine_mid_boost_01.ogg
create mode 100644 sound/mecha/fighter/engine_mid_fighter_move.ogg
diff --git a/code/__defines/exosuit_fab.dm b/code/__defines/exosuit_fab.dm
index 030c324cd3..e3da26b840 100644
--- a/code/__defines/exosuit_fab.dm
+++ b/code/__defines/exosuit_fab.dm
@@ -35,10 +35,16 @@
#define EXOSUIT_MODULE_DURAND (1<<3)
/// Module is compatible with Phazon Exosuit models
#define EXOSUIT_MODULE_PHAZON (1<<4)
+/// Module is compatible with Pinnace Fighter models
+#define EXOSUIT_MODULE_PINNACE (1<<5)
+/// Module is compatible with Baron Fighter models
+#define EXOSUIT_MODULE_BARON (1<<6)
/// Module is compatible with "Working" Exosuit models - Ripley
#define EXOSUIT_MODULE_WORKING EXOSUIT_MODULE_RIPLEY
/// Module is compatible with "Combat" Exosuit models - Gygax, Durand and Phazon
#define EXOSUIT_MODULE_COMBAT EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON
-/// Module is compatible with "Medical" Exosuit modelsm - Odysseus
+/// Module is compatible with "Medical" Exosuit models - Odysseus
#define EXOSUIT_MODULE_MEDICAL EXOSUIT_MODULE_ODYSSEUS
+/// Module is compatible with "Fighter" Exosuit models - Pinnace, Baron
+#define EXOSUIT_MODULE_FIGHTER EXOSUIT_MODULE_PINNACE | EXOSUIT_MODULE_BARON
diff --git a/code/game/mecha/combat/fighter.dm b/code/game/mecha/combat/fighter.dm
index 8fc517641c..790ef9f1c6 100644
--- a/code/game/mecha/combat/fighter.dm
+++ b/code/game/mecha/combat/fighter.dm
@@ -5,7 +5,7 @@
desc = "The base type of fightercraft. Don't spawn this one!"
var/datum/effect/effect/system/ion_trail_follow/ion_trail
- var/stabilization_enabled = TRUE //If our anti-space-drift is on
+ var/landing_gear_raised = FALSE //If our landing gear for safely crossing ground turfs is on.
var/ground_capable = FALSE //If we can fly over normal turfs and not just space
icon = 'icons/mecha/fighters64x64.dmi' //See ATTRIBUTIONS.md for details on license
@@ -27,8 +27,8 @@
wreckage = /obj/effect/decal/mecha_wreckage/gunpod
- stomp_sound = 'sound/machines/generator/generator_end.ogg'
- swivel_sound = 'sound/machines/hiss.ogg'
+ stomp_sound = 'sound/mecha/fighter/engine_mid_fighter_move.ogg'
+ swivel_sound = 'sound/mecha/fighter/engine_mid_boost_01.ogg'
bound_height = 64
bound_width = 64
@@ -135,17 +135,17 @@
//Modified phazon code
/obj/mecha/combat/fighter/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(span_notice("Thruster stabilization [stabilization_enabled? "enabled" : "disabled"]."))
+ if (href_list["toggle_landing_gear"])
+ landing_gear_raised = !landing_gear_raised
+ send_byjax(src.occupant,"exosuit.browser","landing_gear_command","[landing_gear_raised?"Lower":"Raise"] landing gear")
+ src.occupant_message(span_notice("Landing gear [landing_gear_raised? "raised" : "lowered"]."))
return
/obj/mecha/combat/fighter/get_commands()
var/output = {"
"}
@@ -153,22 +153,28 @@
return output
/obj/mecha/combat/fighter/can_ztravel()
- return (stabilization_enabled && has_charge(step_energy_drain))
+ return (landing_gear_raised && has_charge(step_energy_drain))
// No space drifting
+// This doesnt work but I actually dont want it to anyways, so I'm not touching it at all. Space drifting is cool.
/obj/mecha/combat/fighter/check_for_support()
- if (stabilization_enabled)
+ if (landing_gear_raised)
return 1
return ..()
// No falling if we've got our boosters on
/obj/mecha/combat/fighter/can_fall()
- return (stabilization_enabled && has_charge(step_energy_drain))
+ if(landing_gear_raised && has_charge(step_energy_drain))
+ return FALSE
+ else
+ return TRUE
/obj/mecha/combat/fighter/proc/consider_gravity(var/moved = FALSE)
var/gravity = get_gravity()
- if(gravity && ground_capable && occupant)
+ if (gravity && !landing_gear_raised)
+ playsound(src, 'sound/effects/roll.ogg', 50, 1)
+ else if(gravity && ground_capable && occupant)
start_hover()
else if((!gravity && ground_capable) || !occupant)
stop_hover()
@@ -177,6 +183,11 @@
take_damage(NOGRAV_FIGHTER_DAMAGE, "brute")
playsound(src, 'sound/effects/grillehit.ogg', 50, 1)
+/obj/mecha/combat/fighter/get_step_delay()
+ . = ..()
+ if(get_gravity() && !landing_gear_raised)
+ . += 4
+
/obj/mecha/combat/fighter/handle_equipment_movement()
. = ..()
consider_gravity(TRUE)
@@ -202,7 +213,7 @@
animate(src, pixel_y = old_y, time = 5, easing = SINE_EASING | EASE_IN) //halt animation
/obj/mecha/combat/fighter/check_for_support()
- if (has_charge(step_energy_drain) && stabilization_enabled)
+ if (has_charge(step_energy_drain) && landing_gear_raised)
return 1
var/list/things = orange(1, src)
@@ -241,7 +252,7 @@
var/image/stripe1_overlay
var/image/stripe2_overlay
-/obj/mecha/combat/fighter/gunpod/loaded/Initialize() //Loaded version with gans
+/obj/mecha/combat/fighter/gunpod/loaded/Initialize() //Loaded version with guns
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
ME.attach(src)
@@ -313,7 +324,7 @@
ground_capable = FALSE
-/obj/mecha/combat/fighter/baron/loaded/Initialize() //Loaded version with gans
+/obj/mecha/combat/fighter/baron/loaded/Initialize() //Loaded version with guns
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
ME.attach(src)
@@ -350,7 +361,7 @@
ground_capable = FALSE
-/obj/mecha/combat/fighter/scoralis/loaded/Initialize() //Loaded version with gans
+/obj/mecha/combat/fighter/scoralis/loaded/Initialize() //Loaded version with guns
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
ME.attach(src)
@@ -389,7 +400,7 @@
health = 500
maxhealth = 500
-/obj/mecha/combat/fighter/allure/loaded/Initialize() //Loaded version with gans
+/obj/mecha/combat/fighter/allure/loaded/Initialize() //Loaded version with guns
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/cloak
ME.attach(src)
@@ -429,7 +440,7 @@
ground_capable = TRUE
-/obj/mecha/combat/fighter/pinnace/loaded/Initialize() //Loaded version with gans
+/obj/mecha/combat/fighter/pinnace/loaded/Initialize() //Loaded version with guns
. = ..()
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
ME.attach(src)
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 0e89bcfb94..e9cb47b4e4 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -68,6 +68,8 @@
"Vehicle",
"Rigsuit",
"Phazon",
+ "Pinnace",
+ "Baron",
//"Gopher", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
//"Polecat", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
//"Weasel", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
@@ -184,6 +186,10 @@
category_override += "Durand"
if(mech_types & EXOSUIT_MODULE_PHAZON)
category_override += "Phazon"
+ if(mech_types & EXOSUIT_MODULE_PINNACE)
+ category_override += "Pinnace"
+ if(mech_types & EXOSUIT_MODULE_BARON)
+ category_override += "Baron"
var/list/part = list(
"name" = D.name,
diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm
index e39c6cbb41..af95409564 100644
--- a/code/game/mecha/mech_prosthetics.dm
+++ b/code/game/mecha/mech_prosthetics.dm
@@ -49,6 +49,8 @@
"Vehicle",
"Rigsuit",
"Phazon",
+ "Pinnace",
+ "Baron",
//"Gopher", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
//"Polecat", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
//"Weasel", // VOREStation Add //CHOMPedit commented micromech stuff, because fuck this trash
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index e44e1dc196..b59f8de05f 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -2132,3 +2132,571 @@
..()
feedback_inc("mecha_janus_created",1)
return
+
+//Fighters
+
+//////////////////////
+// Pinnace
+//////////////////////
+/datum/construction/mecha/fighter/pinnace_chassis
+ result = "/obj/mecha/combat/fighter/pinnace"
+ steps = list(list("key"=/obj/item/mecha_parts/fighter/part/pinnace_core),//1
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_cockpit),//2
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_main_engine),//3
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_left_engine),//4
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_right_engine),//5
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_left_wing),//6
+ list("key"=/obj/item/mecha_parts/fighter/part/pinnace_right_wing)//final
+ )
+
+/datum/construction/mecha/fighter/pinnace_chassis/custom_action(step, obj/item/I, mob/user)
+ user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
+ holder.add_overlay("[I.icon_state]+o")
+ qdel(I)
+ return 1
+
+/datum/construction/mecha/fighter/pinnace_chassis/action(obj/item/I,mob/user as mob)
+ return check_all_steps(I,user)
+
+/datum/construction/mecha/fighter/pinnace_chassis/spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/fighter/pinnace(const_holder)
+ const_holder.icon = 'icons/mecha/fighters_construction64x64.dmi'
+ const_holder.icon_state = "pinnace0"
+ const_holder.density = 1
+ spawn()
+ qdel(src)
+ return
+
+/datum/construction/reversible/mecha/fighter/pinnace
+ result = "/obj/mecha/combat/fighter/pinnace"
+ steps = list(
+ //1
+ list("key"=/obj/item/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="External armor is bolted into place."),
+ //2
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/material/plasteel,
+ "backkey"=/obj/item/weldingtool,
+ "desc"="The internal armor is welded into place."),
+ //4
+ list("key"=/obj/item/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="The internal armor is bolted into place."),
+ //5
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="The internal armor is installed."),
+ //6
+ list("key"=/obj/item/stack/material/steel,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The manual flight control instruments are secured."),
+ //7
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The manual flight control instruments are installed."),
+ //8
+ list("key"=/obj/item/circuitboard/mecha/fighter/pinnace/cockpitboard,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The advanced capacitor is secured."),
+ //9
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The advanced capacitor is installed."),
+ //10
+ list("key"=/obj/item/stock_parts/capacitor/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The targeting module is secured."),
+ //11
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The targeting module is installed."),
+ //12
+ list("key"=/obj/item/circuitboard/mecha/fighter/pinnace/targeting,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The flight control module is secured."),
+ //13
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The flight control module is installed."),
+ //14
+ list("key"=/obj/item/circuitboard/mecha/fighter/pinnace/flight,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The central control module is secured."),
+ //15
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The central control module is installed."),
+ //16
+ list("key"=/obj/item/circuitboard/mecha/fighter/pinnace/main,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The internal wiring is adjusted."),
+ //17
+ list("key"=/obj/item/tool/wirecutters,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The internal wiring is added."),
+ //18
+ list("key"=/obj/item/stack/cable_coil,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The hydraulic landing gear are deployed."),
+ //19
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_WRENCH,
+ "desc"="The hydraulic landing gear are attached."),
+ //20
+ list("key"=IS_WRENCH,
+ "desc"="The hydraulic landing gear are detached.")
+ )
+
+/datum/construction/reversible/mecha/fighter/pinnace/action(obj/item/I,mob/user as mob)
+ return check_step(I,user)
+
+/datum/construction/reversible/mecha/fighter/pinnace/custom_action(index, diff, obj/item/I, mob/user)
+ if(!..())
+ return 0
+
+ switch(index)
+ if(20)
+ user.visible_message("[user] attaches [holder]'s hydraulic landing gear.", "You attach [holder]'s hydraulic landing gear.")
+ holder.icon_state = "pinnace1"
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] deploys [holder]'s hydraulic landing gear.", "You deploy [holder]'s hydraulic landing gear.")
+ holder.icon_state = "pinnace2"
+ else
+ user.visible_message("[user] removes [holder]'s hydraulic landing gear.", "You remove [holder]'s hydraulic landing gear.")
+ holder.icon_state = "pinnace0"
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the internal wiring to [holder].", "You add the internal wiring to [holder].")
+ holder.icon_state = "pinnace3"
+ else
+ user.visible_message("[user] retracts [holder]'s hydraulic landing gear.", "You retract [holder]'s hydraulic landing gear.")
+ holder.icon_state = "pinnace1"
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the internal wiring of [holder].", "You adjust the internal wiring of [holder].")
+ holder.icon_state = "pinnace4"
+ else
+ user.visible_message("[user] removes the internal wiring from [holder].", "You remove the internal wiring from [holder].")
+ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
+ coil.amount = 4
+ holder.icon_state = "pinnace2"
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central control module into [holder].")
+ qdel(I)
+ holder.icon_state = "pinnace5"
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "pinnace3"
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the central control module.", "You secure the central control module.")
+ holder.icon_state = "pinnace6"
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/pinnace/main(get_turf(holder))
+ holder.icon_state = "pinnace4"
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the flight control module into [holder].", "You install the flight control module into [holder].")
+ qdel(I)
+ holder.icon_state = "pinnace7"
+ else
+ user.visible_message("[user] unfastens the central control module.", "You unfasten the central control module.")
+ holder.icon_state = "pinnace5"
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the flight control module.", "You secure the flight control module.")
+ holder.icon_state = "pinnace8"
+ else
+ user.visible_message("[user] removes the flight control module from [holder].", "You remove the flight control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/pinnace/flight(get_turf(holder))
+ holder.icon_state = "pinnace6"
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the targeting control module into [holder].", "You install the targeting control module into [holder].")
+ qdel(I)
+ holder.icon_state = "pinnace9"
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "pinnace7"
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the targeting control module.", "You secure the targeting control module.")
+ holder.icon_state = "pinnace10"
+ else
+ user.visible_message("[user] removes the targeting control module from [holder].", "You remove the targeting control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/pinnace/targeting(get_turf(holder))
+ holder.icon_state = "pinnace8"
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the advanced capacitor into [holder].", "You install the advanced capacitor into [holder].")
+ qdel(I)
+ holder.icon_state = "pinnace11"
+ else
+ user.visible_message("[user] unfastens the targeting control module.", "You unfasten the targeting control module.")
+ holder.icon_state = "pinnace9"
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ holder.icon_state = "pinnace12"
+ else
+ user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
+ new /obj/item/stock_parts/capacitor/adv(get_turf(holder))
+ holder.icon_state = "pinnace10"
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the manual flight controls to [holder].", "You install the manual flight controls to [holder].")
+ qdel(I)
+ holder.icon_state = "pinnace13"
+ else
+ user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
+ holder.icon_state = "pinnace11"
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the manual flight controls.", "You secure the manual flight controls.")
+ holder.icon_state = "pinnace14"
+ else
+ user.visible_message("[user] removes the manual flight controls from [holder].", "You remove the manual flight controls from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/pinnace/cockpitboard(get_turf(holder))
+ holder.icon_state = "pinnace12"
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].")
+ holder.icon_state = "pinnace19"
+ else
+ user.visible_message("[user] unfastens the manual flight controls.", "You unfasten the manual flight controls.")
+ holder.icon_state = "pinnace13"
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] bolts the internal armor layer.", "You bolt the internal armor layer.")
+ holder.icon_state = "pinnace20"
+ else
+ user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].")
+ var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
+ MS.amount = 5
+ holder.icon_state = "pinnace14"
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer into place on [holder].", "You weld the internal armor layer into place on [holder].")
+ holder.icon_state = "pinnace21"
+ else
+ user.visible_message("[user] unbolt the internal armor layer.", "You unbolt the internal armor layer.")
+ holder.icon_state = "pinnace19"
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].")
+ holder.icon_state = "pinnace22"
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ holder.icon_state = "pinnace20"
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] bolts external armor layer.", "You bolt external reinforced armor layer.")
+ holder.icon_state = "pinnace23"
+ else
+ user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].")
+ var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
+ MS.amount = 5
+ holder.icon_state = "pinnace21"
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].")
+ else
+ user.visible_message("[user] unbolts the external armor layer.", "You unbolt the external armor layer.")
+ holder.icon_state = "pinnace22"
+ return 1
+
+/datum/construction/reversible/mecha/fighter/pinnace/spawn_result()
+ ..()
+ feedback_inc("mecha_fighter_pinnace_created",1)
+ return
+
+//////////////////////
+// Baron
+//////////////////////
+/datum/construction/mecha/fighter/baron_chassis
+ result = "/obj/mecha/combat/fighter/baron"
+ steps = list(list("key"=/obj/item/mecha_parts/fighter/part/baron_core),//1
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_cockpit),//2
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_main_engine),//3
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_left_engine),//4
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_right_engine),//5
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_left_wing),//6
+ list("key"=/obj/item/mecha_parts/fighter/part/baron_right_wing)//final
+ )
+
+/datum/construction/mecha/fighter/baron_chassis/custom_action(step, obj/item/I, mob/user)
+ user.visible_message("[user] has connected [I] to [holder].", "You connect [I] to [holder]")
+ holder.add_overlay("[I.icon_state]+o")
+ qdel(I)
+ return 1
+
+/datum/construction/mecha/fighter/baron_chassis/action(obj/item/I,mob/user as mob)
+ return check_all_steps(I,user)
+
+/datum/construction/mecha/fighter/baron_chassis/spawn_result()
+ var/obj/item/mecha_parts/chassis/const_holder = holder
+ const_holder.construct = new /datum/construction/reversible/mecha/fighter/baron(const_holder)
+ const_holder.icon = 'icons/mecha/fighters_construction64x64.dmi'
+ const_holder.icon_state = "baron0"
+ const_holder.density = 1
+ spawn()
+ qdel(src)
+ return
+
+/datum/construction/reversible/mecha/fighter/baron
+ result = "/obj/mecha/combat/fighter/baron"
+ steps = list(
+ //1
+ list("key"=/obj/item/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="External armor is bolted into place."),
+ //2
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/material/plasteel,
+ "backkey"=/obj/item/weldingtool,
+ "desc"="The internal armor is welded into place."),
+ //4
+ list("key"=/obj/item/weldingtool,
+ "backkey"=IS_WRENCH,
+ "desc"="The internal armor is bolted into place."),
+ //5
+ list("key"=IS_WRENCH,
+ "backkey"=IS_CROWBAR,
+ "desc"="The internal armor is installed."),
+ //6
+ list("key"=/obj/item/stack/material/steel,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The manual flight control instruments are secured."),
+ //7
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The manual flight control instruments are installed."),
+ //8
+ list("key"=/obj/item/circuitboard/mecha/fighter/baron/cockpitboard,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The advanced capacitor is secured."),
+ //9
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The advanced capacitor is installed."),
+ //10
+ list("key"=/obj/item/stock_parts/capacitor/adv,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The targeting module is secured."),
+ //11
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The targeting module is installed."),
+ //12
+ list("key"=/obj/item/circuitboard/mecha/fighter/baron/targeting,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The flight control module is secured."),
+ //13
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The flight control module is installed."),
+ //14
+ list("key"=/obj/item/circuitboard/mecha/fighter/baron/flight,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The central control module is secured."),
+ //15
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_CROWBAR,
+ "desc"="The central control module is installed."),
+ //16
+ list("key"=/obj/item/circuitboard/mecha/fighter/baron/main,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The internal wiring is adjusted."),
+ //17
+ list("key"=/obj/item/tool/wirecutters,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The internal wiring is added."),
+ //18
+ list("key"=/obj/item/stack/cable_coil,
+ "backkey"=IS_SCREWDRIVER,
+ "desc"="The hydraulic landing gear are deployed."),
+ //19
+ list("key"=IS_SCREWDRIVER,
+ "backkey"=IS_WRENCH,
+ "desc"="The hydraulic landing gear are attached."),
+ //20
+ list("key"=IS_WRENCH,
+ "desc"="The hydraulic landing gear are detached.")
+ )
+
+/datum/construction/reversible/mecha/fighter/baron/action(obj/item/I,mob/user as mob)
+ return check_step(I,user)
+
+/datum/construction/reversible/mecha/fighter/baron/custom_action(index, diff, obj/item/I, mob/user)
+ if(!..())
+ return 0
+
+ switch(index)
+ if(20)
+ user.visible_message("[user] attaches [holder]'s hydraulic landing gear.", "You attach [holder]'s hydraulic landing gear.")
+ holder.icon_state = "baron1"
+ if(19)
+ if(diff==FORWARD)
+ user.visible_message("[user] deploys [holder]'s hydraulic landing gear.", "You deploy [holder]'s hydraulic landing gear.")
+ holder.icon_state = "baron2"
+ else
+ user.visible_message("[user] removes [holder]'s hydraulic landing gear.", "You remove [holder]'s hydraulic landing gear.")
+ holder.icon_state = "baron0"
+ if(18)
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the internal wiring to [holder].", "You add the internal wiring to [holder].")
+ holder.icon_state = "baron3"
+ else
+ user.visible_message("[user] retracts [holder]'s hydraulic landing gear.", "You retract [holder]'s hydraulic landing gear.")
+ holder.icon_state = "baron1"
+ if(17)
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the internal wiring of [holder].", "You adjust the internal wiring of [holder].")
+ holder.icon_state = "baron4"
+ else
+ user.visible_message("[user] removes the internal wiring from [holder].", "You remove the internal wiring from [holder].")
+ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder))
+ coil.amount = 4
+ holder.icon_state = "baron2"
+ if(16)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central control module into [holder].")
+ qdel(I)
+ holder.icon_state = "baron5"
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
+ holder.icon_state = "baron3"
+ if(15)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the central control module.", "You secure the central control module.")
+ holder.icon_state = "baron6"
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/baron/main(get_turf(holder))
+ holder.icon_state = "baron4"
+ if(14)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the flight control module into [holder].", "You install the flight control module into [holder].")
+ qdel(I)
+ holder.icon_state = "baron7"
+ else
+ user.visible_message("[user] unfastens the central control module.", "You unfasten the central control module.")
+ holder.icon_state = "baron5"
+ if(13)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the flight control module.", "You secure the flight control module.")
+ holder.icon_state = "baron8"
+ else
+ user.visible_message("[user] removes the flight control module from [holder].", "You remove the flight control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/baron/flight(get_turf(holder))
+ holder.icon_state = "baron6"
+ if(12)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the targeting control module into [holder].", "You install the targeting control module into [holder].")
+ qdel(I)
+ holder.icon_state = "baron9"
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
+ holder.icon_state = "baron7"
+ if(11)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the targeting control module.", "You secure the targeting control module.")
+ holder.icon_state = "baron10"
+ else
+ user.visible_message("[user] removes the targeting control module from [holder].", "You remove the targeting control module from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/baron/targeting(get_turf(holder))
+ holder.icon_state = "baron8"
+ if(10)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the advanced capacitor into [holder].", "You install the advanced capacitor into [holder].")
+ qdel(I)
+ holder.icon_state = "baron11"
+ else
+ user.visible_message("[user] unfastens the targeting control module.", "You unfasten the targeting control module.")
+ holder.icon_state = "baron9"
+ if(9)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ holder.icon_state = "baron12"
+ else
+ user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
+ new /obj/item/stock_parts/capacitor/adv(get_turf(holder))
+ holder.icon_state = "baron10"
+ if(8)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the manual flight controls to [holder].", "You install the manual flight controls to [holder].")
+ qdel(I)
+ holder.icon_state = "baron13"
+ else
+ user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
+ holder.icon_state = "baron11"
+ if(7)
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the manual flight controls.", "You secure the manual flight controls.")
+ holder.icon_state = "baron14"
+ else
+ user.visible_message("[user] removes the manual flight controls from [holder].", "You remove the manual flight controls from [holder].")
+ new /obj/item/circuitboard/mecha/fighter/baron/cockpitboard(get_turf(holder))
+ holder.icon_state = "baron12"
+ if(6)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the internal armor layer to [holder].", "You install the internal armor layer to [holder].")
+ holder.icon_state = "baron19"
+ else
+ user.visible_message("[user] unfastens the manual flight controls.", "You unfasten the manual flight controls.")
+ holder.icon_state = "baron13"
+ if(5)
+ if(diff==FORWARD)
+ user.visible_message("[user] bolts the internal armor layer.", "You bolt the internal armor layer.")
+ holder.icon_state = "baron20"
+ else
+ user.visible_message("[user] pries the internal armor layer from [holder].", "You pry the internal armor layer from [holder].")
+ var/obj/item/stack/material/steel/MS = new /obj/item/stack/material/steel(get_turf(holder))
+ MS.amount = 5
+ holder.icon_state = "baron14"
+ if(4)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the internal armor layer into place on [holder].", "You weld the internal armor layer into place on [holder].")
+ holder.icon_state = "baron21"
+ else
+ user.visible_message("[user] unbolt the internal armor layer.", "You unbolt the internal armor layer.")
+ holder.icon_state = "baron19"
+ if(3)
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the external reinforced armor layer to [holder].", "You install the external reinforced armor layer to [holder].")
+ holder.icon_state = "baron22"
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
+ holder.icon_state = "baron20"
+ if(2)
+ if(diff==FORWARD)
+ user.visible_message("[user] bolts external armor layer.", "You bolt external reinforced armor layer.")
+ holder.icon_state = "baron23"
+ else
+ user.visible_message("[user] pries the external armor layer from [holder].", "You pry external armor layer from [holder].")
+ var/obj/item/stack/material/plasteel/MS = new /obj/item/stack/material/plasteel(get_turf(holder))
+ MS.amount = 5
+ holder.icon_state = "baron21"
+ if(1)
+ if(diff==FORWARD)
+ user.visible_message("[user] welds the external armor layer to [holder].", "You weld the external armor layer to [holder].")
+ else
+ user.visible_message("[user] unbolts the external armor layer.", "You unbolt the external armor layer.")
+ holder.icon_state = "baron22"
+ return 1
+
+/datum/construction/reversible/mecha/fighter/baron/spawn_result()
+ ..()
+ feedback_inc("mecha_fighter_baron_created",1)
+ return
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 1a9a4324ff..a8e4aee892 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -340,3 +340,120 @@
name="Prototype Durand Right Leg"
icon_state = "janus_r_leg"
origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3, TECH_ARCANE = 1)
+
+
+///Fighters///
+
+
+/obj/item/mecha_parts/fighter
+ icon = 'icons/mecha/fighters_construct64x64.dmi'
+
+/obj/item/mecha_parts/fighter/chassis
+ name="Fighter Chassis"
+ icon_state = "backbone"
+ var/datum/construction/construct
+
+/obj/item/mecha_parts/fighter/chassis/attackby(obj/item/W, mob/user)
+ if(!construct || !construct.action(W, user))
+ ..()
+ return
+
+/obj/item/mecha_parts/fighter/chassis/attack_hand(mob/user, list/params)
+ return
+
+
+//! Pinnace
+
+/obj/item/mecha_parts/fighter/chassis/pinnace
+ name = "\improper Pinnace Chassis"
+ icon_state = "pinnace_chassis"
+
+ origin_tech = list(TECH_MATERIAL = 2)
+
+/obj/item/mecha_parts/fighter/chassis/pinnace/New()
+ ..()
+ construct = new /datum/construction/mecha/fighter/pinnace_chassis(src)
+
+
+/obj/item/mecha_parts/fighter/part/pinnace_core
+ name="\improper Pinnace Core"
+ icon_state = "pinnace_core"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_cockpit
+ name="\improper Pinnace Cockpit"
+ icon_state = "pinnace_cockpit"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_left_wing
+ name="\improper Pinnace Left Wing"
+ icon_state = "pinnace_l_wing"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_right_wing
+ name="\improper Pinnace Right Wing"
+ icon_state = "pinnace_r_wing"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_main_engine
+ name="\improper Pinnace Main Engine"
+ icon_state = "pinnace_m_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_left_engine
+ name="\improper Pinnace Left Engine"
+ icon_state = "pinnace_l_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+/obj/item/mecha_parts/fighter/part/pinnace_right_engine
+ name="\improper Pinnace Right Engine"
+ icon_state = "pinnace_r_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
+
+//! Baron
+
+/obj/item/mecha_parts/fighter/chassis/baron
+ name = "\improper Baron Chassis"
+ icon_state = "baron_chassis"
+
+ origin_tech = list(TECH_MATERIAL = 2)
+
+/obj/item/mecha_parts/fighter/chassis/baron/New()
+ ..()
+ construct = new /datum/construction/mecha/fighter/baron_chassis(src)
+
+
+/obj/item/mecha_parts/fighter/part/baron_core
+ name="\improper Baron Core"
+ icon_state = "baron_core"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_BIO = 2, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_cockpit
+ name="\improper Baron Cockpit"
+ icon_state = "baron_cockpit"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_BIO = 2, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_left_wing
+ name="\improper Baron Left Wing"
+ icon_state = "baron_l_wing"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_right_wing
+ name="\improper Baron Right Wing"
+ icon_state = "baron_r_wing"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_main_engine
+ name="\improper Baron Main Engine"
+ icon_state = "baron_m_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_left_engine
+ name="\improper Baron Left Engine"
+ icon_state = "baron_l_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
+
+/obj/item/mecha_parts/fighter/part/baron_right_engine
+ name="\improper Baron Right Engine"
+ icon_state = "baron_r_engine"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 5, TECH_ENGINEERING = 4)
diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm
index dd3e06d3a7..b17053a055 100644
--- a/code/game/objects/items/weapons/circuitboards/mecha.dm
+++ b/code/game/objects/items/weapons/circuitboards/mecha.dm
@@ -2,6 +2,10 @@
#error T_BOARD_MECHA already defined elsewhere, we can't use it.
#endif
#define T_BOARD_MECHA(name) "exosuit module circuit board (" + (name) + ")"
+#ifdef T_BOARD_FIGHTER
+#error T_BOARD_FIGHTER already defined elsewhere, we can't use it.
+#endif
+#define T_BOARD_FIGHTER(name) "fightercraft circuit board (" + (name) + ")"
/obj/item/circuitboard/mecha
name = "exosuit circuit board"
@@ -124,5 +128,56 @@
desc = "It is marked with a " + span_alien("constantly shifting glyph") + "."
origin_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 1, TECH_PRECURSOR = 2)
-//Undef the macro, shouldn't be needed anywhere else
+///Fighters///
+
+//Pinnace//
+
+/obj/item/circuitboard/mecha/fighter/pinnace
+
+/obj/item/circuitboard/mecha/fighter/pinnace/main
+ name = T_BOARD_FIGHTER("Pinnace central control")
+ origin_tech = list(TECH_DATA = 4, TECH_BIO = 2, TECH_BLUESPACE = 2)
+ icon_state = "mainboard"
+
+/obj/item/circuitboard/mecha/fighter/pinnace/flight
+ name = T_BOARD_FIGHTER("Pinnace flight control")
+ icon_state = "mcontroller"
+ origin_tech = list(TECH_DATA = 4, TECH_BLUESPACE = 2)
+
+/obj/item/circuitboard/mecha/fighter/pinnace/targeting
+ name = T_BOARD_FIGHTER("Pinnace weapon control and targeting")
+ icon_state = "mcontroller"
+ origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 1)
+
+/obj/item/circuitboard/mecha/fighter/pinnace/cockpitboard
+ name = T_BOARD_FIGHTER("Pinnace manual flight control instruments")
+ origin_tech = list(TECH_DATA = 4, TECH_BLUESPACE = 2)
+ icon_state = "card_mod"
+
+//Baron//
+
+/obj/item/circuitboard/mecha/fighter/baron
+
+/obj/item/circuitboard/mecha/fighter/baron/main
+ name = T_BOARD_FIGHTER("Baron central control")
+ icon_state = "mainboard"
+ origin_tech = list(TECH_DATA = 6, TECH_BIO = 4, TECH_BLUESPACE = 5)
+
+/obj/item/circuitboard/mecha/fighter/baron/flight
+ name = T_BOARD_FIGHTER("Baron flight control")
+ icon_state = "mcontroller"
+ origin_tech = list(TECH_DATA = 6, TECH_BLUESPACE = 5)
+
+/obj/item/circuitboard/mecha/fighter/baron/targeting
+ name = T_BOARD_FIGHTER("Baron weapon control and targeting")
+ icon_state = "mcontroller"
+ origin_tech = list(TECH_DATA = 6, TECH_BIO = 4, TECH_COMBAT = 5)
+
+/obj/item/circuitboard/mecha/fighter/baron/cockpitboard
+ name = T_BOARD_FIGHTER("Baron manual flight control instruments")
+ icon_state = "card_mod"
+ origin_tech = list(TECH_DATA = 6, TECH_BLUESPACE = 5)
+
+//Undef the macros, shouldn't be needed anywhere else
#undef T_BOARD_MECHA
+#undef T_BOARD_FIGHTER
diff --git a/code/modules/research/designs/circuits/circuits.dm b/code/modules/research/designs/circuits/circuits.dm
index 6f8bc42156..8b542cfb76 100644
--- a/code/modules/research/designs/circuits/circuits.dm
+++ b/code/modules/research/designs/circuits/circuits.dm
@@ -864,3 +864,65 @@ CIRCUITS BELOW
build_path = /obj/item/circuitboard/recycler_stamper
sort_string = "OAABE"
department = LATHE_ALL | LATHE_ENGINEERING // CHOMPAdd
+
+///Fighters///
+
+//Pinnace//
+
+/datum/design/circuit/mecha/fighter/pinnace_main
+ name = "Pinnace central control board"
+ id = "pinnace_main"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/pinnace/main
+ sort_string = "NAAGA"
+
+/datum/design/circuit/mecha/fighter/pinnace_flight
+ name = "Pinnace flight control board"
+ id = "pinnace_flight"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/pinnace/flight
+ sort_string = "NAAGB"
+
+/datum/design/circuit/mecha/fighter/pinnace_targeting
+ name = "Pinnace weapon control and targeting board"
+ id = "pinnace_targeting"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/pinnace/targeting
+ sort_string = "NAAGC"
+
+/datum/design/circuit/mecha/fighter/pinnace_cockpit_control
+ name = "Pinnace manual flight control instruments"
+ id = "pinnace_cockpit_control"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/pinnace/cockpitboard
+ sort_string = "NAAGD"
+
+//Baron//
+
+/datum/design/circuit/mecha/fighter/baron_main
+ name = "Baron central control board"
+ id = "baron_main"
+ req_tech = list(TECH_DATA = 5, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/baron/main
+ sort_string = "NAAHA"
+
+/datum/design/circuit/mecha/fighter/baron_flight
+ name = "Baron flight control board"
+ id = "baron_flight"
+ req_tech = list(TECH_DATA = 5, TECH_POWER = 4)
+ build_path = /obj/item/circuitboard/mecha/fighter/baron/flight
+ sort_string = "NAAHB"
+
+/datum/design/circuit/mecha/fighter/baron_targeting
+ name = "Baron weapon control and targeting board"
+ id = "baron_targeting"
+ req_tech = list(TECH_DATA = 5, TECH_POWER = 4, TECH_COMBAT = 3)
+ build_path = /obj/item/circuitboard/mecha/fighter/baron/targeting
+ sort_string = "NAAHC"
+
+/datum/design/circuit/mecha/fighter/baron_cockpit_control
+ name = "Baron manual flight control instruments"
+ id = "baron_cockpit_control"
+ req_tech = list(TECH_DATA = 5, TECH_POWER = 4, TECH_COMBAT = 3)
+ build_path = /obj/item/circuitboard/mecha/fighter/baron/cockpitboard
+ sort_string = "NAAHD"
diff --git a/code/modules/research/mechfab_designs.dm b/code/modules/research/mechfab_designs.dm
index 5d3f7bc26c..a1e77b000b 100644
--- a/code/modules/research/mechfab_designs.dm
+++ b/code/modules/research/mechfab_designs.dm
@@ -1253,3 +1253,129 @@
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 4, TECH_POWER = 4)
materials = list(MAT_PLASTEEL = 10000, MAT_OSMIUM = 3000, MAT_GOLD = 5000)
build_path = /obj/item/mecha_parts/component/actuator/hispeed
+
+///--------///
+///Fighters///
+///--------///
+
+///Pinnace///
+
+/datum/design/item/mechfab/fighter/pinnace
+ category = list("Pinnace")
+
+/datum/design/item/mechfab/fighter/pinnace/chassis
+ name = "Pinnace Chassis"
+ id = "pinnace_chassis"
+ build_path = /obj/item/mecha_parts/fighter/chassis/pinnace
+ time = 30
+ materials = list(MAT_STEEL = 25000, MAT_GLASS = 10000, MAT_PLASTEEL = 10000)
+
+/datum/design/item/mechfab/fighter/pinnace/core
+ name = "Pinnace Core"
+ id = "pinnace_core"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_core
+ time = 60
+ materials = list(MAT_STEEL = 25000, MAT_GLASS = 7000, MAT_PLASTEEL = 7000)
+
+/datum/design/item/mechfab/fighter/pinnace/cockpit
+ name = "Pinnace Cockpit"
+ id = "pinnace_cockpit"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_cockpit
+ time = 15
+ materials = list(MAT_STEEL = 2500, MAT_PLASTEEL = 2500, MAT_GLASS = 7500, MAT_PLASTIC = 2500)
+
+/datum/design/item/mechfab/fighter/pinnace/main_engine
+ name = "Pinnace Main Engine"
+ id = "pinnace_main_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_main_engine
+ time = 25
+ materials = list(MAT_STEEL = 15000, MAT_PLASTEEL = 5000)
+
+/datum/design/item/mechfab/fighter/pinnace/left_engine
+ name = "Pinnace Left Engine"
+ id = "pinnace_left_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_left_engine
+ time = 25
+ materials = list(MAT_STEEL = 10000, MAT_PLASTEEL = 2500)
+
+/datum/design/item/mechfab/fighter/pinnace/right_engine
+ name = "Pinnace Right Engine"
+ id = "pinnace_right_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_right_engine
+ time = 25
+ materials = list(MAT_STEEL = 10000, MAT_PLASTEEL = 2500)
+
+/datum/design/item/mechfab/fighter/pinnace/left_wing
+ name = "Pinnace Left Wing"
+ id = "pinnace_left_wing"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_left_wing
+ time = 20
+ materials = list(MAT_STEEL = 7000, MAT_PLASTIC = 3000, MAT_PLASTEEL = 5000)
+
+/datum/design/item/mechfab/fighter/pinnace/right_wing
+ name = "Pinnace Right Wing"
+ id = "pinnace_right_wing"
+ build_path = /obj/item/mecha_parts/fighter/part/pinnace_right_wing
+ time = 20
+ materials = list(MAT_STEEL = 7000, MAT_PLASTIC = 3000, MAT_PLASTEEL = 5000)
+
+///Baron///
+
+/datum/design/item/mechfab/fighter/baron
+ category = list("Baron")
+
+/datum/design/item/mechfab/fighter/baron/chassis
+ name = "Baron Chassis"
+ id = "baron_chassis"
+ build_path = /obj/item/mecha_parts/fighter/chassis/baron
+ time = 30
+ materials = list(MAT_STEEL = 37500, MAT_GLASS = 15000, MAT_PLASTEEL = 15000)
+
+/datum/design/item/mechfab/fighter/baron/core
+ name = "Baron Core"
+ id = "baron_core"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_core
+ time = 60
+ materials = list(MAT_STEEL = 37500, MAT_GLASS = 15000, MAT_PLASTEEL = 15000)
+
+/datum/design/item/mechfab/fighter/baron/cockpit
+ name = "Baron Cockpit"
+ id = "baron_cockpit"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_cockpit
+ time = 15
+ materials = list(MAT_STEEL = 5000, MAT_PLASTEEL = 5000, MAT_GLASS = 10000, MAT_PLASTIC = 5000)
+
+/datum/design/item/mechfab/fighter/baron/main_engine
+ name = "Baron Main Engine"
+ id = "baron_main_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_main_engine
+ time = 25
+ materials = list(MAT_STEEL = 25000, MAT_PLASTEEL = 10000)
+
+/datum/design/item/mechfab/fighter/baron/left_engine
+ name = "Baron Left Engine"
+ id = "baron_left_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_left_engine
+ time = 25
+ materials = list(MAT_STEEL = 20000, MAT_PLASTEEL = 5000)
+
+/datum/design/item/mechfab/fighter/baron/right_engine
+ name = "Baron Right Engine"
+ id = "baron_right_engine"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_right_engine
+ time = 25
+ materials = list(MAT_STEEL = 20000, MAT_PLASTEEL = 5000)
+
+/datum/design/item/mechfab/fighter/baron/left_wing
+ name = "Baron Left Wing"
+ id = "baron_left_wing"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_left_wing
+ time = 20
+ materials = list(MAT_STEEL = 15000, MAT_PLASTIC = 6000, MAT_PLASTEEL = 10000)
+
+/datum/design/item/mechfab/fighter/baron/right_wing
+ name = "Baron Right Wing"
+ id = "baron_right_wing"
+ build_path = /obj/item/mecha_parts/fighter/part/baron_right_wing
+ time = 20
+ materials = list(MAT_STEEL = 15000, MAT_PLASTIC = 6000, MAT_PLASTEEL = 10000)
diff --git a/icons/mecha/fighters_construct64x64.dmi b/icons/mecha/fighters_construct64x64.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..74402ff8d8c339df4a5d103d231284cec4d2f54d
GIT binary patch
literal 30394
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
z
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
literal 0
HcmV?d00001
diff --git a/icons/mecha/fighters_construction64x64.dmi b/icons/mecha/fighters_construction64x64.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..af8215d0f578fb08ad965a684880972c07f52962
GIT binary patch
literal 46241
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 cL
ziZI7S4o8ge>@Z>PHT$NvZXDs$0`AkAD<%3bL`scwEp7%6=WfRr1-+r7CHzHscM1O$
z&_-&`ak;e>N4d+#wWanyP+&7u5cy%KY34n5izoBtU?sM1mx+J>Z>w!@Xj+yRR9aCP
zEW#Ow8Jv%=ql1MAK%E4HSD2(YF_X^npK!I?QFDv*Jrq!Uh|YCLQC
zfU#O_pl#1>2CpHmLT3JQbQ+v)B*Go!`O`5~C%~c!lA;Xyqr?17O<^yK7!ndN&CLY?
zFt#0FBk3`0U{+L8QUN1@{y&l3?u}o$Sl}1H>*nUT)pgLir{$%MSydWemYl%P^Is>pqzY>!2~m&3JW1y{095N11J%`RYi;k~V8>H1i6&~X$y@c$(#)!>=SBp5
zu(seVmrTa15f28Acs
z9UUDSOLbwEg!qNg1b>GA%WI%Lm_sgW&>t>K2L~WF3g!@0!#1;K)2Ndl9KU%Gn&*nM_=
z4%>Thcql0)Ti(Z(SS%ky#uvO;hboj6f0+%1pyhY_Al=Dt%INLnc-^G4u;NQ0{!8c@
zJv=w=a{=EF3#pQ!BdlkBNW-gAU0zuE2>1jiXYEmhq>=|WnpdMI4_P+@4ESPrQAO=j
z6Ay{u(z3d|mKJw#K6zQcA|PN@L2LX{&|H=RC>f%aO10GW`tJBQBCIn%(^oj`Xj32E
zu&^-X%4=CtvrfjLqTNy}VVBwi{ZU894)pvkM1TZBfWD_hrQYL?|A=x{(SV$(bClwbNu_U
zom1()46B#d9WFjT7Cvzd=7-QwI8UD@EnUOVLWGq@w`-q*_GG|vqhob=l`u>^D%7mJ
zc!2WBBp618o>)Omskps9uC2`=jP~&Y3UNUvLubAQbRGakJCyum-{LU7+h@j5^Anr%
z^ML4WLvF$E@-(=Y2TMZAFw8$>;$In<=y*j_b{BptkFyVKyZ(K6I{x?XU@z*u!9R@O
zYgf17hfiR2Z^sRzR;yz!K%0syOUug(Up6l*rHSk{oWSMME9L+4462dqG(-{e7k=6D
zwWr*!ip84hg)@D9rlOo^T-xv@2KsCK
zg#_r;Ho%ONK+6ggQ7Z;xAEreQ25kB9)iL@tFg}h{{H?nzUwC#CNfZ|-@FM5*Z9qioj0Q>1^i$*BPXfbm$LhQ7>om-L~-vV$0U?3|pO
ztf(~oA2+Zt9A6W3sH*Al@%a3-ptLlic`G;@2)ah9_&_7V;-;$cq(;`~dsEGQ@u4Zw
zHKy#(7{4nkMOA@^EXAZLE8U5YH@9=8Ai*ghK5A11cvrtCSq84p0MG!I?EqbbOmjE5
z_R6~e1r|2ydqA;O)ZCp9ME!pW~5OSxm!N_SOlVOnV^9l-roR3rl}eL#5kIAEutW6KM>rCN__Wyp$P
z4F7zb;N?n8Ehq>N(rPMPb(En$Ov*5k@l+P^sA^05(||fR&s}5B_Zlp&qN2jX_h-(i
z9=tJihI4qm(Hf*=t@KvtMX$y)v$zwIcrvGKB9)DA6<|1wY
zHYZfa^zk2+tc{a%FxL4`22W#oepER*IRX-b9y~m02Lqu}>)F*sxgaOB$;QY2{1OZ%u+m@McWpawWRaAz;PP9^+~X4)zx#0(
zc-=Cwc>LnqKOgnogEb0C5s|WHg>)oZ+ybO*;eEdRN&iz9_Ba=_@;n7KH;$|hfW*nC
z(d_K(j7+l+G_Xv}djI6hmNRwP5+1sWjZMt>F5~WwJUYtA5Y1)aB2EGlSQO$ZiM0Fd
z^rN*lFD=3{WoNK^_c$&UP{I#!+(yIevJV`)CnaVm0HLpS9+`tR#2S#iq;|YY#h?0F
zpN;XFmalef({F4OKbGxh=m@3OfbKGW>0}@N#Nj-MH$^W!^aYYNin6!>
z#2TPn;Z(uN-k9P}dW9-Z-~Y~LUL*dz$jhHsP~K|IV>kVGCZuyU$7M|I
zSq_T}B-KE9{Z6GmDJfOjN0 |