diff --git a/code/game/mecha/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm
similarity index 86%
rename from code/game/mecha/construction_datum.dm
rename to code/datums/helper_datums/construction_datum.dm
index 3e7ece1c495..bbcccd16476 100644
--- a/code/game/mecha/construction_datum.dm
+++ b/code/datums/helper_datums/construction_datum.dm
@@ -5,6 +5,7 @@
var/list/steps
var/atom/holder
var/result
+ var/list/steps_desc
New(atom)
..()
@@ -12,12 +13,15 @@
if(!holder) //don't want this without a holder
spawn
del src
+ set_desc(steps.len)
return
proc/next_step()
steps.len--
if(!steps.len)
spawn_result()
+ else
+ set_desc(steps.len)
return
proc/action(atom/used_atom,mob/user as mob)
@@ -65,6 +69,11 @@
L -= null
return
+ proc/set_desc(index as num)
+ var/list/step = steps[index]
+ holder.desc = step["desc"]
+ return
+
/datum/construction/reversible
var/index
@@ -77,6 +86,8 @@
index+=diff
if(index==0)
spawn_result()
+ else
+ set_desc(index)
return
is_right_key(atom/used_atom) // returns index step
diff --git a/code/game/mecha/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm
similarity index 88%
rename from code/game/mecha/global_iterator.dm
rename to code/datums/helper_datums/global_iterator.dm
index 42ae7068d8c..b0f0bc73eab 100644
--- a/code/game/mecha/global_iterator.dm
+++ b/code/datums/helper_datums/global_iterator.dm
@@ -7,7 +7,7 @@ Generally, the only thing you want to play with (meaning, redefine) is the proce
It must contain all the things you want done.
Control functions:
- new - used to create datum. First argument (optional) - var list(to use in process() proc),
+ new - used to create datum. First argument (optional) - var list(to use in process() proc) as list,
second (optional) - autostart control.
If autostart == TRUE, the loop will be started immediately after datum creation.
@@ -24,7 +24,7 @@ Control functions:
active() - Returns 1 if datum is active, 0 otherwise.
- toggle() - toggles datum state. Returns 1 if datum activated, 0 otherwise
+ toggle() - toggles datum state. Returns new datum state (see active()).
Misc functions:
@@ -38,14 +38,13 @@ Control vars:
delay - delay between iterations
check_for_null - if equals TRUE, on each iteration the supplied arguments will be checked for nulls.
- If some varible equals null, the loop is stopped.
+ If some varible equals null (and null only), the loop is stopped.
Usefull, if some var unexpectedly becomes null - due to object deletion, for example.
- Of course, you can check the variables inside process() proc to prevent runtime errors.
+ Of course, you can also check the variables inside process() proc to prevent runtime errors.
Data storage vars:
result - stores the value returned by process() proc
-
*/
/datum/global_iterator
@@ -131,7 +130,7 @@ Data storage vars:
proc/toggle_null_checks()
src.check_for_null = !src.check_for_null
- return
+ return src.check_for_null
proc/toggle()
if(!src.stop())
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index e8eaa75a317..d248e25c17a 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -196,4 +196,16 @@ obj/item/weapon/circuitboard/rdserver
frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
req_components = list(
"/obj/item/weapon/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 1)
\ No newline at end of file
+ "/obj/item/weapon/stock_parts/scanning_module" = 1)
+
+/obj/item/weapon/circuitboard/mechfab
+ name = "Circuit board (Exosuit Fabricator)"
+ build_path = "/obj/machinery/mecha_part_fabricator"
+ board_type = "machine"
+ origin_tech = "programming=2;materials=3"
+ frame_desc = "Requires 2 Matter Bins, 1 Manipulator, 1 Micro-Laser and 1 Console Screen."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 2,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1,
+ "/obj/item/weapon/stock_parts/console_screen" = 1)
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index ac2e51ca2ae..10ebda87888 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -5,6 +5,7 @@
icon = 'mech_construct.dmi'
icon_state = "mecha_equip"
force = 5
+ origin_tech = "materials=2"
construction_time = 100
construction_cost = list("metal"=10000)
var/equip_cooldown = 0
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 5be47c53e63..2f4da4dd701 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -166,6 +166,7 @@
name = "Mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device."
icon_state = "mecha_rcd"
+ origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
equip_cooldown = 20
energy_drain = 250
range = MELEE|RANGED
@@ -270,6 +271,7 @@
name = "Teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
+ origin_tech = "bluespace=10"
equip_cooldown = 300
energy_drain = 1000
range = RANGED
@@ -290,6 +292,7 @@
name = "Wormhole Generator"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen"
+ origin_tech = "bluespace=3"
equip_cooldown = 50
energy_drain = 300
range = RANGED
@@ -339,6 +342,7 @@
name = "Gravitational Catapult"
desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport"
+ origin_tech = "bluespace=2;magnets=3"
equip_cooldown = 10
energy_drain = 200
range = MELEE|RANGED
@@ -401,10 +405,11 @@
name = "Armor Booster Module (Close Combat Weaponry)"
desc = "Boosts exosuit armor against armed melee attacks."
icon_state = "mecha_abooster_ccw"
+ origin_tech = "materials=3"
equip_cooldown = 10
energy_drain = 50
range = RANGED
- construction_cost = list("metal"=20000,"silver"=20000)
+ construction_cost = list("metal"=20000,"silver"=5000)
var/deflect_coeff = 1.15
var/damage_coeff = 0.8
@@ -443,10 +448,11 @@
name = "Armor Booster Module (Ranged Weaponry)"
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots."
icon_state = "mecha_abooster_proj"
+ origin_tech = "materials=4"
equip_cooldown = 10
energy_drain = 50
range = RANGED
- construction_cost = list("metal"=20000,"gold"=20000)
+ construction_cost = list("metal"=20000,"gold"=5000)
var/damage_coeff = 0.8
can_attach(obj/mecha/M as obj)
@@ -516,6 +522,7 @@
name = "Exosuit Repair Droid"
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
icon_state = "repair_droid"
+ origin_tech = "magnets=3;programming=3"
equip_cooldown = 20
energy_drain = 20
range = RANGED
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 6227aeec4c7..eb922f21a66 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -222,7 +222,7 @@
src.icon_state = "mechfab3" //looks better than 'flick'
src.use_power = 2
src.updateUsrDialog()
- sleep(round(part.construction_time*time_coeff,0.1))
+ sleep(get_construction_time_w_coeff(part,0.1))
if(!src) return
src.use_power = 1
src.being_built.Move(get_step(src,EAST))
@@ -300,12 +300,12 @@
if("materials")
diff = round(initial(resource_coeff) - (initial(resource_coeff)*T.level)/25,0.01)
if(resource_coeff!=diff)
- resource_coeff = round(initial(resource_coeff) - (initial(resource_coeff)*T.level)/25,0.01)
+ resource_coeff = diff
output+="Production efficiency increased.
"
if("programming")
- diff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.01)
+ diff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.1)
if(time_coeff!=diff)
- time_coeff = round(initial(time_coeff) - (initial(time_coeff)*T.level)/25,0.1)
+ time_coeff = diff
output+="Production routines updated.
"
return output
@@ -346,6 +346,10 @@
if (..())
return
user.machine = src
+ var/turf/exit = get_step(src,EAST)
+ if(exit.density)
+ src.visible_message("[src] beeps, \"Error! Part outlet is obstructed\".")
+ return
if(temp)
left_part = temp
else if(src.being_built)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index cc444a27ae1..5a6df0ca5ff 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -408,7 +408,7 @@
spawn()
var/obj/mecha/mecha = src
// var/mob/M = src.occupant
- var/turf/T = src.loc
+ var/turf/T = get_turf(src)
var/wreckage = src.wreckage
var/list/r_equipment = src.equipment
src = null
@@ -421,6 +421,8 @@
for(var/obj/item/mecha_parts/mecha_equipment/E in r_equipment)
if(prob(30))
WR.equipment += E
+ E.loc = WR
+ E.equip_ready = 1
E.reliability = rand(30,100)
else
E.loc = T
@@ -611,7 +613,7 @@
/obj/mecha/verb/move_inside()
set category = "Object"
- set name = "Enter Mecha"
+ set name = "Enter Exosuit"
set src in oview(1)
if (usr.stat || !ishuman(usr))
@@ -627,9 +629,12 @@
return
*/
var/passed
- if((src.dna && usr.dna.unique_enzymes==src.dna))
+ if(src.dna)
+ if(usr.dna.unique_enzymes==src.dna)
+ passed = 1
+ else if(src.operation_allowed(usr))
passed = 1
- if(!passed && !src.operation_allowed(usr))
+ if(!passed)
usr << "\red Access denied"
src.log_append_to_last("Permission denied.")
return
@@ -953,7 +958,7 @@
user << "There's already a powercell installed."
return
- else if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ else if(istype(W, /obj/item/weapon/weldingtool) && W:welding && user.a_intent != "hurt")
if (W:remove_fuel(0,user))
if (src.internal_damage & MECHA_INT_TANK_BREACH)
src.internal_damage &= ~MECHA_INT_TANK_BREACH
diff --git a/code/game/mecha/mecha_construction.dm b/code/game/mecha/mecha_construction_paths.dm
similarity index 58%
rename from code/game/mecha/mecha_construction.dm
rename to code/game/mecha/mecha_construction_paths.dm
index 742c7e43554..30c3634bcd3 100644
--- a/code/game/mecha/mecha_construction.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -1,349 +1,3 @@
-/////////////////////////
-////// Mecha Parts //////
-/////////////////////////
-
-/obj/item/mecha_parts
- name = "mecha part"
- icon = 'mech_construct.dmi'
- icon_state = "blank"
- w_class = 20
- flags = FPRINT | TABLEPASS | CONDUCT
- origin_tech = "programming=2;materials=2"
- var/construction_time = 100
- var/list/construction_cost = list("metal"=20000,"glass"=5000)
-
-
-/obj/item/mecha_parts/chassis
- name="Mecha Chassis"
- icon_state = "backbone"
- var/datum/construction/construct
- construction_cost = list("metal"=20000)
- flags = FPRINT | CONDUCT
-
- attackby(obj/item/W as obj, mob/user as mob)
- if(!construct || !construct.action(W, user))
- ..()
- return
-
- attack_hand()
- return
-
-/////////// Ripley
-
-/obj/item/mecha_parts/chassis/ripley
- name = "Ripley Chassis"
-
- New()
- ..()
- construct = new /datum/construction/mecha/ripley_chassis(src)
-
-/obj/item/mecha_parts/part/ripley_torso
- name="Ripley Torso"
- icon_state = "ripley_harness"
- origin_tech = "programming=2;materials=3;biotech=1"
- construction_time = 300
- construction_cost = list("metal"=40000,"glass"=15000)
-
-/obj/item/mecha_parts/part/ripley_left_arm
- name="Ripley Left Arm"
- icon_state = "ripley_l_arm"
- origin_tech = "programming=2;materials=3"
- construction_time = 200
- construction_cost = list("metal"=25000)
-
-/obj/item/mecha_parts/part/ripley_right_arm
- name="Ripley Right Arm"
- icon_state = "ripley_r_arm"
- origin_tech = "programming=2;materials=3"
- construction_time = 200
- construction_cost = list("metal"=25000)
-
-/obj/item/mecha_parts/part/ripley_left_leg
- name="Ripley Left Leg"
- icon_state = "ripley_l_leg"
- origin_tech = "programming=2;materials=3"
- construction_time = 200
- construction_cost = list("metal"=30000)
-
-/obj/item/mecha_parts/part/ripley_right_leg
- name="Ripley Right Leg"
- icon_state = "ripley_r_leg"
- origin_tech = "programming=2;materials=3"
- construction_time = 200
- construction_cost = list("metal"=30000)
-
-///////// Gygax
-
-/obj/item/mecha_parts/chassis/gygax
- name = "Gygax Chassis"
- construction_cost = list("metal"=25000)
-
- New()
- ..()
- construct = new /datum/construction/mecha/gygax_chassis(src)
-
-/obj/item/mecha_parts/part/gygax_torso
- name="Gygax Torso"
- icon_state = "gygax_harness"
- origin_tech = "programming=2;materials=4;biotech=2"
- construction_time = 300
- construction_cost = list("metal"=50000,"glass"=20000)
-
-/obj/item/mecha_parts/part/gygax_head
- name="Gygax Head"
- icon_state = "gygax_head"
- origin_tech = "programming=2;materials=4;magnets=3"
- construction_time = 200
- construction_cost = list("metal"=20000,"glass"=10000)
-
-/obj/item/mecha_parts/part/gygax_left_arm
- name="Gygax Left Arm"
- icon_state = "gygax_l_arm"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=30000)
-
-/obj/item/mecha_parts/part/gygax_right_arm
- name="Gygax Right Arm"
- icon_state = "gygax_r_arm"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=30000)
-
-/obj/item/mecha_parts/part/gygax_left_leg
- name="Gygax Left Leg"
- icon_state = "gygax_l_leg"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=35000)
-
-/obj/item/mecha_parts/part/gygax_right_leg
- name="Gygax Right Leg"
- icon_state = "gygax_r_leg"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=35000)
-
-/obj/item/mecha_parts/part/gygax_armour
- name="Gygax Armour Plates"
- icon_state = "gygax_armour"
- origin_tech = "materials=5;combat=4"
- construction_time = 600
- construction_cost = list("metal"=50000,"diamond"=10000)
-
-
-//////////// Durand
-
-/obj/item/mecha_parts/chassis/durand
- name = "Durand Chassis"
- construction_cost = list("metal"=25000)
-
- New()
- ..()
- construct = new /datum/construction/mecha/durand_chassis(src)
-
-/obj/item/mecha_parts/part/durand_torso
- name="Durand Torso"
- icon_state = "gygax_harness"
- origin_tech = "programming=2;materials=4;biotech=2"
- construction_time = 300
- construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000)
-
-/obj/item/mecha_parts/part/durand_head
- name="Durand Head"
- icon_state = "gygax_head"
- origin_tech = "programming=2;materials=4;magnets=3"
- construction_time = 200
- construction_cost = list("metal"=25000,"glass"=10000,"silver"=5000)
-
-/obj/item/mecha_parts/part/durand_left_arm
- name="Durand Left Arm"
- icon_state = "gygax_l_arm"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=35000,"silver"=5000)
-
-/obj/item/mecha_parts/part/durand_right_arm
- name="Durand Right Arm"
- icon_state = "gygax_r_arm"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=35000,"silver"=5000)
-
-/obj/item/mecha_parts/part/durand_left_leg
- name="Durand Left Leg"
- icon_state = "gygax_l_leg"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=40000,"silver"=5000)
-
-/obj/item/mecha_parts/part/durand_right_leg
- name="Durand Right Leg"
- icon_state = "gygax_r_leg"
- origin_tech = "programming=2;materials=4"
- construction_time = 200
- construction_cost = list("metal"=40000,"silver"=5000)
-
-/obj/item/mecha_parts/part/durand_armour
- name="Durand Armour Plates"
- icon_state = "gygax_armour"
- origin_tech = "materials=5;combat=4"
- construction_time = 600
- construction_cost = list("metal"=50000,"uranium"=10000)
-
-
-
-////////// Firefighter
-
-/obj/item/mecha_parts/chassis/firefighter
- name = "Ripley-on-Fire Chassis"
-
- New()
- ..()
- construct = new /datum/construction/mecha/firefighter_chassis(src)
-
-/obj/item/mecha_parts/part/firefighter_torso
- name="Ripley-on-Fire Torso"
- icon_state = "ripley_harness"
-
-/obj/item/mecha_parts/part/firefighter_left_arm
- name="Ripley-on-Fire Left Arm"
- icon_state = "ripley_l_arm"
-
-/obj/item/mecha_parts/part/firefighter_right_arm
- name="Ripley-on-Fire Right Arm"
- icon_state = "ripley_r_arm"
-
-/obj/item/mecha_parts/part/firefighter_left_leg
- name="Ripley-on-Fire Left Leg"
- icon_state = "ripley_l_leg"
-
-/obj/item/mecha_parts/part/firefighter_right_leg
- name="Ripley-on-Fire Right Leg"
- icon_state = "ripley_r_leg"
-
-
-////////// HONK
-
-/obj/item/mecha_parts/chassis/honker
- name = "H.O.N.K Chassis"
-
- New()
- ..()
- construct = new /datum/construction/mecha/honker_chassis(src)
-
-/obj/item/mecha_parts/part/honker_torso
- name="H.O.N.K Torso"
- icon_state = "honker_harness"
- construction_time = 300
- construction_cost = list("metal"=35000,"glass"=10000,"bananium"=10000)
-
-/obj/item/mecha_parts/part/honker_head
- name="H.O.N.K Head"
- icon_state = "honker_head"
- construction_time = 200
- construction_cost = list("metal"=15000,"glass"=5000,"bananium"=5000)
-
-/obj/item/mecha_parts/part/honker_left_arm
- name="H.O.N.K Left Arm"
- icon_state = "honker_l_arm"
- construction_time = 200
- construction_cost = list("metal"=20000,"bananium"=5000)
-
-/obj/item/mecha_parts/part/honker_right_arm
- name="H.O.N.K Right Arm"
- icon_state = "honker_r_arm"
- construction_time = 200
- construction_cost = list("metal"=20000,"bananium"=5000)
-
-/obj/item/mecha_parts/part/honker_left_leg
- name="H.O.N.K Left Leg"
- icon_state = "honker_l_leg"
- construction_time = 200
- construction_cost = list("metal"=20000,"bananium"=5000)
-
-/obj/item/mecha_parts/part/honker_right_leg
- name="H.O.N.K Right Leg"
- icon_state = "honker_r_leg"
- construction_time = 200
- construction_cost = list("metal"=20000,"bananium"=5000)
-
-
-/obj/item/mecha_parts/circuitboard
- name = "Exosuit Circuit board"
- icon = 'module.dmi'
- icon_state = "std_mod"
- item_state = "electronic"
- flags = FPRINT | TABLEPASS| CONDUCT
- force = 5.0
- w_class = 2.0
- throwforce = 5.0
- throw_speed = 3
- throw_range = 15
-
- ripley
- origin_tech = "programming=3"
-
- ripley/peripherals
- name = "Circuit board (Ripley Peripherals Control module)"
- icon_state = "mcontroller"
-
- ripley/main
- name = "Circuit board (Ripley Central Control module)"
- icon_state = "mainboard"
-
- gygax
- origin_tech = "programming=4"
-
- gygax/peripherals
- name = "Circuit board (Gygax Peripherals Control module)"
- icon_state = "mcontroller"
-
- gygax/targeting
- name = "Circuit board (Gygax Weapon Control and Targeting module)"
- icon_state = "mcontroller"
- origin_tech = "programming=3;combat=3"
-
- gygax/main
- name = "Circuit board (Gygax Central Control module)"
- icon_state = "mainboard"
-
- durand
- origin_tech = "programming=4"
-
- durand/peripherals
- name = "Circuit board (Durand Peripherals Control module)"
- icon_state = "mcontroller"
-
- durand/targeting
- name = "Circuit board (Durand Weapon Control and Targeting module)"
- icon_state = "mcontroller"
- origin_tech = "programming=3;combat=3"
-
- durand/main
- name = "Circuit board (Durand Central Control module)"
- icon_state = "mainboard"
-
- firefighter/peripherals
- name = "Circuit board (Ripley-on-Fire Peripherals Control module)"
- icon_state = "mcontroller"
-
- honker
- origin_tech = "programming=4"
-
- honker/peripherals
- name = "Circuit board (H.O.N.K Peripherals Control module)"
- icon_state = "mcontroller"
-
- honker/targeting
- name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
- icon_state = "mcontroller"
-
- honker/main
- name = "Circuit board (H.O.N.K Central Control module)"
- icon_state = "mainboard"
-
-
////////////////////////////////
///// Construction datums //////
////////////////////////////////
@@ -435,20 +89,62 @@
/datum/construction/reversible/mecha/ripley
result = "/obj/mecha/working/ripley"
- steps = list(list("key"=/obj/item/weapon/weldingtool,"backkey"=/obj/item/weapon/wrench),//1
- list("key"=/obj/item/weapon/wrench,"backkey"=/obj/item/weapon/crowbar),//2
- list("key"=/obj/item/stack/sheet/r_metal,"backkey"=/obj/item/weapon/weldingtool),//3
- list("key"=/obj/item/weapon/weldingtool,"backkey"=/obj/item/weapon/wrench),//4
- list("key"=/obj/item/weapon/wrench,"backkey"=/obj/item/weapon/crowbar),//5
- list("key"=/obj/item/stack/sheet/metal,"backkey"=/obj/item/weapon/screwdriver),//6
- list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/crowbar),//7
- list("key"=/obj/item/mecha_parts/circuitboard/ripley/peripherals,"backkey"=/obj/item/weapon/screwdriver),//8
- list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/crowbar),//9
- list("key"=/obj/item/mecha_parts/circuitboard/ripley/main,"backkey"=/obj/item/weapon/screwdriver),//10
- list("key"=/obj/item/weapon/wirecutters,"backkey"=/obj/item/weapon/screwdriver),//11
- list("key"=/obj/item/weapon/cable_coil,"backkey"=/obj/item/weapon/screwdriver),//12
- list("key"=/obj/item/weapon/screwdriver,"backkey"=/obj/item/weapon/wrench),//13
- list("key"=/obj/item/weapon/wrench)//14
+ steps = list(
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/stack/sheet/r_metal,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/sheet/metal,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Peripherals control module is secured"),
+ //7
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Peripherals control module is installed"),
+ //8
+ list("key"=/obj/item/mecha_parts/circuitboard/ripley/peripherals,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Central control module is secured"),
+ //9
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Central control module is installed"),
+ //10
+ list("key"=/obj/item/mecha_parts/circuitboard/ripley/main,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is adjusted"),
+ //11
+ list("key"=/obj/item/weapon/wirecutters,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is added"),
+ //12
+ list("key"=/obj/item/weapon/cable_coil,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The hydraulic systems are active."),
+ //13
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are connected."),
+ //14
+ list("key"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are disconnected.")
)
action(atom/used_atom,mob/user as mob)
@@ -561,94 +257,220 @@
spawn_result()
var/obj/item/mecha_parts/chassis/const_holder = holder
- const_holder.construct = new /datum/construction/mecha/gygax(const_holder)
+ const_holder.construct = new /datum/construction/reversible/mecha/gygax(const_holder)
const_holder.density = 1
spawn()
del src
return
-
-/datum/construction/mecha/gygax
+/datum/construction/reversible/mecha/gygax
result = "/obj/mecha/combat/gygax"
- steps = list(list("key"="/obj/item/weapon/weldingtool"),//1
- list("key"="/obj/item/weapon/wrench"),//2
- list("key"="/obj/item/mecha_parts/part/gygax_armour"),//3
- list("key"="/obj/item/weapon/weldingtool"),//4
- list("key"="/obj/item/weapon/wrench"),//5
- list("key"="/obj/item/stack/sheet/metal"),//6
- list("key"="/obj/item/weapon/screwdriver"),//7
- list("key"="/obj/item/weapon/stock_parts/capacitor/adv"),//8
- list("key"="/obj/item/weapon/screwdriver"),//9
- list("key"="/obj/item/weapon/stock_parts/scanning_module/adv"),//10
- list("key"="/obj/item/weapon/screwdriver"),//11
- list("key"="/obj/item/mecha_parts/circuitboard/gygax/targeting"),//12
- list("key"="/obj/item/weapon/screwdriver"),//13
- list("key"="/obj/item/mecha_parts/circuitboard/gygax/peripherals"),//14
- list("key"="/obj/item/weapon/screwdriver"),//15
- list("key"="/obj/item/mecha_parts/circuitboard/gygax/main"),//16
- list("key"="/obj/item/weapon/wirecutters"),//17
- list("key"="/obj/item/weapon/cable_coil"),//18
- list("key"="/obj/item/weapon/screwdriver"),//19
- list("key"="/obj/item/weapon/wrench")//20
+ steps = list(
+ //1
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="External armor is wrenched."),
+ //2
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="External armor is installed."),
+ //3
+ list("key"=/obj/item/mecha_parts/part/gygax_armour,
+ "backkey"=/obj/item/weapon/weldingtool,
+ "desc"="Internal armor is welded."),
+ //4
+ list("key"=/obj/item/weapon/weldingtool,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="Internal armor is wrenched"),
+ //5
+ list("key"=/obj/item/weapon/wrench,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Internal armor is installed"),
+ //6
+ list("key"=/obj/item/stack/sheet/metal,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Advanced capacitor is secured"),
+ //7
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Advanced capacitor is installed"),
+ //8
+ list("key"=/obj/item/weapon/stock_parts/capacitor/adv,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Advanced scanner module is secured"),
+ //9
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Advanced scanner module is installed"),
+ //10
+ list("key"=/obj/item/weapon/stock_parts/scanning_module/adv,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Targeting module is secured"),
+ //11
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Targeting module is installed"),
+ //12
+ list("key"=/obj/item/mecha_parts/circuitboard/gygax/targeting,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Peripherals control module is secured"),
+ //13
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Peripherals control module is installed"),
+ //14
+ list("key"=/obj/item/mecha_parts/circuitboard/gygax/peripherals,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="Central control module is secured"),
+ //15
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/crowbar,
+ "desc"="Central control module is installed"),
+ //16
+ list("key"=/obj/item/mecha_parts/circuitboard/gygax/main,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is adjusted"),
+ //17
+ list("key"=/obj/item/weapon/wirecutters,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The wiring is added"),
+ //18
+ list("key"=/obj/item/weapon/cable_coil,
+ "backkey"=/obj/item/weapon/screwdriver,
+ "desc"="The hydraulic systems are active."),
+ //19
+ list("key"=/obj/item/weapon/screwdriver,
+ "backkey"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are connected."),
+ //20
+ list("key"=/obj/item/weapon/wrench,
+ "desc"="The hydraulic systems are disconnected.")
)
action(atom/used_atom,mob/user as mob)
return check_step(used_atom,user)
- custom_action(step, atom/used_atom, mob/user)
+ custom_action(index, diff, atom/used_atom, mob/user)
if(!..())
return 0
//TODO: better messages.
- switch(step)
+ switch(index)
if(20)
user.visible_message("[user] connects [holder] hydraulic systems", "You connect [holder] hydraulic systems.")
if(19)
- user.visible_message("[user] adjusts [holder] hydraulic systems.", "You adjust [holder] hydraulic systems.")
+ if(diff==FORWARD)
+ user.visible_message("[user] activates [holder] hydraulic systems.", "You activate [holder] hydraulic systems.")
+ else
+ user.visible_message("[user] disconnects [holder] hydraulic systems", "You disconnect [holder] hydraulic systems.")
if(18)
- user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ if(diff==FORWARD)
+ user.visible_message("[user] adds the wiring to [holder].", "You add the wiring to [holder].")
+ else
+ user.visible_message("[user] deactivates [holder] hydraulic systems.", "You deactivate [holder] hydraulic systems.")
if(17)
- user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ if(diff==FORWARD)
+ user.visible_message("[user] adjusts the wiring of [holder].", "You adjust the wiring of [holder].")
+ else
+ user.visible_message("[user] removes the wiring from [holder].", "You remove the wiring from [holder].")
+ var/obj/item/weapon/cable_coil/coil = new /obj/item/weapon/cable_coil(get_turf(holder))
+ coil.amount = 4
if(16)
- user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the central control module into [holder].", "You install the central computer mainboard into [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] disconnects the wiring of [holder].", "You disconnect the wiring of [holder].")
if(15)
- user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the mainboard.", "You secure the mainboard.")
+ else
+ user.visible_message("[user] removes the central control module from [holder].", "You remove the central computer mainboard from [holder].")
+ new /obj/item/mecha_parts/circuitboard/gygax/main(get_turf(holder))
if(14)
- user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the peripherals control module into [holder].", "You install the peripherals control module into [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.")
if(13)
- user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.")
+ else
+ user.visible_message("[user] removes the peripherals control module from [holder].", "You remove the peripherals control module from [holder].")
+ new /obj/item/mecha_parts/circuitboard/gygax/peripherals(get_turf(holder))
if(12)
- user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs the weapon control module into [holder].", "You install the weapon control module into [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.")
if(11)
- user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.")
+ else
+ user.visible_message("[user] removes the weapon control module from [holder].", "You remove the weapon control module from [holder].")
+ new /obj/item/mecha_parts/circuitboard/gygax/targeting(get_turf(holder))
if(10)
- user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced scanner module to [holder].", "You install advanced scanner module to [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.")
if(9)
- user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced scanner module.", "You secure the advanced scanner module.")
+ else
+ user.visible_message("[user] removes the advanced scanner module from [holder].", "You remove the advanced scanner module from [holder].")
+ new /obj/item/weapon/stock_parts/scanning_module/adv(get_turf(holder))
if(8)
- user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs advanced capacitor to [holder].", "You install advanced capacitor to [holder].")
+ del used_atom
+ else
+ user.visible_message("[user] unfastens the advanced scanner module.", "You unfasten the advanced scanner module.")
if(7)
- user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures the advanced capacitor.", "You secure the advanced capacitor.")
+ else
+ user.visible_message("[user] removes the advanced capacitor from [holder].", "You remove the advanced capacitor from [holder].")
+ new /obj/item/weapon/stock_parts/capacitor/adv(get_turf(holder))
if(6)
- user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ if(diff==FORWARD)
+ user.visible_message("[user] installs internal armor layer to [holder].", "You install internal armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the advanced capacitor.", "You unfasten the advanced capacitor.")
if(5)
- user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures internal armor layer.", "You secure internal armor layer.")
+ else
+ user.visible_message("[user] pries internal armor layer from [holder].", "You prie internal armor layer from [holder].")
+ var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder))
+ MS.amount = 5
if(4)
- user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ if(diff==FORWARD)
+ user.visible_message("[user] welds internal armor layer to [holder].", "You weld the internal armor layer to [holder].")
+ else
+ user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.")
if(3)
- user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].")
- holder.overlays += used_atom.icon_state
- del used_atom
+ if(diff==FORWARD)
+ user.visible_message("[user] installs Gygax Armour Plates to [holder].", "You install Gygax Armour Plates to [holder].")
+ holder.overlays += used_atom.icon_state
+ del used_atom
+ else
+ user.visible_message("[user] cuts internal armor layer from [holder].", "You cut the internal armor layer from [holder].")
if(2)
- user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.")
+ if(diff==FORWARD)
+ user.visible_message("[user] secures Gygax Armour Plates.", "You secure Gygax Armour Plates.")
+ else
+ user.visible_message("[user] pries Gygax Armour Plates from [holder].", "You prie Gygax Armour Plates from [holder].")
+ new /obj/item/mecha_parts/part/gygax_armour(get_turf(holder))
if(1)
- user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].")
+ if(diff==FORWARD)
+ user.visible_message("[user] welds Gygax Armour Plates to [holder].", "You weld Gygax Armour Plates to [holder].")
+ else
+ user.visible_message("[user] unfastens Gygax Armour Plates.", "You unfasten Gygax Armour Plates.")
return 1
@@ -921,11 +743,4 @@
user.visible_message("[user] secures Durand Armour Plates.", "You secure Durand Armour Plates.")
if(1)
user.visible_message("[user] welds Durand Armour Plates to [holder].", "You weld Durand Armour Plates to [holder].")
- return 1
-
-
-
-////////////////// misc ////////////////
-
-
-
+ return 1
\ No newline at end of file
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
new file mode 100644
index 00000000000..b013fd23955
--- /dev/null
+++ b/code/game/mecha/mecha_parts.dm
@@ -0,0 +1,346 @@
+/////////////////////////
+////// Mecha Parts //////
+/////////////////////////
+
+/obj/item/mecha_parts
+ name = "mecha part"
+ icon = 'mech_construct.dmi'
+ icon_state = "blank"
+ w_class = 20
+ flags = FPRINT | TABLEPASS | CONDUCT
+ origin_tech = "programming=2;materials=2"
+ var/construction_time = 100
+ var/list/construction_cost = list("metal"=20000,"glass"=5000)
+
+
+/obj/item/mecha_parts/chassis
+ name="Mecha Chassis"
+ icon_state = "backbone"
+ var/datum/construction/construct
+ construction_cost = list("metal"=20000)
+ flags = FPRINT | CONDUCT
+
+ attackby(obj/item/W as obj, mob/user as mob)
+ if(!construct || !construct.action(W, user))
+ ..()
+ return
+
+ attack_hand()
+ return
+
+/////////// Ripley
+
+/obj/item/mecha_parts/chassis/ripley
+ name = "Ripley Chassis"
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/ripley_chassis(src)
+
+/obj/item/mecha_parts/part/ripley_torso
+ name="Ripley Torso"
+ icon_state = "ripley_harness"
+ origin_tech = "programming=2;materials=3;biotech=2"
+ construction_time = 300
+ construction_cost = list("metal"=40000,"glass"=15000)
+
+/obj/item/mecha_parts/part/ripley_left_arm
+ name="Ripley Left Arm"
+ icon_state = "ripley_l_arm"
+ origin_tech = "programming=2;materials=3"
+ construction_time = 200
+ construction_cost = list("metal"=25000)
+
+/obj/item/mecha_parts/part/ripley_right_arm
+ name="Ripley Right Arm"
+ icon_state = "ripley_r_arm"
+ origin_tech = "programming=2;materials=3"
+ construction_time = 200
+ construction_cost = list("metal"=25000)
+
+/obj/item/mecha_parts/part/ripley_left_leg
+ name="Ripley Left Leg"
+ icon_state = "ripley_l_leg"
+ origin_tech = "programming=2;materials=3"
+ construction_time = 200
+ construction_cost = list("metal"=30000)
+
+/obj/item/mecha_parts/part/ripley_right_leg
+ name="Ripley Right Leg"
+ icon_state = "ripley_r_leg"
+ origin_tech = "programming=2;materials=3"
+ construction_time = 200
+ construction_cost = list("metal"=30000)
+
+///////// Gygax
+
+/obj/item/mecha_parts/chassis/gygax
+ name = "Gygax Chassis"
+ construction_cost = list("metal"=25000)
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/gygax_chassis(src)
+
+/obj/item/mecha_parts/part/gygax_torso
+ name="Gygax Torso"
+ icon_state = "gygax_harness"
+ origin_tech = "programming=2;materials=5;biotech=3"
+ construction_time = 300
+ construction_cost = list("metal"=50000,"glass"=20000)
+
+/obj/item/mecha_parts/part/gygax_head
+ name="Gygax Head"
+ icon_state = "gygax_head"
+ origin_tech = "programming=2;materials=5;magnets=3"
+ construction_time = 200
+ construction_cost = list("metal"=20000,"glass"=10000)
+
+/obj/item/mecha_parts/part/gygax_left_arm
+ name="Gygax Left Arm"
+ icon_state = "gygax_l_arm"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=30000)
+
+/obj/item/mecha_parts/part/gygax_right_arm
+ name="Gygax Right Arm"
+ icon_state = "gygax_r_arm"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=30000)
+
+/obj/item/mecha_parts/part/gygax_left_leg
+ name="Gygax Left Leg"
+ icon_state = "gygax_l_leg"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=35000)
+
+/obj/item/mecha_parts/part/gygax_right_leg
+ name="Gygax Right Leg"
+ icon_state = "gygax_r_leg"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=35000)
+
+/obj/item/mecha_parts/part/gygax_armour
+ name="Gygax Armour Plates"
+ icon_state = "gygax_armour"
+ origin_tech = "materials=5;combat=4"
+ construction_time = 600
+ construction_cost = list("metal"=50000,"diamond"=10000)
+
+
+//////////// Durand
+
+/obj/item/mecha_parts/chassis/durand
+ name = "Durand Chassis"
+ construction_cost = list("metal"=25000)
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/durand_chassis(src)
+
+/obj/item/mecha_parts/part/durand_torso
+ name="Durand Torso"
+ icon_state = "gygax_harness"
+ origin_tech = "programming=2;materials=5;biotech=3"
+ construction_time = 300
+ construction_cost = list("metal"=55000,"glass"=20000,"silver"=10000)
+
+/obj/item/mecha_parts/part/durand_head
+ name="Durand Head"
+ icon_state = "gygax_head"
+ origin_tech = "programming=2;materials=5;magnets=3"
+ construction_time = 200
+ construction_cost = list("metal"=25000,"glass"=10000,"silver"=5000)
+
+/obj/item/mecha_parts/part/durand_left_arm
+ name="Durand Left Arm"
+ icon_state = "gygax_l_arm"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=35000,"silver"=5000)
+
+/obj/item/mecha_parts/part/durand_right_arm
+ name="Durand Right Arm"
+ icon_state = "gygax_r_arm"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=35000,"silver"=5000)
+
+/obj/item/mecha_parts/part/durand_left_leg
+ name="Durand Left Leg"
+ icon_state = "gygax_l_leg"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=40000,"silver"=5000)
+
+/obj/item/mecha_parts/part/durand_right_leg
+ name="Durand Right Leg"
+ icon_state = "gygax_r_leg"
+ origin_tech = "programming=2;materials=5"
+ construction_time = 200
+ construction_cost = list("metal"=40000,"silver"=5000)
+
+/obj/item/mecha_parts/part/durand_armour
+ name="Durand Armour Plates"
+ icon_state = "gygax_armour"
+ origin_tech = "materials=5;combat=4"
+ construction_time = 600
+ construction_cost = list("metal"=50000,"uranium"=10000)
+
+
+
+////////// Firefighter
+
+/obj/item/mecha_parts/chassis/firefighter
+ name = "Ripley-on-Fire Chassis"
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/firefighter_chassis(src)
+
+/obj/item/mecha_parts/part/firefighter_torso
+ name="Ripley-on-Fire Torso"
+ icon_state = "ripley_harness"
+
+/obj/item/mecha_parts/part/firefighter_left_arm
+ name="Ripley-on-Fire Left Arm"
+ icon_state = "ripley_l_arm"
+
+/obj/item/mecha_parts/part/firefighter_right_arm
+ name="Ripley-on-Fire Right Arm"
+ icon_state = "ripley_r_arm"
+
+/obj/item/mecha_parts/part/firefighter_left_leg
+ name="Ripley-on-Fire Left Leg"
+ icon_state = "ripley_l_leg"
+
+/obj/item/mecha_parts/part/firefighter_right_leg
+ name="Ripley-on-Fire Right Leg"
+ icon_state = "ripley_r_leg"
+
+
+////////// HONK
+
+/obj/item/mecha_parts/chassis/honker
+ name = "H.O.N.K Chassis"
+
+ New()
+ ..()
+ construct = new /datum/construction/mecha/honker_chassis(src)
+
+/obj/item/mecha_parts/part/honker_torso
+ name="H.O.N.K Torso"
+ icon_state = "honker_harness"
+ construction_time = 300
+ construction_cost = list("metal"=35000,"glass"=10000,"bananium"=10000)
+
+/obj/item/mecha_parts/part/honker_head
+ name="H.O.N.K Head"
+ icon_state = "honker_head"
+ construction_time = 200
+ construction_cost = list("metal"=15000,"glass"=5000,"bananium"=5000)
+
+/obj/item/mecha_parts/part/honker_left_arm
+ name="H.O.N.K Left Arm"
+ icon_state = "honker_l_arm"
+ construction_time = 200
+ construction_cost = list("metal"=20000,"bananium"=5000)
+
+/obj/item/mecha_parts/part/honker_right_arm
+ name="H.O.N.K Right Arm"
+ icon_state = "honker_r_arm"
+ construction_time = 200
+ construction_cost = list("metal"=20000,"bananium"=5000)
+
+/obj/item/mecha_parts/part/honker_left_leg
+ name="H.O.N.K Left Leg"
+ icon_state = "honker_l_leg"
+ construction_time = 200
+ construction_cost = list("metal"=20000,"bananium"=5000)
+
+/obj/item/mecha_parts/part/honker_right_leg
+ name="H.O.N.K Right Leg"
+ icon_state = "honker_r_leg"
+ construction_time = 200
+ construction_cost = list("metal"=20000,"bananium"=5000)
+
+
+/obj/item/mecha_parts/circuitboard
+ name = "Exosuit Circuit board"
+ icon = 'module.dmi'
+ icon_state = "std_mod"
+ item_state = "electronic"
+ flags = FPRINT | TABLEPASS| CONDUCT
+ force = 5.0
+ w_class = 2.0
+ throwforce = 5.0
+ throw_speed = 3
+ throw_range = 15
+
+ ripley
+ origin_tech = "programming=3"
+
+ ripley/peripherals
+ name = "Circuit board (Ripley Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ ripley/main
+ name = "Circuit board (Ripley Central Control module)"
+ icon_state = "mainboard"
+
+ gygax
+ origin_tech = "programming=4"
+
+ gygax/peripherals
+ name = "Circuit board (Gygax Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ gygax/targeting
+ name = "Circuit board (Gygax Weapon Control and Targeting module)"
+ icon_state = "mcontroller"
+ origin_tech = "programming=4;combat=4"
+
+ gygax/main
+ name = "Circuit board (Gygax Central Control module)"
+ icon_state = "mainboard"
+
+ durand
+ origin_tech = "programming=4"
+
+ durand/peripherals
+ name = "Circuit board (Durand Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ durand/targeting
+ name = "Circuit board (Durand Weapon Control and Targeting module)"
+ icon_state = "mcontroller"
+ origin_tech = "programming=4;combat=4"
+
+ durand/main
+ name = "Circuit board (Durand Central Control module)"
+ icon_state = "mainboard"
+
+ firefighter/peripherals
+ name = "Circuit board (Ripley-on-Fire Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ honker
+ origin_tech = "programming=4"
+
+ honker/peripherals
+ name = "Circuit board (H.O.N.K Peripherals Control module)"
+ icon_state = "mcontroller"
+
+ honker/targeting
+ name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
+ icon_state = "mcontroller"
+
+ honker/main
+ name = "Circuit board (H.O.N.K Central Control module)"
+ icon_state = "mainboard"
+
+
diff --git a/code/game/research/designs.dm b/code/game/research/designs.dm
index 5fa7e3419dd..887a627f724 100644
--- a/code/game/research/designs.dm
+++ b/code/game/research/designs.dm
@@ -509,7 +509,7 @@ datum
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
id = "mech_wormhole_gen"
build_type = MECHFAB
- req_tech = list("bluepace" = 4)
+ req_tech = list("bluepace" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/wormhole_generator"
mech_teleporter
@@ -525,7 +525,7 @@ datum
desc = "An exosuit-mounted Rapid Construction Device."
id = "mech_rcd"
build_type = MECHFAB
- req_tech = list("materials" = 4, "bluespace" = 4, "magnets" = 4, "powerstorage"=4)
+ req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4)
build_path = "/obj/item/mecha_parts/mecha_equipment/tool/rcd"
mech_gravcatapult
@@ -800,6 +800,16 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/rdserver"
+ mechfab
+ name = "Exosuit Fabricator Board"
+ desc = "The circuit board for an Exosuit Fabricator"
+ id = "mechfab"
+ req_tech = list("programming" = 2,"materials"=3)
+ build_type = IMPRINTER
+ materials = list("$glass" = 2000, "acid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/mechfab"
+
+
/////////////////////////////////////////
////////////Power Stuff//////////////////
/////////////////////////////////////////
diff --git a/icons/misc/mech_construct.dmi b/icons/misc/mech_construct.dmi
index 0d496de7d42..98a6e6b48a5 100644
Binary files a/icons/misc/mech_construct.dmi and b/icons/misc/mech_construct.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 75e92742bfe..80899402df4 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -12,6 +12,7 @@
#define FILE_DIR "code/ATMOSPHERICS/components/unary"
#define FILE_DIR "code/datums"
#define FILE_DIR "code/datums/diseases"
+#define FILE_DIR "code/datums/helper_datums"
#define FILE_DIR "code/datums/spells"
#define FILE_DIR "code/defines"
#define FILE_DIR "code/defines/area"
@@ -195,6 +196,8 @@
#include "code\datums\diseases\robotic_transformation.dm"
#include "code\datums\diseases\wizarditis.dm"
#include "code\datums\diseases\xeno_transformation.dm"
+#include "code\datums\helper_datums\construction_datum.dm"
+#include "code\datums\helper_datums\global_iterator.dm"
#include "code\datums\spells\blind.dm"
#include "code\datums\spells\blink.dm"
#include "code\datums\spells\conjure.dm"
@@ -423,13 +426,12 @@
#include "code\game\magic\cultist\ritual.dm"
#include "code\game\magic\cultist\runes.dm"
#include "code\game\magic\cultist\specialtalisman.dm"
-#include "code\game\mecha\construction_datum.dm"
-#include "code\game\mecha\global_iterator.dm"
#include "code\game\mecha\mech_bay.dm"
#include "code\game\mecha\mech_fabricator.dm"
#include "code\game\mecha\mecha.dm"
-#include "code\game\mecha\mecha_construction.dm"
+#include "code\game\mecha\mecha_construction_paths.dm"
#include "code\game\mecha\mecha_control_console.dm"
+#include "code\game\mecha\mecha_parts.dm"
#include "code\game\mecha\mecha_wreckage.dm"
#include "code\game\mecha\combat\combat.dm"
#include "code\game\mecha\combat\durand.dm"