From 7b3fa9bdb1277ae27da0d6562cad5177c3850b70 Mon Sep 17 00:00:00 2001 From: GLACoding Date: Wed, 27 Sep 2017 10:13:46 +0100 Subject: [PATCH 1/3] Adds installing cells as part of mech construction and fixes some mech construction bugs. --- .../helper_datums/construction_datum.dm | 114 +++ code/game/mecha/combat/combat.dm | 31 + code/game/mecha/mecha.dm | 13 + code/game/mecha/mecha_construction_paths.dm | 797 +++++++++++------- icons/mecha/mech_construction.dmi | Bin 17212 -> 17377 bytes 5 files changed, 647 insertions(+), 308 deletions(-) diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index e4017e9ece..a0885ae373 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD #define FORWARD -1 #define BACKWARD 1 @@ -101,3 +102,116 @@ /datum/construction/reversible/custom_action(index, diff, used_atom, user) return 1 +======= +#define FORWARD -1 +#define BACKWARD 1 + +/datum/construction + var/list/steps + var/atom/holder + var/result + var/list/steps_desc + +/datum/construction/New(atom) + ..() + holder = atom + if(!holder) //don't want this without a holder + qdel(src) + set_desc(steps.len) + return + +/datum/construction/proc/next_step() + steps.len-- + if(!steps.len) + spawn_result() + else + set_desc(steps.len) + return + +/datum/construction/proc/action(atom/used_atom,mob/user) + return + +/datum/construction/proc/check_step(atom/used_atom,mob/user) //check last step only + var/valid_step = is_right_key(used_atom) + if(valid_step) + if(custom_action(valid_step, used_atom, user)) + next_step() + return 1 + return 0 + +/datum/construction/proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. + var/list/L = steps[steps.len] + if(istype(used_atom, L["key"])) + return steps.len + return 0 + +/datum/construction/proc/custom_action(step, used_atom, user) + return 1 + +/datum/construction/proc/check_all_steps(atom/used_atom,mob/user) //check all steps, remove matching one. + for(var/i=1;i<=steps.len;i++) + var/list/L = steps[i]; + if(istype(used_atom, L["key"])) + if(custom_action(i, used_atom, user)) + steps[i]=null;//stupid byond list from list removal... + listclearnulls(steps); + if(!steps.len) + spawn_result() + return 1 + return 0 + + +/datum/construction/proc/spawn_result() + if(result) + new result(get_turf(holder)) + qdel(holder) + return + +/datum/construction/proc/spawn_mecha_result() + if(result) + var/obj/mecha/m = new result(get_turf(holder)) + var/obj/item/oldcell = locate (/obj/item/stock_parts/cell) in m + QDEL_NULL(oldcell) + m.CheckParts(holder.contents) + QDEL_NULL(holder) + +/datum/construction/proc/set_desc(index as num) + var/list/step = steps[index] + holder.desc = step["desc"] + return + +/datum/construction/reversible + var/index + +/datum/construction/reversible/New(atom) + ..() + index = steps.len + return + +/datum/construction/reversible/proc/update_index(diff as num) + index+=diff + if(index==0) + spawn_result() + else + set_desc(index) + return + +/datum/construction/reversible/is_right_key(atom/used_atom) // returns index step + var/list/L = steps[index] + if(istype(used_atom, L["key"])) + return FORWARD //to the first step -> forward + else if(L["backkey"] && istype(used_atom, L["backkey"])) + return BACKWARD //to the last step -> backwards + return 0 + +/datum/construction/reversible/check_step(atom/used_atom,mob/user) + var/diff = is_right_key(used_atom) + if(diff) + if(custom_action(index, diff, used_atom, user)) + update_index(diff) + return 1 + return 0 + +/datum/construction/reversible/custom_action(index, diff, used_atom, user) + return 1 +>>>>>>> e632dee... Adds installing cells as part of mech construction and fixes some mech construction bugs. (#30942) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 4e8e42e10f..a8977dd7c1 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD /obj/mecha/combat force = 30 internal_damage_threshold = 50 @@ -35,3 +36,33 @@ ..() +======= +/obj/mecha/combat + force = 30 + internal_damage_threshold = 50 + armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) + +/obj/mecha/combat/moved_inside(mob/living/carbon/human/H) + if(..()) + if(H.client && H.client.mouse_pointer_icon == initial(H.client.mouse_pointer_icon)) + H.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' + return 1 + else + return 0 + +/obj/mecha/combat/mmi_moved_inside(obj/item/device/mmi/mmi_as_oc,mob/user) + if(..()) + if(occupant.client && occupant.client.mouse_pointer_icon == initial(occupant.client.mouse_pointer_icon)) + occupant.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' + return 1 + else + return 0 + + +/obj/mecha/combat/go_out() + if(occupant && occupant.client && occupant.client.mouse_pointer_icon == 'icons/mecha/mecha_mouse.dmi') + occupant.client.mouse_pointer_icon = initial(occupant.client.mouse_pointer_icon) + ..() + + +>>>>>>> e632dee... Adds installing cells as part of mech construction and fixes some mech construction bugs. (#30942) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ed2a1ff82a..9b27e1e7c6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -202,6 +202,19 @@ GLOB.mechas_list -= src //global mech list return ..() +/obj/mecha/CheckParts(list/parts_list) + ..() + var/obj/item/C = locate(/obj/item/stock_parts/cell) in contents + cell = C + var/obj/item/stock_parts/scanning_module/SM = locate() in contents + var/obj/item/stock_parts/capacitor/CP = locate() in contents + if(SM) + step_energy_drain = 20 - (5 * SM.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best + qdel(SM) + if(CP) + armor["energy"] += (CP.rating * 10) //Each level of capacitor protects the mech against emp by 10% + qdel(CP) + //////////////////////// ////// Helpers ///////// //////////////////////// diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 24c1c513c3..27aeea4c09 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -102,8 +102,11 @@ /datum/construction/reversible/mecha/ripley - result = "/obj/mecha/working/ripley" + result = /obj/mecha/working/ripley steps = list( + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + //1 list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, @@ -127,38 +130,47 @@ //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="The power cell is secured."), //7 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), + "desc"="The power cell is installed."), //8 - list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, + list("key"=/obj/item/stock_parts/cell, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //9 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed."), //10 + list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //11 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //12 list("key"=/obj/item/circuitboard/mecha/ripley/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //11 + //13 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //12 + //14 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //13 + //15 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //14 + //16 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") + ) /datum/construction/reversible/mecha/ripley/action(atom/used_atom,mob/user) @@ -170,24 +182,24 @@ //TODO: better messages. switch(index) - if(14) + if(17) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "ripley1" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "ripley2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "ripley0" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "ripley3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "ripley1" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "ripley4" @@ -196,7 +208,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "ripley2" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -204,7 +216,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "ripley3" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "ripley6" @@ -212,7 +224,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/ripley/main(get_turf(holder)) holder.icon_state = "ripley4" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -220,7 +232,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "ripley5" - if(7) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "ripley8" @@ -228,54 +240,73 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/ripley/peripherals(get_turf(holder)) holder.icon_state = "ripley6" - if(6) + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "ripley9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "ripley7" - if(5) + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "ripley10" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "ripley8" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + holder.icon_state = "ripley11" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "ripley9" + if(6) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "ripley10" + holder.icon_state = "ripley12" else user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 - holder.icon_state = "ripley8" - if(4) + holder.icon_state = "ripley10" + if(5) if(diff==FORWARD) user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "ripley11" + holder.icon_state = "ripley13" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "ripley9" - if(3) + holder.icon_state = "ripley11" + if(4) if(diff==FORWARD) user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - holder.icon_state = "ripley12" + holder.icon_state = "ripley14" else user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "ripley10" - if(2) + holder.icon_state = "ripley12" + if(3) if(diff==FORWARD) user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "ripley13" + holder.icon_state = "ripley15" else user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - holder.icon_state = "ripley11" - if(1) + holder.icon_state = "ripley13" + if(2) if(diff==FORWARD) user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") + spawn_mecha_result() else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "ripley12" + holder.icon_state = "ripley14" return 1 -/datum/construction/reversible/mecha/ripley/spawn_result() +/datum/construction/reversible/mecha/ripley/spawn_mecha_result() ..() SSblackbox.inc("mecha_ripley_created",1) return @@ -311,8 +342,11 @@ /datum/construction/reversible/mecha/gygax - result = "/obj/mecha/combat/gygax" + result = /obj/mecha/combat/gygax steps = list( + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + //1 list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, @@ -336,60 +370,68 @@ //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/screwdriver, - "desc"="Advanced capacitor is secured."), + "desc"="The power cell is secured."), //7 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Advanced capacitor is installed."), + "desc"="The power cell is installed."), //8 - list("key"=/obj/item/stock_parts/capacitor, + list("key"=/obj/item/stock_parts/cell, "backkey"=/obj/item/screwdriver, - "desc"="Advanced scanner module is secured."), + "desc"="Advanced capacitor is secured."), //9 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Advanced scanner module is installed."), + "desc"="Advanced capacitor is installed."), //10 - list("key"=/obj/item/stock_parts/scanning_module, + list("key"=/obj/item/stock_parts/capacitor, "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), + "desc"="Advanced scanner module is secured."), //11 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Weapon control module is installed."), + "desc"="Advanced scanner module is installed."), //12 - list("key"=/obj/item/circuitboard/mecha/gygax/targeting, + list("key"=/obj/item/stock_parts/scanning_module, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="Weapon control module is secured."), //13 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), + "desc"="Weapon control module is installed."), //14 - list("key"=/obj/item/circuitboard/mecha/gygax/peripherals, + list("key"=/obj/item/circuitboard/mecha/gygax/targeting, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //15 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed."), //16 + list("key"=/obj/item/circuitboard/mecha/gygax/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //17 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //18 list("key"=/obj/item/circuitboard/mecha/gygax/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //17 + //19 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //18 + //20 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //19 + //21 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //20 + //22 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") ) @@ -403,24 +445,24 @@ //TODO: better messages. switch(index) - if(20) + if(23) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "gygax1" - if(19) + if(22) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "gygax2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "gygax0" - if(18) + if(21) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "gygax3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "gygax1" - if(17) + if(20) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "gygax4" @@ -429,7 +471,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "gygax2" - if(16) + if(19) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -437,7 +479,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "gygax3" - if(15) + if(18) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "gygax6" @@ -445,7 +487,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/gygax/main(get_turf(holder)) holder.icon_state = "gygax4" - if(14) + if(17) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -453,7 +495,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "gygax5" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "gygax8" @@ -461,7 +503,7 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/gygax/peripherals(get_turf(holder)) holder.icon_state = "gygax6" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) @@ -469,7 +511,7 @@ else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "gygax7" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") holder.icon_state = "gygax10" @@ -477,7 +519,7 @@ user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") new /obj/item/circuitboard/mecha/gygax/targeting(get_turf(holder)) holder.icon_state = "gygax8" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] installs scanner module to the [holder].", "You install scanner module to the [holder].") var/obj/item/I = used_atom @@ -486,7 +528,7 @@ else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") holder.icon_state = "gygax9" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] secures the advanced scanner module.", "You secure the scanner module.") holder.icon_state = "gygax12" @@ -495,7 +537,7 @@ var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder I.loc = get_turf(holder) holder.icon_state = "gygax10" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] installs capacitor to the [holder].", "You install capacitor to the [holder].") var/obj/item/I = used_atom @@ -504,7 +546,7 @@ else user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.") holder.icon_state = "gygax11" - if(7) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") holder.icon_state = "gygax14" @@ -513,57 +555,74 @@ var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder I.loc = get_turf(holder) holder.icon_state = "gygax12" - if(6) + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "gygax15" else user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.") holder.icon_state = "gygax13" - if(5) + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "gygax16" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "gygax14" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + holder.icon_state = "gygax17" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "gygax15" + if(6) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "gygax16" + holder.icon_state = "gygax18" else user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 - holder.icon_state = "gygax14" - if(4) + holder.icon_state = "gygax16" + if(5) if(diff==FORWARD) user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "gygax17" + holder.icon_state = "gygax19" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "gygax15" - if(3) + holder.icon_state = "gygax17" + if(4) if(diff==FORWARD) user.visible_message("[user] installs Gygax Armor Plates to the [holder].", "You install Gygax Armor Plates to the [holder].") qdel(used_atom) - holder.icon_state = "gygax18" + holder.icon_state = "gygax20" else user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "gygax16" - if(2) + holder.icon_state = "gygax18" + if(3) if(diff==FORWARD) user.visible_message("[user] secures Gygax Armor Plates.", "You secure Gygax Armor Plates.") - holder.icon_state = "gygax19" + holder.icon_state = "gygax21" else user.visible_message("[user] pries Gygax Armor Plates from the [holder].", "You pry Gygax Armor Plates from the [holder].") new /obj/item/mecha_parts/part/gygax_armor(get_turf(holder)) - holder.icon_state = "gygax17" - if(1) + holder.icon_state = "gygax19" + if(2) if(diff==FORWARD) user.visible_message("[user] welds Gygax Armor Plates to the [holder].", "You weld Gygax Armor Plates to the [holder].") + spawn_mecha_result() else user.visible_message("[user] unfastens Gygax Armor Plates.", "You unfasten Gygax Armor Plates.") - holder.icon_state = "gygax18" + holder.icon_state = "gygax20" return 1 -/datum/construction/reversible/mecha/gygax/spawn_result() - var/obj/mecha/combat/gygax/M = new result(get_turf(holder)) - M.CheckParts(holder.contents) - qdel(holder) +/datum/construction/reversible/mecha/gygax/spawn_mecha_result() + ..() SSblackbox.inc("mecha_gygax_created",1) return @@ -596,13 +655,16 @@ /datum/construction/reversible/mecha/firefighter - result = "/obj/mecha/working/ripley/firefighter" + result = /obj/mecha/working/ripley/firefighter steps = list( - //1 - list("key"=/obj/item/weldingtool, + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + + //1 + list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, "desc"="External armor is wrenched."), - //2 + //2 list("key"=/obj/item/wrench, "backkey"=/obj/item/crowbar, "desc"="External armor is installed."), @@ -622,40 +684,47 @@ list("key"=/obj/item/wrench, "backkey"=/obj/item/crowbar, "desc"="Internal armor is installed."), - //7 list("key"=/obj/item/stack/sheet/plasteel, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="The power cell is secured."), //8 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), + "desc"="The power cell is installed."), //9 - list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, + list("key"=/obj/item/stock_parts/cell, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //10 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed."), //11 + list("key"=/obj/item/circuitboard/mecha/ripley/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //12 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //13 list("key"=/obj/item/circuitboard/mecha/ripley/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //12 + //14 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //13 + //15 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //14 + //16 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //15 + //17 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") ) @@ -669,24 +738,24 @@ //TODO: better messages. switch(index) - if(15) + if(18) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "fireripley1" - if(14) + if(17) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "fireripley2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "fireripley0" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "fireripley3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "fireripley1" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "fireripley4" @@ -695,7 +764,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "fireripley2" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -703,7 +772,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "fireripley3" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "fireripley6" @@ -711,7 +780,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/ripley/main(get_turf(holder)) holder.icon_state = "fireripley4" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -719,7 +788,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "fireripley5" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "fireripley8" @@ -727,64 +796,82 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/ripley/peripherals(get_turf(holder)) holder.icon_state = "fireripley6" - if(7) + if(10) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "fireripley9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "fireripley7" - - if(6) + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "fireripley10" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "fireripley8" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + holder.icon_state = "fireripley11" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "fireripley9" + if(7) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "fireripley10" + holder.icon_state = "fireripley12" else user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - holder.icon_state = "fireripley8" - if(5) + holder.icon_state = "fireripley10" + if(6) if(diff==FORWARD) user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "fireripley11" + holder.icon_state = "fireripley13" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "fireripley9" - if(4) + holder.icon_state = "fireripley11" + if(5) if(diff==FORWARD) user.visible_message("[user] starts to install the external armor layer to the [holder].", "You install the external armor layer to the [holder].") - holder.icon_state = "fireripley12" + holder.icon_state = "fireripley14" else user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "fireripley10" - if(3) + holder.icon_state = "fireripley12" + if(4) if(diff==FORWARD) user.visible_message("[user] installs the external reinforced armor layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - holder.icon_state = "fireripley13" + holder.icon_state = "fireripley15" else user.visible_message("[user] removes the external armor from the [holder].", "You remove the external armor from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - holder.icon_state = "fireripley11" - if(2) + holder.icon_state = "fireripley13" + if(3) if(diff==FORWARD) user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "fireripley14" + holder.icon_state = "fireripley16" else user.visible_message("[user] pries external armor layer from the [holder].", "You pry external armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - holder.icon_state = "fireripley12" - if(1) + holder.icon_state = "fireripley14" + if(2) if(diff==FORWARD) user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") + spawn_mecha_result() else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "fireripley13" + holder.icon_state = "fireripley15" return 1 -/datum/construction/reversible/mecha/firefighter/spawn_result() +/datum/construction/reversible/mecha/firefighter/spawn_mecha_result() ..() SSblackbox.inc("mecha_firefighter_created",1) return @@ -818,19 +905,23 @@ /datum/construction/mecha/honker - result = "/obj/mecha/combat/honker" - steps = list(list("key"=/obj/item/bikehorn), //1 + result = /obj/mecha/combat/honker + steps = list( + list("desc"="You shouldn't be able to see this."), //0, note steps in the construction path are +1 to the ones here + list("key"=/obj/item/bikehorn), //1 list("key"=/obj/item/clothing/shoes/clown_shoes), //2 list("key"=/obj/item/bikehorn), //3 list("key"=/obj/item/clothing/mask/gas/clown_hat), //4 list("key"=/obj/item/bikehorn), //5 - list("key"=/obj/item/circuitboard/mecha/honker/targeting), //6 + list("key"=/obj/item/stock_parts/cell), //6 list("key"=/obj/item/bikehorn), //7 - list("key"=/obj/item/circuitboard/mecha/honker/peripherals), //8 + list("key"=/obj/item/circuitboard/mecha/honker/targeting), //8 list("key"=/obj/item/bikehorn), //9 - list("key"=/obj/item/circuitboard/mecha/honker/main), //10 + list("key"=/obj/item/circuitboard/mecha/honker/peripherals), //10 list("key"=/obj/item/bikehorn), //11 - ) + list("key"=/obj/item/circuitboard/mecha/honker/main), //12 + list("key"=/obj/item/bikehorn), //13 + ) /datum/construction/mecha/honker/action(atom/used_atom,mob/user) return check_step(used_atom,user) @@ -842,27 +933,34 @@ if(istype(used_atom, /obj/item/bikehorn)) playsound(holder, 'sound/items/bikehorn.ogg', 50, 1) user.visible_message("HONK!") + if(step==2) + spawn_mecha_result() + //TODO: better messages. switch(step) - if(10) + if(13) user.visible_message("[user] installs the central control module into the [holder].", "You install the central control module into the [holder].") qdel(used_atom) - if(8) + if(11) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) - if(6) + if(9) user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) - if(4) + if(7) + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) + if(5) user.visible_message("[user] puts clown wig and mask on the [holder].", "You put clown wig and mask on the [holder].") qdel(used_atom) - if(2) + if(3) user.visible_message("[user] puts clown boots on the [holder].", "You put clown boots on the [holder].") qdel(used_atom) return 1 -/datum/construction/mecha/honker/spawn_result() +/datum/construction/mecha/honker/spawn_mecha_result() ..() SSblackbox.inc("mecha_honker_created",1) return @@ -895,10 +993,13 @@ return /datum/construction/reversible/mecha/durand - result = "/obj/mecha/combat/durand" + result = /obj/mecha/combat/durand steps = list( - //1 - list("key"=/obj/item/weldingtool, + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + + //1 + list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, "desc"="External armor is wrenched."), //2 @@ -920,60 +1021,68 @@ //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/screwdriver, - "desc"="Super capacitor is secured."), + "desc"="The power cell is secured."), //7 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Super capacitor is installed."), + "desc"="The power cell is installed."), //8 - list("key"=/obj/item/stock_parts/capacitor, + list("key"=/obj/item/stock_parts/cell, "backkey"=/obj/item/screwdriver, - "desc"="Phasic scanner module is secured."), + "desc"="Super capacitor is secured."), //9 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Phasic scanner module is installed."), + "desc"="Super capacitor is installed."), //10 - list("key"=/obj/item/stock_parts/scanning_module, + list("key"=/obj/item/stock_parts/capacitor, "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), + "desc"="Phasic scanner module is secured."), //11 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Weapon control module is installed."), + "desc"="Phasic scanner module is installed."), //12 - list("key"=/obj/item/circuitboard/mecha/durand/targeting, + list("key"=/obj/item/stock_parts/scanning_module, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="Weapon control module is secured."), //13 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), + "desc"="Weapon control module is installed."), //14 - list("key"=/obj/item/circuitboard/mecha/durand/peripherals, + list("key"=/obj/item/circuitboard/mecha/durand/targeting, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //15 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed."), //16 + list("key"=/obj/item/circuitboard/mecha/durand/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //17 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //18 list("key"=/obj/item/circuitboard/mecha/durand/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //17 + //19 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //18 + //20 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //19 + //21 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //20 + //22 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") ) @@ -988,24 +1097,24 @@ //TODO: better messages. switch(index) - if(20) + if(23) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "durand1" - if(19) + if(22) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "durand2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "durand0" - if(18) + if(21) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "durand3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "durand1" - if(17) + if(20) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "durand4" @@ -1014,7 +1123,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "durand2" - if(16) + if(19) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -1022,7 +1131,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "durand3" - if(15) + if(18) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "durand6" @@ -1030,7 +1139,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/durand/main(get_turf(holder)) holder.icon_state = "durand4" - if(14) + if(17) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -1038,7 +1147,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "durand5" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "durand8" @@ -1046,7 +1155,7 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/durand/peripherals(get_turf(holder)) holder.icon_state = "durand6" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) @@ -1054,7 +1163,7 @@ else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "durand7" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") holder.icon_state = "durand10" @@ -1062,7 +1171,7 @@ user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") new /obj/item/circuitboard/mecha/durand/targeting(get_turf(holder)) holder.icon_state = "durand8" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] installs scanner module to the [holder].", "You install phasic scanner module to the [holder].") var/obj/item/I = used_atom @@ -1071,7 +1180,7 @@ else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") holder.icon_state = "durand9" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] secures the scanner module.", "You secure the scanner module.") holder.icon_state = "durand12" @@ -1080,7 +1189,7 @@ var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder I.loc = get_turf(holder) holder.icon_state = "durand10" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] installs capacitor to the [holder].", "You install capacitor to the [holder].") var/obj/item/I = used_atom @@ -1089,7 +1198,7 @@ else user.visible_message("[user] unfastens the scanner module.", "You unfasten the scanner module.") holder.icon_state = "durand11" - if(7) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the capacitor.", "You secure the capacitor.") holder.icon_state = "durand14" @@ -1098,64 +1207,80 @@ var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder I.loc = get_turf(holder) holder.icon_state = "durand12" - if(6) + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "durand15" else - user.visible_message("[user] unfastens the super capacitor.", "You unfasten the capacitor.") + user.visible_message("[user] unfastens the capacitor.", "You unfasten the capacitor.") holder.icon_state = "durand13" - if(5) + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "durand16" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "durand14" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + holder.icon_state = "durand17" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "durand15" + if(6) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "durand16" + holder.icon_state = "durand18" else user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 - holder.icon_state = "durand14" - if(4) + holder.icon_state = "durand16" + if(5) if(diff==FORWARD) user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "durand17" + holder.icon_state = "durand19" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "durand15" - if(3) + holder.icon_state = "durand17" + if(4) if(diff==FORWARD) user.visible_message("[user] installs Durand Armor Plates to the [holder].", "You install Durand Armor Plates to the [holder].") qdel(used_atom) - holder.icon_state = "durand18" + holder.icon_state = "durand20" else user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "durand16" - if(2) + holder.icon_state = "durand18" + if(3) if(diff==FORWARD) user.visible_message("[user] secures Durand Armor Plates.", "You secure Durand Armor Plates.") - holder.icon_state = "durand19" + holder.icon_state = "durand21" else user.visible_message("[user] pries Durand Armor Plates from the [holder].", "You pry Durand Armor Plates from the [holder].") new /obj/item/mecha_parts/part/durand_armor(get_turf(holder)) - holder.icon_state = "durand17" - if(1) + holder.icon_state = "durand19" + if(2) if(diff==FORWARD) user.visible_message("[user] welds Durand Armor Plates to the [holder].", "You weld Durand Armor Plates to the [holder].") + spawn_mecha_result() else user.visible_message("[user] unfastens Durand Armor Plates.", "You unfasten Durand Armor Plates.") - holder.icon_state = "durand18" + holder.icon_state = "durand20" return 1 -/datum/construction/reversible/mecha/durand/spawn_result() - var/obj/mecha/combat/gygax/M = new result(get_turf(holder)) - M.CheckParts(holder.contents) - qdel(holder) +/datum/construction/reversible/mecha/durand/spawn_mecha_result() + ..() SSblackbox.inc("mecha_durand_created",1) return //PHAZON /datum/construction/mecha/phazon_chassis - result = "/obj/mecha/combat/phazon" steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso), //1 list("key"=/obj/item/mecha_parts/part/phazon_left_arm), //2 list("key"=/obj/item/mecha_parts/part/phazon_right_arm), //3 @@ -1183,15 +1308,17 @@ return /datum/construction/reversible/mecha/phazon - result = "/obj/mecha/combat/phazon" + result = /obj/mecha/combat/phazon steps = list( - //1 - list("key"=/obj/item/device/assembly/signaler/anomaly, + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + + //1 + list("key"=/obj/item/device/assembly/signaler/anomaly, "backkey"=null, //Cannot remove the anomaly core once it's in "desc"="Anomaly core socket is open and awaiting connection."), - - //2 - list("key"=/obj/item/weldingtool, + //2 + list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, "desc"="External armor is wrenched."), //3 @@ -1213,72 +1340,80 @@ //7 list("key"=/obj/item/stack/sheet/plasteel, "backkey"=/obj/item/screwdriver, - "desc"="The bluespace crystal is engaged."), + "desc"="The power cell is secured."), //8 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="The power cell is installed."), + //9 + list("key"=/obj/item/stock_parts/cell, + "backkey"=/obj/item/screwdriver, + "desc"="The bluespace crystal is engaged."), + //10 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wirecutters, "desc"="The bluespace crystal is connected."), - //9 + //11 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/crowbar, "desc"="The bluespace crystal is installed."), - //10 + //12 list("key"=/obj/item/ore/bluespace_crystal, "backkey"=/obj/item/screwdriver, "desc"="Super capacitor is secured."), - //12 - list("key"=/obj/item/screwdriver, - "backkey"=/obj/item/crowbar, - "desc"="Super capacitor is installed."), - //12 - list("key"=/obj/item/stock_parts/capacitor, - "backkey"=/obj/item/screwdriver, - "desc"="Phasic scanner module is secured."), //13 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Phasic scanner module is installed."), + "desc"="Super capacitor is installed."), //14 - list("key"=/obj/item/stock_parts/scanning_module, + list("key"=/obj/item/stock_parts/capacitor, "backkey"=/obj/item/screwdriver, - "desc"="Weapon control module is secured."), + "desc"="Phasic scanner module is secured."), //15 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Weapon control is installed."), + "desc"="Phasic scanner module is installed."), //16 - list("key"=/obj/item/circuitboard/mecha/phazon/targeting, + list("key"=/obj/item/stock_parts/scanning_module, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="Weapon control module is secured."), //17 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed"), + "desc"="Weapon control is installed."), //18 - list("key"=/obj/item/circuitboard/mecha/phazon/peripherals, + list("key"=/obj/item/circuitboard/mecha/phazon/targeting, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //19 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed"), //20 + list("key"=/obj/item/circuitboard/mecha/phazon/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //21 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //22 list("key"=/obj/item/circuitboard/mecha/phazon/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //21 + //23 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //22 + //24 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //23 + //25 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //24 + //26 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") ) @@ -1293,24 +1428,24 @@ //TODO: better messages. switch(index) - if(24) + if(27) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "phazon1" - if(23) + if(26) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "phazon2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "phazon0" - if(22) + if(25) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "phazon3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "phazon1" - if(21) + if(24) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "phazon4" @@ -1319,7 +1454,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "phazon2" - if(20) + if(23) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -1327,7 +1462,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "phazon3" - if(19) + if(22) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "phazon6" @@ -1335,7 +1470,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/phazon/main(get_turf(holder)) holder.icon_state = "phazon4" - if(18) + if(21) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -1343,7 +1478,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "phazon5" - if(17) + if(20) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "phazon8" @@ -1351,7 +1486,7 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/phazon/peripherals(get_turf(holder)) holder.icon_state = "phazon6" - if(16) + if(19) if(diff==FORWARD) user.visible_message("[user] installs the weapon control module into the [holder].", "You install the weapon control module into the [holder].") qdel(used_atom) @@ -1359,7 +1494,7 @@ else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "phazon7" - if(15) + if(18) if(diff==FORWARD) user.visible_message("[user] secures the weapon control module.", "You secure the weapon control module.") holder.icon_state = "phazon10" @@ -1367,7 +1502,7 @@ user.visible_message("[user] removes the weapon control module from the [holder].", "You remove the weapon control module from the [holder].") new /obj/item/circuitboard/mecha/phazon/targeting(get_turf(holder)) holder.icon_state = "phazon8" - if(14) + if(17) if(diff==FORWARD) user.visible_message("[user] installs phasic scanner module to the [holder].", "You install scanner module to the [holder].") var/obj/item/I = used_atom @@ -1376,7 +1511,7 @@ else user.visible_message("[user] unfastens the weapon control module.", "You unfasten the weapon control module.") holder.icon_state = "phazon9" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] secures the phasic scanner module.", "You secure the scanner module.") holder.icon_state = "phazon12" @@ -1385,7 +1520,7 @@ var/obj/item/I = locate(/obj/item/stock_parts/scanning_module) in holder I.loc = get_turf(holder) holder.icon_state = "phazon10" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] installs super capacitor to the [holder].", "You install capacitor to the [holder].") var/obj/item/I = used_atom @@ -1394,7 +1529,7 @@ else user.visible_message("[user] unfastens the phasic scanner module.", "You unfasten the scanner module.") holder.icon_state = "phazon11" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] secures the super capacitor.", "You secure the capacitor.") holder.icon_state = "phazon14" @@ -1403,7 +1538,7 @@ var/obj/item/I = locate(/obj/item/stock_parts/capacitor) in holder I.loc = get_turf(holder) holder.icon_state = "phazon12" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] installs the bluespace crystal.", "You install the bluespace crystal.") qdel(used_atom) @@ -1411,7 +1546,7 @@ else user.visible_message("[user] unsecures the super capacitor from the [holder].", "You unsecure the capacitor from the [holder].") holder.icon_state = "phazon13" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] connects the bluespace crystal.", "You connect the bluespace crystal.") holder.icon_state = "phazon16" @@ -1419,68 +1554,85 @@ user.visible_message("[user] removes the bluespace crystal from the [holder].", "You remove the bluespace crystal from the [holder].") new /obj/item/ore/bluespace_crystal(get_turf(holder)) holder.icon_state = "phazon14" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] engages the bluespace crystal.", "You engage the bluespace crystal.") holder.icon_state = "phazon17" else user.visible_message("[user] disconnects the bluespace crystal from the [holder].", "You disconnect the bluespace crystal from the [holder].") holder.icon_state = "phazon15" - if(7) + if(10) if(diff==FORWARD) - user.visible_message("[user] installs the phase armor layer to the [holder].", "You install the phase armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "phazon18" else user.visible_message("[user] disengages the bluespace crystal.", "You disengage the bluespace crystal.") holder.icon_state = "phazon16" - if(6) + if(9) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "phazon19" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "phazon17" + if(8) + if(diff==FORWARD) + user.visible_message("[user] installs the phase armor layer to the [holder].", "You install the phase armor layer to the [holder].") + holder.icon_state = "phazon20" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "durand18" + if(7) if(diff==FORWARD) user.visible_message("[user] secures the phase armor layer.", "You secure the phase armor layer.") - holder.icon_state = "phazon19" + holder.icon_state = "phazon21" else user.visible_message("[user] pries the phase armor layer from the [holder].", "You pry the phase armor layer from the [holder].") var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 - holder.icon_state = "phazon17" - if(5) + holder.icon_state = "phazon19" + if(6) if(diff==FORWARD) user.visible_message("[user] welds the phase armor layer to the [holder].", "You weld the phase armor layer to the [holder].") - holder.icon_state = "phazon20" + holder.icon_state = "phazon22" else user.visible_message("[user] unfastens the phase armor layer.", "You unfasten the phase armor layer.") - holder.icon_state = "phazon18" - if(4) + holder.icon_state = "phazon20" + if(5) if(diff==FORWARD) user.visible_message("[user] installs Phazon Armor Plates to the [holder].", "You install Phazon Armor Plates to the [holder].") qdel(used_atom) - holder.icon_state = "phazon21" + holder.icon_state = "phazon23" else user.visible_message("[user] cuts phase armor layer from the [holder].", "You cut the phase armor layer from the [holder].") - holder.icon_state = "phazon19" - if(3) + holder.icon_state = "phazon21" + if(4) if(diff==FORWARD) user.visible_message("[user] secures Phazon Armor Plates.", "You secure Phazon Armor Plates.") - holder.icon_state = "phazon22" + holder.icon_state = "phazon24" else user.visible_message("[user] pries Phazon Armor Plates from the [holder].", "You pry Phazon Armor Plates from the [holder].") new /obj/item/mecha_parts/part/phazon_armor(get_turf(holder)) - holder.icon_state = "phazon20" - if(2) + holder.icon_state = "phazon22" + if(3) if(diff==FORWARD) user.visible_message("[user] welds Phazon Armor Plates to the [holder].", "You weld Phazon Armor Plates to the [holder].") else user.visible_message("[user] unfastens Phazon Armor Plates.", "You unfasten Phazon Armor Plates.") - holder.icon_state = "phazon21" - if(1) + holder.icon_state = "phazon23" + if(2) if(diff==FORWARD) user.visible_message("[user] carefully inserts the anomaly core into \the [holder] and secures it.", "You slowly place the anomaly core into its socket and close its chamber.") qdel(used_atom) + spawn_mecha_result() return 1 -/datum/construction/reversible/mecha/phazon/spawn_result() - var/obj/mecha/combat/gygax/M = new result(get_turf(holder)) - M.CheckParts(holder.contents) - qdel(holder) +/datum/construction/reversible/mecha/phazon/spawn_mecha_result() + ..() SSblackbox.inc("mecha_phazon_created",1) return @@ -1515,13 +1667,16 @@ /datum/construction/reversible/mecha/odysseus - result = "/obj/mecha/medical/odysseus" + result = /obj/mecha/medical/odysseus steps = list( - //1 - list("key"=/obj/item/weldingtool, + //0, dummy step used to stop the steps from finishing and spawn_result() being called automatically. + list("desc"="You shouldn't be able to see this."), + + //1 + list("key"=/obj/item/weldingtool, "backkey"=/obj/item/wrench, "desc"="External armor is wrenched."), - //2 + //2 list("key"=/obj/item/wrench, "backkey"=/obj/item/crowbar, "desc"="External armor is installed."), @@ -1540,36 +1695,44 @@ //6 list("key"=/obj/item/stack/sheet/metal, "backkey"=/obj/item/screwdriver, - "desc"="Peripherals control module is secured."), + "desc"="The power cell is secured."), //7 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Peripherals control module is installed."), + "desc"="The power cell is installed."), //8 - list("key"=/obj/item/circuitboard/mecha/odysseus/peripherals, + list("key"=/obj/item/stock_parts/cell, "backkey"=/obj/item/screwdriver, - "desc"="Central control module is secured."), + "desc"="Peripherals control module is secured."), //9 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/crowbar, - "desc"="Central control module is installed."), + "desc"="Peripherals control module is installed."), //10 + list("key"=/obj/item/circuitboard/mecha/odysseus/peripherals, + "backkey"=/obj/item/screwdriver, + "desc"="Central control module is secured."), + //11 + list("key"=/obj/item/screwdriver, + "backkey"=/obj/item/crowbar, + "desc"="Central control module is installed."), + //12 list("key"=/obj/item/circuitboard/mecha/odysseus/main, "backkey"=/obj/item/screwdriver, "desc"="The wiring is adjusted."), - //11 + //13 list("key"=/obj/item/wirecutters, "backkey"=/obj/item/screwdriver, "desc"="The wiring is added."), - //12 + //14 list("key"=/obj/item/stack/cable_coil, "backkey"=/obj/item/screwdriver, "desc"="The hydraulic systems are active."), - //13 + //15 list("key"=/obj/item/screwdriver, "backkey"=/obj/item/wrench, "desc"="The hydraulic systems are connected."), - //14 + //16 list("key"=/obj/item/wrench, "desc"="The hydraulic systems are disconnected.") ) @@ -1583,24 +1746,24 @@ //TODO: better messages. switch(index) - if(14) + if(17) user.visible_message("[user] connects the [holder] hydraulic systems", "You connect the [holder] hydraulic systems.") holder.icon_state = "odysseus1" - if(13) + if(16) if(diff==FORWARD) user.visible_message("[user] activates the [holder] hydraulic systems.", "You activate the [holder] hydraulic systems.") holder.icon_state = "odysseus2" else user.visible_message("[user] disconnects the [holder] hydraulic systems", "You disconnect the [holder] hydraulic systems.") holder.icon_state = "odysseus0" - if(12) + if(15) if(diff==FORWARD) user.visible_message("[user] adds the wiring to the [holder].", "You add the wiring to the [holder].") holder.icon_state = "odysseus3" else user.visible_message("[user] deactivates the [holder] hydraulic systems.", "You deactivate the [holder] hydraulic systems.") holder.icon_state = "odysseus1" - if(11) + if(14) if(diff==FORWARD) user.visible_message("[user] adjusts the wiring of the [holder].", "You adjust the wiring of the [holder].") holder.icon_state = "odysseus4" @@ -1609,7 +1772,7 @@ var/obj/item/stack/cable_coil/coil = new /obj/item/stack/cable_coil(get_turf(holder)) coil.amount = 4 holder.icon_state = "odysseus2" - if(10) + if(13) if(diff==FORWARD) user.visible_message("[user] installs the central control module into the [holder].", "You install the central computer mainboard into the [holder].") qdel(used_atom) @@ -1617,7 +1780,7 @@ else user.visible_message("[user] disconnects the wiring of the [holder].", "You disconnect the wiring of the [holder].") holder.icon_state = "odysseus3" - if(9) + if(12) if(diff==FORWARD) user.visible_message("[user] secures the mainboard.", "You secure the mainboard.") holder.icon_state = "odysseus6" @@ -1625,7 +1788,7 @@ user.visible_message("[user] removes the central control module from the [holder].", "You remove the central computer mainboard from the [holder].") new /obj/item/circuitboard/mecha/odysseus/main(get_turf(holder)) holder.icon_state = "odysseus4" - if(8) + if(11) if(diff==FORWARD) user.visible_message("[user] installs the peripherals control module into the [holder].", "You install the peripherals control module into the [holder].") qdel(used_atom) @@ -1633,7 +1796,7 @@ else user.visible_message("[user] unfastens the mainboard.", "You unfasten the mainboard.") holder.icon_state = "odysseus5" - if(7) + if(10) if(diff==FORWARD) user.visible_message("[user] secures the peripherals control module.", "You secure the peripherals control module.") holder.icon_state = "odysseus8" @@ -1641,56 +1804,74 @@ user.visible_message("[user] removes the peripherals control module from the [holder].", "You remove the peripherals control module from the [holder].") new /obj/item/circuitboard/mecha/odysseus/peripherals(get_turf(holder)) holder.icon_state = "odysseus6" - if(6) + if(9) if(diff==FORWARD) - user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + user.visible_message("[user] installs the power cell into the [holder].", "You install the power cell into the [holder].") + var/obj/item/I = used_atom + user.transferItemToLoc(I, holder, TRUE) holder.icon_state = "odysseus9" else user.visible_message("[user] unfastens the peripherals control module.", "You unfasten the peripherals control module.") holder.icon_state = "odysseus7" - if(5) + if(8) + if(diff==FORWARD) + user.visible_message("[user] secures the power cell.", "You secure the power cell.") + holder.icon_state = "odysseus10" + else + user.visible_message("[user] prys the power cell from [holder].", "You pry the power cell from [holder].") + var/obj/item/I = locate(/obj/item/stock_parts/cell) in holder + I.forceMove(holder.drop_location()) + holder.icon_state = "odysseus8" + if(7) + if(diff==FORWARD) + user.visible_message("[user] installs the internal armor layer to the [holder].", "You install the internal armor layer to the [holder].") + holder.icon_state = "odysseus11" + else + user.visible_message("[user] unfastens the power cell.", "You unfasten the power cell.") + holder.icon_state = "odysseus9" + if(6) if(diff==FORWARD) user.visible_message("[user] secures the internal armor layer.", "You secure the internal armor layer.") - holder.icon_state = "odysseus10" + holder.icon_state = "odysseus12" else user.visible_message("[user] pries internal armor layer from the [holder].", "You pry internal armor layer from the [holder].") var/obj/item/stack/sheet/metal/MS = new /obj/item/stack/sheet/metal(get_turf(holder)) MS.amount = 5 - holder.icon_state = "odysseus8" - if(4) + holder.icon_state = "odysseus10" + if(5) if(diff==FORWARD) user.visible_message("[user] welds the internal armor layer to the [holder].", "You weld the internal armor layer to the [holder].") - holder.icon_state = "odysseus11" + holder.icon_state = "odysseus13" else user.visible_message("[user] unfastens the internal armor layer.", "You unfasten the internal armor layer.") - holder.icon_state = "odysseus9" - if(3) + holder.icon_state = "odysseus11" + if(4) if(diff==FORWARD) user.visible_message("[user] installs [used_atom] layer to the [holder].", "You install the external reinforced armor layer to the [holder].") - holder.icon_state = "odysseus12" + holder.icon_state = "odysseus14" else user.visible_message("[user] cuts the internal armor layer from the [holder].", "You cut the internal armor layer from the [holder].") - holder.icon_state = "odysseus10" - if(2) + holder.icon_state = "odysseus12" + if(3) if(diff==FORWARD) user.visible_message("[user] secures the external armor layer.", "You secure the external reinforced armor layer.") - holder.icon_state = "odysseus13" + holder.icon_state = "odysseus15" else var/obj/item/stack/sheet/plasteel/MS = new /obj/item/stack/sheet/plasteel(get_turf(holder)) MS.amount = 5 user.visible_message("[user] pries [MS] from the [holder].", "You pry [MS] from the [holder].") - holder.icon_state = "odysseus11" - if(1) + holder.icon_state = "odysseus13" + if(2) if(diff==FORWARD) user.visible_message("[user] welds the external armor layer to the [holder].", "You weld the external armor layer to the [holder].") - holder.icon_state = "odysseus14" + spawn_mecha_result() else user.visible_message("[user] unfastens the external armor layer.", "You unfasten the external armor layer.") - holder.icon_state = "odysseus12" + holder.icon_state = "odysseus14" return 1 -/datum/construction/reversible/mecha/odysseus/spawn_result() +/datum/construction/reversible/mecha/odysseus/spawn_mecha_result() ..() SSblackbox.inc("mecha_odysseus_created",1) return diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi index 38b3b04c5df4267826bf10b1fe07cca2aa9dea53..42cc8eeb57416a14af3e1daaf2096d6a751ca160 100644 GIT binary patch literal 17377 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�*Z{Z32vdL*!U789U=BJIYpXqX)v`yFvI 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 literal 17212 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 From aa7466072227d5fce37de64dc35286b1b57ff506 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 27 Sep 2017 16:27:09 -0500 Subject: [PATCH 2/3] Update construction_datum.dm --- .../helper_datums/construction_datum.dm | 106 ------------------ 1 file changed, 106 deletions(-) diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index a0885ae373..7768a929da 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,108 +1,3 @@ -<<<<<<< HEAD -#define FORWARD -1 -#define BACKWARD 1 - -/datum/construction - var/list/steps - var/atom/holder - var/result - var/list/steps_desc - -/datum/construction/New(atom) - ..() - holder = atom - if(!holder) //don't want this without a holder - qdel(src) - set_desc(steps.len) - return - -/datum/construction/proc/next_step() - steps.len-- - if(!steps.len) - spawn_result() - else - set_desc(steps.len) - return - -/datum/construction/proc/action(atom/used_atom,mob/user) - return - -/datum/construction/proc/check_step(atom/used_atom,mob/user) //check last step only - var/valid_step = is_right_key(used_atom) - if(valid_step) - if(custom_action(valid_step, used_atom, user)) - next_step() - return 1 - return 0 - -/datum/construction/proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. - var/list/L = steps[steps.len] - if(istype(used_atom, L["key"])) - return steps.len - return 0 - -/datum/construction/proc/custom_action(step, used_atom, user) - return 1 - -/datum/construction/proc/check_all_steps(atom/used_atom,mob/user) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) - var/list/L = steps[i]; - if(istype(used_atom, L["key"])) - if(custom_action(i, used_atom, user)) - steps[i]=null;//stupid byond list from list removal... - listclearnulls(steps); - if(!steps.len) - spawn_result() - return 1 - return 0 - - -/datum/construction/proc/spawn_result() - if(result) - new result(get_turf(holder)) - qdel(holder) - return - -/datum/construction/proc/set_desc(index as num) - var/list/step = steps[index] - holder.desc = step["desc"] - return - -/datum/construction/reversible - var/index - -/datum/construction/reversible/New(atom) - ..() - index = steps.len - return - -/datum/construction/reversible/proc/update_index(diff as num) - index+=diff - if(index==0) - spawn_result() - else - set_desc(index) - return - -/datum/construction/reversible/is_right_key(atom/used_atom) // returns index step - var/list/L = steps[index] - if(istype(used_atom, L["key"])) - return FORWARD //to the first step -> forward - else if(L["backkey"] && istype(used_atom, L["backkey"])) - return BACKWARD //to the last step -> backwards - return 0 - -/datum/construction/reversible/check_step(atom/used_atom,mob/user) - var/diff = is_right_key(used_atom) - if(diff) - if(custom_action(index, diff, used_atom, user)) - update_index(diff) - return 1 - return 0 - -/datum/construction/reversible/custom_action(index, diff, used_atom, user) - return 1 -======= #define FORWARD -1 #define BACKWARD 1 @@ -214,4 +109,3 @@ /datum/construction/reversible/custom_action(index, diff, used_atom, user) return 1 ->>>>>>> e632dee... Adds installing cells as part of mech construction and fixes some mech construction bugs. (#30942) From 31a916436260c46e4614809c54bd32d89dda47e1 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Wed, 27 Sep 2017 16:27:21 -0500 Subject: [PATCH 3/3] Update combat.dm --- code/game/mecha/combat/combat.dm | 42 -------------------------------- 1 file changed, 42 deletions(-) diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index a8977dd7c1..626c405284 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -1,42 +1,3 @@ -<<<<<<< HEAD -/obj/mecha/combat - force = 30 - internal_damage_threshold = 50 - armor = list(melee = 30, bullet = 30, laser = 15, energy = 20, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100) - -/obj/mecha/combat/CheckParts(list/parts_list) - ..() - var/obj/item/stock_parts/capacitor/C = locate() in contents - var/obj/item/stock_parts/scanning_module/SM = locate() in contents - step_energy_drain = 20 - (5 * SM.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best - armor["energy"] += (C.rating * 10) //Each level of capacitor protects the mech against emp by 10% - qdel(C) - qdel(SM) - -/obj/mecha/combat/moved_inside(mob/living/carbon/human/H) - if(..()) - if(H.client && H.client.mouse_pointer_icon == initial(H.client.mouse_pointer_icon)) - H.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' - return 1 - else - return 0 - -/obj/mecha/combat/mmi_moved_inside(obj/item/device/mmi/mmi_as_oc,mob/user) - if(..()) - if(occupant.client && occupant.client.mouse_pointer_icon == initial(occupant.client.mouse_pointer_icon)) - occupant.client.mouse_pointer_icon = 'icons/mecha/mecha_mouse.dmi' - return 1 - else - return 0 - - -/obj/mecha/combat/go_out() - if(occupant && occupant.client && occupant.client.mouse_pointer_icon == 'icons/mecha/mecha_mouse.dmi') - occupant.client.mouse_pointer_icon = initial(occupant.client.mouse_pointer_icon) - ..() - - -======= /obj/mecha/combat force = 30 internal_damage_threshold = 50 @@ -63,6 +24,3 @@ if(occupant && occupant.client && occupant.client.mouse_pointer_icon == 'icons/mecha/mecha_mouse.dmi') occupant.client.mouse_pointer_icon = initial(occupant.client.mouse_pointer_icon) ..() - - ->>>>>>> e632dee... Adds installing cells as part of mech construction and fixes some mech construction bugs. (#30942)