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"