From e7d4c1db14baee67d6a343e9f91c3136345cf122 Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Fri, 16 May 2014 02:03:17 -0700 Subject: [PATCH] OH GOD YOU CAN BUILD PODS NOW OH GOD Conflicts: code/datums/helper_datums/construction_datum.dm code/game/machinery/constructable_frame.dm code/game/mecha/mech_fabricator.dm code/game/mecha/mecha_construction_paths.dm code/game/mecha/mecha_parts.dm html/changelog.html maps/tgstation.2.1.0.0.1.dmm --- baystation12.dme | 2 + .../pomf/spacepods/construction.dm | 222 ++++++++++++++++++ code/WorkInProgress/pomf/spacepods/parts.dm | 10 + .../helper_datums/construction_datum.dm | 139 ++++++++++- code/game/machinery/constructable_frame.dm | 88 +++++++ code/game/mecha/mech_fabricator.dm | 7 +- code/game/mecha/mecha_construction_paths.dm | 67 +----- code/game/mecha/mecha_parts.dm | 4 + icons/48x48/pod_construction.dmi | Bin 0 -> 25397 bytes icons/pods/equipment.dmi | Bin 0 -> 384 bytes 10 files changed, 468 insertions(+), 71 deletions(-) create mode 100644 code/WorkInProgress/pomf/spacepods/construction.dm create mode 100644 code/WorkInProgress/pomf/spacepods/parts.dm create mode 100644 icons/48x48/pod_construction.dmi create mode 100644 icons/pods/equipment.dmi diff --git a/baystation12.dme b/baystation12.dme index 6d78d1ceced..e36147b2c3f 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1518,7 +1518,9 @@ #include "code\WorkInProgress\computer3\computers\robot.dm" #include "code\WorkInProgress\kilakk\fax.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" +#include "code\WorkInProgress\pomf\spacepods\construction.dm" #include "code\WorkInProgress\pomf\spacepods\equipment.dm" +#include "code\WorkInProgress\pomf\spacepods\parts.dm" #include "code\WorkInProgress\pomf\spacepods\spacepods.dm" #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\Sayu\belt.dm" diff --git a/code/WorkInProgress/pomf/spacepods/construction.dm b/code/WorkInProgress/pomf/spacepods/construction.dm new file mode 100644 index 00000000000..c1a68f9fa2f --- /dev/null +++ b/code/WorkInProgress/pomf/spacepods/construction.dm @@ -0,0 +1,222 @@ +/obj/structure/spacepod_frame + density = 1 + opacity = 0 + + anchored = 1 + layer = 3.9 + + icon = 'icons/48x48/pod_construction.dmi' + icon_state = "pod_1" + + var/datum/construction/construct + +/obj/structure/spacepod_frame/New() + ..() + bound_width = 64 + bound_height = 64 + + construct = new /datum/construction/reversible2/pod(src) + + dir = EAST + +/obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob) + if(!construct || !construct.action(W, user)) + ..() + return + +/obj/structure/spacepod_frame/attack_hand() + return + + + +///////////////////////////////// +// CONSTRUCTION STEPS +///////////////////////////////// +/datum/construction/reversible2/pod + result = /obj/spacepod/civilian + base_icon="pod" + //taskpath = /datum/job_objective/make_pod + steps = list( + // 1. Initial state + list( + "desc" = "An empty pod frame.", + state_next = list( + "key" = /obj/item/stack/cable_coil, + "vis_msg" = "{USER} wires the {HOLDER}.", + "self_msg" = "You wire the {HOLDER}." + ) + ), + // 2. Crudely Wired + list( + "desc" = "A crudely-wired pod frame.", + state_prev = list( + "key" = /obj/item/weapon/wirecutters, + "vis_msg" = "{USER} cuts out the {HOLDER}'s wiring.", + "self_msg" = "You remove the {HOLDER}'s wiring." + ), + state_next = list( + "key" = /obj/item/weapon/screwdriver, + "vis_msg" = "{USER} adjusts the wiring.", + "self_msg" = "You adjust the {HOLDER}'s wiring." + ) + ), + // 3. Cleanly wired + list( + "desc" = "A wired pod frame.", + state_prev = list( + "key" = /obj/item/weapon/screwdriver, + "vis_msg" = "{USER} unclips {HOLDER}'s wiring harnesses.", + "self_msg" = "You unclip {HOLDER}'s wiring harnesses." + ), + state_next = list( + "key" = /obj/item/weapon/circuitboard/mecha/pod, + "vis_msg" = "{USER} inserts the mainboard into the {HOLDER}.", + "self_msg" = "You insert the mainboard into the {HOLDER}.", + "delete" = 1 + ) + ), + // 4. Circuit added + list( + "desc" = "A wired pod frame with a loose mainboard.", + state_prev = list( + "key" = /obj/item/weapon/crowbar, + "vis_msg" = "{USER} pries out the mainboard.", + "self_msg" = "You pry out the mainboard.", + + "spawn" = /obj/item/weapon/circuitboard/mecha/pod, + "amount" = 1 + ), + state_next = list( + "key" = /obj/item/weapon/screwdriver, + "vis_msg" = "{USER} secures the mainboard.", + "self_msg" = "You secure the mainboard." + ) + ), + // 5. Circuit secured + list( + "desc" = "A wired pod frame with a secured mainboard.", + state_prev = list( + "key" = /obj/item/weapon/screwdriver, + "vis_msg" = "{USER} unsecures the mainboard.", + "self_msg" = "You unscrew the mainboard from the {HOLDER}." + ), + state_next = list( + "key" = /obj/item/pod_parts/core, + "vis_msg" = "{USER} inserts the core into the {HOLDER}.", + "self_msg" = "You carefully insert the core into the {HOLDER}.", + "delete" = 1 + ) + ), + // 6. Core inserted + list( + "desc" = "A naked space pod with a loose core.", + state_prev = list( + "key" = /obj/item/weapon/crowbar, + "vis_msg" = "{USER} delicately removes the core from the {HOLDER} with a crowbar.", + "self_msg" = "You delicately remove the core from the {HOLDER} with a crowbar.", + + "spawn" = /obj/item/pod_parts/core, + "amount" = 1 + ), + state_next = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} secures the core's bolts.", + "self_msg" = "You secure the core's bolts." + ) + ), + // 7. Core secured + list( + "desc" = "A naked space pod with an exposed core. How lewd.", + state_prev = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} unsecures the {HOLDER}'s core.", + "self_msg" = "You unsecure the {HOLDER}'s core." + ), + state_next = list( + "key" = /obj/item/stack/sheet/metal, + "amount" = 5, + "vis_msg" = "{USER} frabricates a pressure bulkhead for the {HOLDER}.", + "self_msg" = "You frabricate a pressure bulkhead for the {HOLDER}." + ) + ), + // 8. Bulkhead added + list( + "desc" = "A space pod with loose bulkhead panelling exposed.", + state_prev = list( + "key" = /obj/item/weapon/crowbar, + "vis_msg" = "{USER} pops the {HOLDER}'s bulkhead panelling loose.", + "self_msg" = "You pop the {HOLDER}'s bulkhead panelling loose.", + + "spawn" = /obj/item/stack/sheet/metal, + "amount" = 5, + ), + state_next = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} secures the {HOLDER}'s bulkhead panelling.", + "self_msg" = "You secure the {HOLDER}'s bulkhead panelling." + ) + ), + // 9. Bulkhead secured with bolts + list( + "desc" = "A space pod with unwelded bulkhead panelling exposed.", + state_prev = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} unbolts the {HOLDER}'s bulkhead panelling.", + "self_msg" = "You unbolt the {HOLDER}'s bulkhead panelling." + ), + state_next = list( + "key" = /obj/item/weapon/weldingtool, + "vis_msg" = "{USER} seals the {HOLDER}'s bulkhead panelling with a weld.", + "self_msg" = "You seal the {HOLDER}'s bulkhead panelling with a weld." + ) + ), + // 10. Welded bulkhead + list( + "desc" = "A space pod with sealed bulkhead panelling exposed.", + state_prev = list( + "key" = /obj/item/weapon/weldingtool, + "vis_msg" = "{USER} cuts the {HOLDER}'s bulkhead panelling loose.", + "self_msg" = "You cut the {HOLDER}'s bulkhead panelling loose." + ), + state_next = list( + "key" = /obj/item/stack/sheet/plasteel, + "amount" = 5, + "vis_msg" = "{USER} installs the {HOLDER}'s plasteel armor.", + "self_msg" = "You install the {HOLDER}'s plasteel armor." + ) + ), + // 11. Loose armor + list( + "desc" = "A space pod with unsecured armor.", + state_prev = list( + "key" = /obj/item/weapon/crowbar, + "vis_msg" = "{USER} pries off {HOLDER}'s armor.", + "self_msg" = "You pry off {HOLDER}'s armor." + ), + state_next = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} bolts down the {HOLDER}'s armor.", + "self_msg" = "You bolt down the {HOLDER}'s armor." + ) + ), + // 12. Bolted-down armor + list( + "desc" = "A space pod with unsecured armor.", + state_prev = list( + "key" = /obj/item/weapon/wrench, + "vis_msg" = "{USER} unsecures the {HOLDER}'s armor.", + "self_msg" = "You unsecure the {HOLDER}'s armor." + ), + state_next = list( + "key" = /obj/item/weapon/weldingtool, + "vis_msg" = "{USER} welds the {HOLDER}'s armor.", + "self_msg" = "You weld the {HOLDER}'s armor." + ) + ) + // EOF + ) + + spawn_result(mob/user as mob) + ..() + feedback_inc("spacepod_created",1) + return \ No newline at end of file diff --git a/code/WorkInProgress/pomf/spacepods/parts.dm b/code/WorkInProgress/pomf/spacepods/parts.dm new file mode 100644 index 00000000000..d682ef5240c --- /dev/null +++ b/code/WorkInProgress/pomf/spacepods/parts.dm @@ -0,0 +1,10 @@ +/obj/item/pod_parts + parent_type = /obj/item/mecha_parts + icon = 'icons/pods/equipment.dmi' + +/obj/item/pod_parts/core + name="Space Pod Core" + icon_state = "core" + construction_cost = list("iron"=5000,"uranium"=1000,"plasma"=5000) + flags = FPRINT | CONDUCT + origin_tech = "programming=2;materials=3;bluespace=2;engineering=3" \ No newline at end of file diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 3599f2cd97e..ffede1e6957 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -43,6 +43,36 @@ return 0 proc/custom_action(step, used_atom, user) + if(istype(used_atom, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/W = used_atom + if (W.remove_fuel(0, user)) + playsound(holder, 'sound/items/Welder2.ogg', 50, 1) + else + return 0 + else if(istype(used_atom, /obj/item/weapon/wrench)) + playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) + + else if(istype(used_atom, /obj/item/weapon/screwdriver)) + playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) + + else if(istype(used_atom, /obj/item/weapon/wirecutters)) + playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) + + else if(istype(used_atom, /obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C = used_atom + if(C.amount<4) + user << ("There's not enough cable to finish the task.") + return 0 + else + C.use(4) + playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) + else if(istype(used_atom, /obj/item/stack)) + var/obj/item/stack/S = used_atom + if(S.amount < 5) + user << ("There's not enough material in this stack.") + return 0 + else + S.use(5) return 1 proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one. @@ -75,6 +105,33 @@ holder.desc = step["desc"] return + proc/try_consume(mob/user as mob, atom/used_atom, amount) + if(amount>0) + // STACKS + if(istype(used_atom,/obj/item/stack)) + var/obj/item/stack/stack=used_atom + if(stack.amount < amount) + user << "\red You don't have enough [stack]! You need at least [amount]." + return 0 + stack.use(amount) + // CABLES + if(istype(used_atom,/obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/coil=used_atom + if(coil.amount < amount) + user << "\red You don't have enough cable! You need at least [amount] coils." + return 0 + coil.use(amount) + // WELDER + if(istype(used_atom,/obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/welder=used_atom + if(!welder.isOn()) + user << "\blue You tap the [src] with your unlit welder. [pick("Ding","Dong")]." + return 0 + if(!welder.remove_fuel(amount,user)) + user << "\red You don't have enough fuel!" + return 0 + return 1 + /datum/construction/reversible var/index @@ -108,4 +165,84 @@ return 0 custom_action(index, diff, used_atom, user) - return 1 \ No newline at end of file + if(!..(index,used_atom,user)) + return 0 + return 1 + +#define state_next "next" +#define state_prev "prev" + +/datum/construction/reversible2 + var/index + var/base_icon = "durand" + + New(atom) + ..() + index = 1 + return + + proc/update_index(diff as num, mob/user as mob) + index-=diff + if(index==steps.len+1) + spawn_result(user) + else + set_desc(index) + return + + proc/update_icon() + holder.icon_state="[base_icon]_[index]" + + is_right_key(mob/user as mob,atom/used_atom) // returns index step + var/list/state = steps[index] + if(state_next in state) + var/list/step = state[state_next] + if(istype(used_atom, step["key"])) + //if(L["consume"] && !try_consume(used_atom,L["consume"])) + // return 0 + return FORWARD //to the first step -> forward + else if(state_prev in state) + var/list/step = state[state_prev] + if(istype(used_atom, step["key"])) + //if(L["consume"] && !try_consume(used_atom,L["consume"])) + // return 0 + return BACKWARD //to the first step -> forward + return 0 + + check_step(atom/used_atom,mob/user as mob) + var/diff = is_right_key(user,used_atom) + if(diff) + if(custom_action(index, diff, used_atom, user)) + update_index(diff,user) + update_icon() + return 1 + return 0 + + proc/fixText(text,user) + text = replacetext(text,"{USER}","[user]") + text = replacetext(text,"{HOLDER}","[holder]") + return text + + custom_action(index, diff, used_atom, var/mob/user) + if(!..(index,used_atom,user)) + return 0 + + var/list/step = steps[index] + var/list/state = step[diff==FORWARD ? state_next : state_prev] + user.visible_message(fixText(state["vis_msg"],user),fixText(state["self_msg"],user)) + + if("delete" in state) + del(used_atom) + else if("spawn" in state) + var/spawntype=state["spawn"] + var/atom/A = new spawntype(holder.loc) + if("amount" in state) + if(istype(A,/obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/C=A + C.amount=state["amount"] + if(istype(A,/obj/item/stack)) + var/obj/item/stack/S=A + S.amount=state["amount"] + + return 1 + action(used_atom,user) + return check_step(used_atom,user) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 4e908808c66..bc26f16c10b 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -13,6 +13,10 @@ var/list/req_component_names = null var/state = 1 + // For pods + var/list/connected_parts = list() + var/pattern_idx=0 + proc/update_desc() var/D if(req_components) @@ -28,6 +32,48 @@ desc = D /obj/machinery/constructable_frame/machine_frame + + proc/find_square() + // This is fucking stupid but what the hell. + + // This corresponds to indicies from alldirs. + // 1 2 3 4 5 6 7 8 + // var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) + var/valid_patterns=list( + list(1,3,5), //SW - NORTH,EAST,NORTHEAST + list(2,3,7), //NW - SOUTH,EAST,SOUTHEAST + list(1,4,6), //SE - NORTH,WEST,NORTHWEST + list(2,4,8) //NE - SOUTH,WEST,SOUTHWEST + ) + var/detected_parts[8] + var/tally=0 + var/turf/T + var/obj/machinery/constructable_frame/machine_frame/friend + for(var/i=1;i<=8;i++) + T=get_step(src.loc,alldirs[i]) + friend = locate() in T + if(friend) + detected_parts[i]=friend + tally++ + // Need at least 3 connections to make a square + if(tally<3) + return + // Find stuff in the patterns indicated + for(var/i=1;i<=4;i++) + var/list/scanidxs=valid_patterns[i] + var/list/new_connected=list() + var/allfound=1 + for(var/diridx in scanidxs) + if(detected_parts[diridx]==null) + allfound=0 + break + new_connected.Add(detected_parts[diridx]) + if(allfound) + connected_parts=new_connected + pattern_idx=i + return 1 + return 0 + attackby(obj/item/P as obj, mob/user as mob) if(P.crit_fail) user << "\red This part is faulty, you cannot add this to the machine!" @@ -46,6 +92,48 @@ user << "\blue You add cables to the frame." state = 2 icon_state = "box_1" +/* + else if(istype(P, /obj/item/stack/sheet/glass)) + var/obj/item/stack/sheet/glass/G=P + if(G.amount<1) + user << "\red How...?" + return + G.use(1) + user << "\blue You add the glass to the frame." + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + new /obj/structure/displaycase_frame(src.loc) + del(src) + return*/ + else if(istype(P, /obj/item/stack/rods)) + var/obj/item/stack/rods/R=P + if(R.amount<10) + user << "\red You need 10 rods to assemble a pod frame." + return + if(!find_square()) + user << "\red You cannot assemble a pod frame without a 2x2 square of machine frames." + return + + R.use(10) + + for(var/obj/machinery/constructable_frame/machine_frame/F in connected_parts) + qdel(F) + + var/turf/T=get_turf(src) + // Offset frame (if needed) so it doesn't look wonky when it spawns. + switch(pattern_idx) + if(2) + T=get_step(T,SOUTH) + if(3) + T=get_step(T,WEST) + if(4) + T=get_step(T,SOUTHWEST) + + new /obj/structure/spacepod_frame(T) + user << "\blue You assemble the pod frame." + playsound(get_turf(src), 'sound/items/Deconstruct.ogg', 50, 1) + qdel(src) + return + else if(istype(P, /obj/item/weapon/wrench)) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index ee719e1527c..ee20df78be5 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -129,10 +129,9 @@ /obj/item/borg/upgrade/jetpack ), - - - - + "Space Pod" = list( + /obj/item/pod_parts/core + ), "Misc"=list(/obj/item/mecha_parts/mecha_tracking) ) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index ad5a43720d4..62f75ecf13d 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -2,72 +2,7 @@ ///// Construction datums ////// //////////////////////////////// -/datum/construction/mecha/custom_action(step, atom/used_atom, mob/user) - if(istype(used_atom, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = used_atom - if (W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) - else - return 0 - else if(istype(used_atom, /obj/item/weapon/wrench)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = used_atom - if(C.amount<4) - user << ("There's not enough cable to finish the task.") - return 0 - else - C.use(4) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) - else if(istype(used_atom, /obj/item/stack)) - var/obj/item/stack/S = used_atom - if(S.amount < 5) - user << ("There's not enough material in this stack.") - return 0 - else - S.use(5) - return 1 - -/datum/construction/reversible/mecha/custom_action(index as num, diff as num, atom/used_atom, mob/user as mob) - if(istype(used_atom, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/W = used_atom - if (W.remove_fuel(0, user)) - playsound(holder, 'sound/items/Welder2.ogg', 50, 1) - else - return 0 - else if(istype(used_atom, /obj/item/weapon/wrench)) - playsound(holder, 'sound/items/Ratchet.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/weapon/screwdriver)) - playsound(holder, 'sound/items/Screwdriver.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/weapon/wirecutters)) - playsound(holder, 'sound/items/Wirecutter.ogg', 50, 1) - - else if(istype(used_atom, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = used_atom - if(C.amount<4) - user << ("There's not enough cable to finish the task.") - return 0 - else - C.use(4) - playsound(holder, 'sound/items/Deconstruct.ogg', 50, 1) - else if(istype(used_atom, /obj/item/stack)) - var/obj/item/stack/S = used_atom - if(S.amount < 5) - user << ("There's not enough material in this stack.") - return 0 - else - S.use(5) - return 1 - +// custom_actions moved to construction_datum - N3X /datum/construction/mecha/ripley_chassis steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1 diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 9d8c0696b29..50a08767736 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -479,4 +479,8 @@ name = "Circuit board (Odysseus Central Control module)" icon_state = "mainboard" + pod + name = "Circuit board (Space Pod Mainboard)" + icon_state = "mainboard" + diff --git a/icons/48x48/pod_construction.dmi b/icons/48x48/pod_construction.dmi new file mode 100644 index 0000000000000000000000000000000000000000..03eff9b0c0907f4901afe0bcf3ee2f19d4f0a382 GIT binary patch literal 25397 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 XX_XSux{mokhcS4%`njxgN@xNA2E~wy literal 0 HcmV?d00001