From c1b1f4323c07bdb488c9014aa677690e9c288b03 Mon Sep 17 00:00:00 2001 From: panurgomatic Date: Wed, 6 Apr 2011 23:45:30 +0000 Subject: [PATCH] - Mech Fabricator can be built. Contruction path is almost the same as for lathes, but you'll require 2 Matter Bins, 1 Manipulator, 1 Micro-Laser and 1 Console Screen. - Added design for mech fabricator circuitboard. - Added origin_tech for some mech equipment. - Examining mecha chassis will show what construction step you're currently on. - Made Gygax construction reversible. - Moved global_iterator.dm and construction_datum.dm to code/datums/helper_datums - Split mecha_construction.dm into mecha_parts.dm and mecha_construction_paths.dm - Fixed wrong logic for mecha dna-checks. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1402 316c924e-a436-60f5-8080-3fe189b3f50e --- .../helper_datums}/construction_datum.dm | 11 + .../helper_datums}/global_iterator.dm | 11 +- code/game/machinery/constructable_frame.dm | 14 +- code/game/mecha/equipment/mecha_equipment.dm | 1 + code/game/mecha/equipment/tools/tools.dm | 11 +- code/game/mecha/mech_fabricator.dm | 12 +- code/game/mecha/mecha.dm | 15 +- ...ruction.dm => mecha_construction_paths.dm} | 653 +++++++----------- code/game/mecha/mecha_parts.dm | 346 ++++++++++ code/game/research/designs.dm | 14 +- icons/misc/mech_construct.dmi | Bin 29282 -> 29748 bytes tgstation.dme | 8 +- 12 files changed, 654 insertions(+), 442 deletions(-) rename code/{game/mecha => datums/helper_datums}/construction_datum.dm (86%) rename code/{game/mecha => datums/helper_datums}/global_iterator.dm (88%) rename code/game/mecha/{mecha_construction.dm => mecha_construction_paths.dm} (58%) create mode 100644 code/game/mecha/mecha_parts.dm 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 0d496de7d423ec67c6e2777dfe33605f313b06b8..98a6e6b48a540c0ed2705583cd13011849dd4377 100644 GIT binary patch literal 29748 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

lL{C;>AVdSTagTtgrna%~|eN{09J^n_5$ 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 z z&Wi669_s6RT4Pa6Sz$?0lo=b{0v=8WSmzFP=@FCrdr1KO*rom`%t zaeMT(epx&Y+*imE^u^DjrI0IIV{x+(A`M7AbqwJeeWi8o!zjisSL+MEXE8C5jhIA@ zHTiq#*3>lwr%xQYUDPgc&5>1j8c;<&PM)Xw&tQTaL4TDe z%Y8RM@`$U0&7U4B8(RJyrkBiXCX^QOcBB30r1bh>@I$MJHQTWmEY1^!Y=Q-f(Q;}?)EK|>f~0NVc|`Rq$V4vV~+_LIPWF68Z6f}T`b z6g;Ameb0;{C}i{*!&(T@YqwD2JSrEC8QGBjA618$RxsQCDLO=uM53TW;2&M=$r`NR zq144ZCjRhcIRPo6PkE9|PRqjSd8*NZ%M~EgV==P6yxSJ06XQRl!+g4~F5-rkC1H!aNh zn*H~>=V0(fWe&F#xRtJ26>-rG**oUmwzAYgP=hCKs(UKu{$~kqJRzZ&kTLxe`a%M{ QI}-Fs;>*V}F