From de128e419a3d7ceb876c9fcf53fa919fa72cc8c6 Mon Sep 17 00:00:00 2001 From: chickenswings62 Date: Mon, 18 Jun 2012 20:02:22 +0200 Subject: [PATCH] Added the coat rack, and filling cabinet to build able objects. Added a small version of the construction frame, starts unanchored to allow the player to put it in place. Cell chargers and normal rechargers are now buildable. --- baystation12.dme | 1 + .../machinery/small_constructable_frame.dm | 191 ++++++++++++++++++ code/game/objects/stacks/metal.dm | 2 + code/game/objects/stacks/wood.dm | 1 + icons/obj/stock_parts.dmi | Bin 8599 -> 9101 bytes 5 files changed, 195 insertions(+) create mode 100644 code/game/machinery/small_constructable_frame.dm diff --git a/baystation12.dme b/baystation12.dme index 438295c7e70..45896155cff 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -513,6 +513,7 @@ #include "code\game\machinery\seed_extractor.dm" #include "code\game\machinery\shieldgen.dm" #include "code\game\machinery\Sleeper.dm" +#include "code\game\machinery\small_constructable_frame.dm" #include "code\game\machinery\spaceheater.dm" #include "code\game\machinery\status_display.dm" #include "code\game\machinery\suit_storage_unit.dm" diff --git a/code/game/machinery/small_constructable_frame.dm b/code/game/machinery/small_constructable_frame.dm new file mode 100644 index 00000000000..4dc3f703220 --- /dev/null +++ b/code/game/machinery/small_constructable_frame.dm @@ -0,0 +1,191 @@ +//Copied from the constructable frame code to make this a hell of a lot easier. + +/obj/machinery/small_constructable_frame //Made into a seperate type to make future revisions easier. + name = "machine frame" + icon = 'stock_parts.dmi' + icon_state = "sbox_0" + density = 1 + anchored = 0 + use_power = 0 + var/obj/item/weapon/circuitboard/circuit = null + var/list/components = null + var/list/req_components = null + var/list/req_component_names = null + var/state = 1 + + proc/update_desc() + var/D + if(req_components) + D = "Requires " + var/first = 1 + for(var/I in req_components) + if(req_components[I] > 0) + D += "[first?"":", "][num2text(req_components[I])] [req_component_names[I]]" + first = 0 + if(first) // nothing needs to be added, then + D += "nothing, use a screwdriver to finish it up." + D += "." + desc = D + +/obj/machinery/small_constructable_frame + 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!" + return + switch(state) + if(1) + if(istype(P, /obj/item/weapon/wrench)) + if(P:amount >= 5) + playsound(src.loc, 'Ratchet.ogg', 50, 1) + user << "\blue You wrench the frame in place." + if(2) + if(istype(P, /obj/item/weapon/cable_coil)) + if(P:amount >= 5) + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + user << "\blue You start to add cables to the frame." + if(do_after(user, 20)) + P:amount -= 5 + if(!P:amount) del(P) + user << "\blue You add cables to the frame." + state = 2 + icon_state = "sbox_1" + if(istype(P, /obj/item/weapon/wrench)) + playsound(src.loc, 'Ratchet.ogg', 75, 1) + user << "\blue You dismantle the frame" + new /obj/item/stack/sheet/metal(src.loc, 5) + del(src) + if(3) + if(istype(P, /obj/item/weapon/circuitboard)) + var/obj/item/weapon/circuitboard/B = P + if(B.board_type == "smachine") + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + user << "\blue You add the circuit board to the frame." + circuit = P + user.drop_item() + P.loc = src + icon_state = "sbox_2" + state = 3 + components = list() + req_components = circuit.req_components.Copy() + for(var/A in circuit.req_components) + req_components[A] = circuit.req_components[A] + req_component_names = circuit.req_components.Copy() + for(var/A in req_components) + var/cp = text2path(A) + var/obj/ct = new cp() // have to quickly instantiate it get name + req_component_names[A] = ct.name + if(circuit.frame_desc) + desc = circuit.frame_desc + else + update_desc() + user << desc + else + user << "\red This frame does not accept circuit boards of this type!" + if(istype(P, /obj/item/weapon/wirecutters)) + playsound(src.loc, 'wirecutter.ogg', 50, 1) + user << "\blue You remove the cables." + state = 1 + icon_state = "sbox_0" + var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc ) + A.amount = 5 + + if(4) + if(istype(P, /obj/item/weapon/crowbar)) + playsound(src.loc, 'Crowbar.ogg', 50, 1) + state = 2 + circuit.loc = src.loc + circuit = null + if(components.len == 0) + user << "\blue You remove the circuit board." + else + user << "\blue You remove the circuit board and other components." + for(var/obj/item/weapon/W in components) + W.loc = src.loc + desc = initial(desc) + req_components = null + components = null + icon_state = "sbox_1" + + if(istype(P, /obj/item/weapon/screwdriver)) + var/component_check = 1 + for(var/R in req_components) + if(req_components[R] > 0) + component_check = 0 + break + if(component_check) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + var/obj/machinery/new_machine = new src.circuit.build_path(src.loc) + for(var/obj/O in new_machine.component_parts) + del(O) + new_machine.component_parts = list() + for(var/obj/O in src) + if(circuit.contain_parts) // things like disposal don't want their parts in them + O.loc = new_machine + else + O.loc = null + new_machine.component_parts += O + if(circuit.contain_parts) + circuit.loc = new_machine + else + circuit.loc = null + new_machine.RefreshParts() + del(src) + + if(istype(P, /obj/item/weapon)) + for(var/I in req_components) + if(istype(P, text2path(I)) && (req_components[I] > 0)) + playsound(src.loc, 'Deconstruct.ogg', 50, 1) + if(istype(P, /obj/item/weapon/cable_coil)) + var/obj/item/weapon/cable_coil/CP = P + if(CP.amount > 1) + var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided + var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src) + CC.amount = camt + CC.update_icon() + CP.use(camt) + components += CC + req_components[I] -= camt + update_desc() + break + user.drop_item() + P.loc = src + components += P + req_components[I]-- + update_desc() + break + user << desc + if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil)) + user << "\red You cannot add that component to the machine!" + + +//Machine Frame Circuit Boards +/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, +micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. +Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able +to destroy them and players will be able to make replacements. +*/ + +/obj/item/weapon/circuitboard/recharger + name = "Circuit board (recharger)" + build_path = "/obj/machinery/recharger" + board_type = "smachine" + origin_tech = "engineering=2;powerstorage=3" + frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/cable_coil" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 2) + +/obj/item/weapon/circuitboard/cellrecharger + name = "Circuit board (cell recharger)" + build_path = "/obj/machinery/cell_charger" + board_type = "smachine" + origin_tech = "engineering=2;powerstorage=2" + frame_desc = "Requires 1 Manipulator, 2 capacitors, and 1 cable coil" + req_components = list( + "/obj/item/weapon/stock_parts/manipulator" = 1, + "/obj/item/weapon/cable_coil" = 1, + "/obj/item/weapon/stock_parts/capacitor" = 2) + + + diff --git a/code/game/objects/stacks/metal.dm b/code/game/objects/stacks/metal.dm index f4c9d52e19d..ae212a1e280 100644 --- a/code/game/objects/stacks/metal.dm +++ b/code/game/objects/stacks/metal.dm @@ -74,6 +74,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \ new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("filling cabinet", /obj/structure/filingcabinet, 3, one_per_turf = 1, on_floor = 1), \ null, \ new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, one_per_turf = 1, on_floor = 1), \ null, \ @@ -84,6 +85,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("small machine frame", /obj/machinery/small_constructable_frame, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wall machine frame", /obj/machinery/constructable_frame/wallmount_frame, 2, one_per_turf = 1, on_floor = 1), \ null, \ diff --git a/code/game/objects/stacks/wood.dm b/code/game/objects/stacks/wood.dm index 6dd30588173..ef241eb7721 100644 --- a/code/game/objects/stacks/wood.dm +++ b/code/game/objects/stacks/wood.dm @@ -6,6 +6,7 @@ WOOD PLANKS var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1), \ new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts/wood, 2), \ + new/datum/stack_recipe("coat rack", /obj/machinery/coatrack, 2), \ new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 30, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \ diff --git a/icons/obj/stock_parts.dmi b/icons/obj/stock_parts.dmi index 6fd7db4de2576da5372bfaa9ba01f2ab3118a3e7..239c3cc4c4cf517e1a7806baa3c6ff64fbf8eb2b 100644 GIT binary patch literal 9101 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 PvjHf`s>)PJnT7rb$T76E literal 8599 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%0AB=Pxmj6&6&Gq&R#t)C`MEi4 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 z