From 542c8a99e3dbb04336ef78a5c7bbbdb0c6f14735 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Thu, 28 Sep 2023 20:35:54 +0600 Subject: [PATCH 01/13] Mech fabricator recycling --- code/game/mecha/mech_fabricator.dm | 101 ++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 16 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 8a241cedd401..f0d139eb57ae 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -1,3 +1,6 @@ +#define FABRICATOR_RECYCLE_MATERIAL_RATE 0.8 // To be discussed. Maybe add dependency on part tiers. +#define FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER 5 // Item.size * modifier is the time required to recycle an item. + /obj/machinery/mecha_part_fabricator icon = 'icons/obj/robotics.dmi' icon_state = "fab" @@ -502,25 +505,27 @@ return result -/obj/machinery/mecha_part_fabricator/attackby(obj/item/weapon/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "fab", "fab", W)) - update_icon() - return +/obj/machinery/mecha_part_fabricator/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon)) + var/obj/item/weapon/W = I + if(default_deconstruction_screwdriver(user, "fab", "fab", W)) + update_icon() + return - if(exchange_parts(user, W)) - return + if(exchange_parts(user, W)) + return - if(panel_open) - if(isprying(W)) - default_deconstruction_crowbar(W) - return 1 - else - to_chat(user, "You can't load \the [name] while it's opened!") - return 1 + if(panel_open) + if(isprying(W)) + default_deconstruction_crowbar(W) + return 1 + else + to_chat(user, "You can't load \the [name] while it's opened!") + return 1 - if(istype(W, /obj/item/stack)) + if(istype(I, /obj/item/stack)) var/material - switch(W.type) + switch(I.type) if(/obj/item/stack/sheet/mineral/gold) material = MAT_GOLD if(/obj/item/stack/sheet/mineral/silver) @@ -544,7 +549,7 @@ if(res_max_amount - resources[material] < MINERAL_MATERIAL_AMOUNT) //overstuffing the fabricator to_chat(user, "\The [src] [material] storage is full!") return - var/obj/item/stack/sheet/stack = W + var/obj/item/stack/sheet/stack = I var/sname = "[stack.name]" if(resources[material] < res_max_amount) add_overlay("fab-load-[material]")//loading animation is now an overlay based on material type. No more spontaneous conversion of all ores to metal. -vey @@ -560,6 +565,67 @@ to_chat(user, "\The [src] cannot hold any more [sname] sheet\s!") return + try_to_recycle(I, user) + +/obj/machinery/mecha_part_fabricator/MouseDrop_T(atom/A, mob/user) + if(user.incapacitated()) + return + if(!isrobot(user) && isitem(A)) + var/obj/item/I = A + try_to_recycle(I, user) + return + return ..() + +/obj/machinery/mecha_part_fabricator/proc/try_to_recycle(obj/item/I, mob/user) + if(being_built) + to_chat(user, "\The [src] is currently processing! Please wait until completion.") + return + + if(isrobot(user)) + return + + var/datum/design/found_design = null + + if(I.contents.len) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. + to_chat(user, "You need to fully disassemble \the [I] before recycling.") + return + + for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. + if((D.build_type & build_type) && istype(I, D.build_path)) + found_design = D + break + + if(!found_design) + to_chat(user, "\The [I] is incompatible and cannot be recycled by \the [src].") + return + + var/list/materials_to_add = list() + + for(var/material in found_design.materials) + if(material in resources) + var/retrieved_materials = round(get_resource_cost_w_coeff(found_design, material, roundto = 0.01) * FABRICATOR_RECYCLE_MATERIAL_RATE, 1) + + if((resources[material] + retrieved_materials) >= res_max_amount) + to_chat(user, "\The [src] [material] storage is full!") + return + + materials_to_add[material] = retrieved_materials + + // Every check passed, start to recycle' + user.visible_message("[user] starts placing \the [I] into \the [src].", + "You start placing \the [I] into \the [src].") + if(I.use_tool(src, user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, required_skills_override = list())) + for(var/material in materials_to_add) + resources[material] += materials_to_add[material] + + qdel(I) + + add_overlay("fab-load-metal") + to_chat(user, "You successfully recycle \the [I] in \the [src].") + sleep(10) + updateUsrDialog() + cut_overlay("fab-load-metal") + /obj/machinery/mecha_part_fabricator/deconstruction() . = ..() for(var/material in resources) @@ -577,3 +643,6 @@ /obj/machinery/mecha_part_fabricator/power_change() ..() update_icon() + +#undef FABRICATOR_RECYCLE_MATERIAL_RATE +#undef FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER From c063ab78d528c74c19b3a6297752d856d4013219 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Thu, 28 Sep 2023 21:23:19 +0600 Subject: [PATCH 02/13] Removed duplicated code from mining fabricator, added punching fabricator with item if fabricator cannot disassemble it --- code/game/mecha/mech_fabricator.dm | 22 ++-- .../mining_fabricator/mining_fabricator.dm | 102 ------------------ 2 files changed, 15 insertions(+), 109 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index f0d139eb57ae..204a3299927d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -486,6 +486,8 @@ type = /obj/item/stack/sheet/mineral/phoron if(MAT_URANIUM) type = /obj/item/stack/sheet/mineral/uranium + if(MAT_PLASTIC) + type = /obj/item/stack/sheet/mineral/plastic else return 0 var/result = 0 @@ -540,9 +542,14 @@ material = MAT_GLASS if(/obj/item/stack/sheet/mineral/uranium) material = MAT_URANIUM + if(/obj/item/stack/sheet/mineral/plastic) + material = MAT_PLASTIC else return ..() + if(!(material in resources)) + return ..() + if(being_built) to_chat(user, "\The [src] is currently processing! Please wait until completion.") return @@ -565,7 +572,8 @@ to_chat(user, "\The [src] cannot hold any more [sname] sheet\s!") return - try_to_recycle(I, user) + if(!try_to_recycle(I, user)) + return ..() /obj/machinery/mecha_part_fabricator/MouseDrop_T(atom/A, mob/user) if(user.incapacitated()) @@ -579,16 +587,16 @@ /obj/machinery/mecha_part_fabricator/proc/try_to_recycle(obj/item/I, mob/user) if(being_built) to_chat(user, "\The [src] is currently processing! Please wait until completion.") - return + return TRUE if(isrobot(user)) - return + return FALSE var/datum/design/found_design = null if(I.contents.len) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. to_chat(user, "You need to fully disassemble \the [I] before recycling.") - return + return TRUE for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. if((D.build_type & build_type) && istype(I, D.build_path)) @@ -596,8 +604,7 @@ break if(!found_design) - to_chat(user, "\The [I] is incompatible and cannot be recycled by \the [src].") - return + return FALSE // Just punch this bad boy var/list/materials_to_add = list() @@ -607,7 +614,7 @@ if((resources[material] + retrieved_materials) >= res_max_amount) to_chat(user, "\The [src] [material] storage is full!") - return + return TRUE materials_to_add[material] = retrieved_materials @@ -625,6 +632,7 @@ sleep(10) updateUsrDialog() cut_overlay("fab-load-metal") + return TRUE /obj/machinery/mecha_part_fabricator/deconstruction() . = ..() diff --git a/code/modules/mining/mining_fabricator/mining_fabricator.dm b/code/modules/mining/mining_fabricator/mining_fabricator.dm index ecb38f34c108..0132f25d19c3 100644 --- a/code/modules/mining/mining_fabricator/mining_fabricator.dm +++ b/code/modules/mining/mining_fabricator/mining_fabricator.dm @@ -102,105 +102,3 @@ user << browse(dat, "window=mine_fabricator;size=1000x430") onclose(user, "mine_fabricator") return - - -/obj/machinery/mecha_part_fabricator/mining_fabricator/remove_material(mat_string, amount) - if(resources[mat_string] < MINERAL_MATERIAL_AMOUNT) //not enough mineral for a sheet - return -1 - var/type - switch(mat_string) - if(MAT_METAL) - type = /obj/item/stack/sheet/metal - if(MAT_GLASS) - type = /obj/item/stack/sheet/glass - if(MAT_GOLD) - type = /obj/item/stack/sheet/mineral/gold - if(MAT_SILVER) - type = /obj/item/stack/sheet/mineral/silver - if(MAT_DIAMOND) - type = /obj/item/stack/sheet/mineral/diamond - if(MAT_PHORON) - type = /obj/item/stack/sheet/mineral/phoron - if(MAT_URANIUM) - type = /obj/item/stack/sheet/mineral/uranium - if(MAT_PLASTIC) - type = /obj/item/stack/sheet/mineral/plastic - else - return 0 - var/result = 0 - - while(amount > 50) - new type(get_turf(src),50) - amount -= 50 - result += 50 - resources[mat_string] -= 50 * MINERAL_MATERIAL_AMOUNT - - var/total_amount = round(resources[mat_string]/MINERAL_MATERIAL_AMOUNT) - if(total_amount)//if there's still enough material for sheets - var/obj/item/stack/sheet/res = new type(get_turf(src),min(amount,total_amount)) - resources[mat_string] -= res.get_amount()*MINERAL_MATERIAL_AMOUNT - result += res.get_amount() - - return result - - -/obj/machinery/mecha_part_fabricator/mining_fabricator/attackby(obj/item/weapon/W, mob/user, params) - - if(default_deconstruction_screwdriver(user, "fab", "fab", W)) - update_icon() - return - - if(exchange_parts(user, W)) - return - - if(panel_open) - if(isprying(W)) - default_deconstruction_crowbar(W) - return 1 - else - to_chat(user, "You can't load \the [name] while it's opened!") - return 1 - - if(istype(W, /obj/item/stack)) - var/material - switch(W.type) - if(/obj/item/stack/sheet/mineral/gold) - material = MAT_GOLD - if(/obj/item/stack/sheet/mineral/silver) - material = MAT_SILVER - if(/obj/item/stack/sheet/mineral/diamond) - material = MAT_DIAMOND - if(/obj/item/stack/sheet/mineral/phoron) - material = MAT_PHORON - if(/obj/item/stack/sheet/metal) - material = MAT_METAL - if(/obj/item/stack/sheet/glass) - material = MAT_GLASS - if(/obj/item/stack/sheet/mineral/uranium) - material = MAT_URANIUM - if(/obj/item/stack/sheet/mineral/plastic) - material = MAT_PLASTIC - else - return ..() - - if(being_built) - to_chat(user, "\The [src] is currently processing! Please wait until completion.") - return - if(res_max_amount - resources[material] < MINERAL_MATERIAL_AMOUNT) //overstuffing the fabricator - to_chat(user, "\The [src] [material] storage is full!") - return - var/obj/item/stack/sheet/stack = W - var/sname = "[stack.name]" - if(resources[material] < res_max_amount) - add_overlay("fab-load-[material]")//loading animation is now an overlay based on material type. No more spontaneous conversion of all ores to metal. -vey - - var/transfer_amount = min(stack.get_amount(), round((res_max_amount - resources[material])/MINERAL_MATERIAL_AMOUNT,1)) - resources[material] += transfer_amount * MINERAL_MATERIAL_AMOUNT - stack.use(transfer_amount) - to_chat(user, "You insert [transfer_amount] [sname] sheet\s into \the [src].") - sleep(10) - updateUsrDialog() - cut_overlay("fab-load-[material]") //No matter what the overlay shall still be deleted - else - to_chat(user, "\The [src] cannot hold any more [sname] sheet\s!") - return From 16daccfdbbf8e768b6ede6b7406c580f30f62632 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Mon, 30 Oct 2023 23:27:16 +0600 Subject: [PATCH 03/13] Use do_after instead of use_tool --- code/game/mecha/mech_fabricator.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index e5e1f9fd1c9b..a8bb2b0852c9 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -620,10 +620,13 @@ materials_to_add[material] = retrieved_materials - // Every check passed, start to recycle' + // Every check passed, start to recycle user.visible_message("[user] starts placing \the [I] into \the [src].", "You start placing \the [I] into \the [src].") - if(I.use_tool(src, user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, required_skills_override = list())) + + var/check = CALLBACK(src, PROC_REF(do_after_checks), user, I) + + if(do_after(user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, target = src, extra_checks = check)) for(var/material in materials_to_add) resources[material] += materials_to_add[material] @@ -636,6 +639,9 @@ cut_overlay("fab-load-metal") return TRUE +/obj/machinery/mecha_part_fabricator/proc/do_after_checks(mob/user, obj/item/item) + return user.Adjacent(src) && item.Adjacent(src) && user.Adjacent(user) + /obj/machinery/mecha_part_fabricator/deconstruction() . = ..() for(var/material in resources) From 88282c3632028956132de267873104ee965f1160 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 00:53:32 +0600 Subject: [PATCH 04/13] Added more advanced check for contents --- code/game/mecha/mech_fabricator.dm | 35 +++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index a8bb2b0852c9..a767afce8a64 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -586,6 +586,35 @@ return return ..() +/obj/machinery/mecha_part_fabricator/proc/check_contents_empty(obj/item/I) + if(istype(I, /obj/item/device/mmi/radio_enabled)) + for(var/A as anything in I.contents) + if(!istype(A, /obj/item/device/radio)) + return FALSE + return TRUE + + if(istype(I, /obj/item/weapon/gun/energy/kinetic_accelerator)) + for(var/A as anything in I.contents) + if(!istype(A, /obj/item/weapon/stock_parts/cell/crap) && !istype(A, /obj/item/ammo_casing/energy/kinetic)) + return FALSE + return TRUE + + + var/global/list/allowed_recycling_assembled_types = list( // All the types that are allowed to have contents + /obj/item/device/mmi/posibrain,// haha main reason for fabrication + /obj/item/mecha_parts/mecha_equipment/generator, + /obj/item/mecha_parts/mecha_equipment/extinguisher, + /obj/item/mecha_parts/mecha_equipment/cable_layer, + /obj/item/weapon/pickaxe/drill/diamond_drill, + /obj/item/weapon/gun/energy/laser/cutter, + /obj/item/weapon/pickaxe/drill/jackhammer, + ) + + if(I.type in allowed_recycling_assembled_types) + return TRUE + + return I.contents.len == 0 + /obj/machinery/mecha_part_fabricator/proc/try_to_recycle(obj/item/I, mob/user) if(being_built) to_chat(user, "\The [src] is currently processing! Please wait until completion.") @@ -596,7 +625,7 @@ var/datum/design/found_design = null - if(I.contents.len) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. + if(!check_contents_empty(I)) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. to_chat(user, "You need to fully disassemble \the [I] before recycling.") return TRUE @@ -624,9 +653,9 @@ user.visible_message("[user] starts placing \the [I] into \the [src].", "You start placing \the [I] into \the [src].") - var/check = CALLBACK(src, PROC_REF(do_after_checks), user, I) + var/checks = CALLBACK(src, PROC_REF(do_after_checks), user, I) - if(do_after(user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, target = src, extra_checks = check)) + if(do_after(user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, target = src, extra_checks = checks)) for(var/material in materials_to_add) resources[material] += materials_to_add[material] From bd49a359d307ab15216116b62a81163a187ba5c0 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 02:08:57 +0600 Subject: [PATCH 05/13] Extracted getting recycled materials proc, blocking actions if fabricator is recycling, added blocked types, fixed cable layer runtime on destroy --- .../mecha/equipment/tools/medical_tools.dm | 4 +- code/game/mecha/mech_fabricator.dm | 125 ++++++++++-------- 2 files changed, 74 insertions(+), 55 deletions(-) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 19634aea05ca..74c1a22f2363 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -265,11 +265,11 @@ return /obj/item/mecha_parts/mecha_equipment/cable_layer/detach() - chassis.events.clearEvent("onMove",event) return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy() - chassis.events.clearEvent("onMove",event) + if(chassis) + chassis.events.clearEvent("onMove",event) return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/action(obj/item/stack/cable_coil/target) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index a767afce8a64..e788c8930316 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -38,6 +38,7 @@ var/processing_queue = 0 var/screen = "main" var/temp + var/recycling = FALSE var/list/part_sets = list( "Cyborg", "Ripley", @@ -318,6 +319,9 @@ return if(temp) left_part = temp + else if(recycling) + left_part = {"Recycling. + Please wait until completion..."} else if(being_built) var/obj/I = being_built.build_path left_part = {"Building [initial(I.name)].
@@ -410,7 +414,7 @@ return update_queue_on_page() if(href_list["process_queue"]) - if(processing_queue || being_built) + if(processing_queue || being_built || recycling) return FALSE processing_queue() @@ -552,7 +556,7 @@ if(!(material in resources)) return ..() - if(being_built) + if(being_built || recycling) to_chat(user, "\The [src] is currently processing! Please wait until completion.") return if(res_max_amount - resources[material] < MINERAL_MATERIAL_AMOUNT) //overstuffing the fabricator @@ -567,8 +571,8 @@ resources[material] += transfer_amount * MINERAL_MATERIAL_AMOUNT stack.use(transfer_amount) to_chat(user, "You insert [transfer_amount] [sname] sheet\s into \the [src].") - sleep(10) updateUsrDialog() + sleep(10) cut_overlay("fab-load-[material]") //No matter what the overlay shall still be deleted else to_chat(user, "\The [src] cannot hold any more [sname] sheet\s!") @@ -586,73 +590,42 @@ return return ..() -/obj/machinery/mecha_part_fabricator/proc/check_contents_empty(obj/item/I) - if(istype(I, /obj/item/device/mmi/radio_enabled)) - for(var/A as anything in I.contents) - if(!istype(A, /obj/item/device/radio)) - return FALSE - return TRUE - - if(istype(I, /obj/item/weapon/gun/energy/kinetic_accelerator)) - for(var/A as anything in I.contents) - if(!istype(A, /obj/item/weapon/stock_parts/cell/crap) && !istype(A, /obj/item/ammo_casing/energy/kinetic)) - return FALSE - return TRUE - - - var/global/list/allowed_recycling_assembled_types = list( // All the types that are allowed to have contents - /obj/item/device/mmi/posibrain,// haha main reason for fabrication - /obj/item/mecha_parts/mecha_equipment/generator, - /obj/item/mecha_parts/mecha_equipment/extinguisher, - /obj/item/mecha_parts/mecha_equipment/cable_layer, - /obj/item/weapon/pickaxe/drill/diamond_drill, - /obj/item/weapon/gun/energy/laser/cutter, - /obj/item/weapon/pickaxe/drill/jackhammer, - ) - - if(I.type in allowed_recycling_assembled_types) - return TRUE - - return I.contents.len == 0 - /obj/machinery/mecha_part_fabricator/proc/try_to_recycle(obj/item/I, mob/user) - if(being_built) + if(being_built || recycling) to_chat(user, "\The [src] is currently processing! Please wait until completion.") return TRUE if(isrobot(user)) return FALSE - var/datum/design/found_design = null + var/global/list/disallowed_types = list( + /obj/item/mecha_parts/chassis, // No way to fully disassemble mecha chassis and im lazy to make a way to disassemble it... + ) - if(!check_contents_empty(I)) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. + if(is_type_in_list(I, disallowed_types)) + return FALSE + + if(!recycling_check_contents_empty(I)) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. to_chat(user, "You need to fully disassemble \the [I] before recycling.") return TRUE - for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. - if((D.build_type & build_type) && istype(I, D.build_path)) - found_design = D - break - - if(!found_design) - return FALSE // Just punch this bad boy + var/list/materials_to_add = get_recycled_materials(I) - var/list/materials_to_add = list() - - for(var/material in found_design.materials) - if(material in resources) - var/retrieved_materials = round(get_resource_cost_w_coeff(found_design, material, roundto = 0.01) * FABRICATOR_RECYCLE_MATERIAL_RATE, 1) - - if((resources[material] + retrieved_materials) >= res_max_amount) - to_chat(user, "\The [src] [material] storage is full!") - return TRUE + if(!materials_to_add.len) + return FALSE - materials_to_add[material] = retrieved_materials + for(var/material in materials_to_add) + if((resources[material] + materials_to_add[material]) >= res_max_amount) + to_chat(user, "\The [src] [material] storage is full!") + return TRUE // Every check passed, start to recycle user.visible_message("[user] starts placing \the [I] into \the [src].", "You start placing \the [I] into \the [src].") + recycling = TRUE + updateUsrDialog() + var/checks = CALLBACK(src, PROC_REF(do_after_checks), user, I) if(do_after(user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, target = src, extra_checks = checks)) @@ -663,11 +636,57 @@ add_overlay("fab-load-metal") to_chat(user, "You successfully recycle \the [I] in \the [src].") - sleep(10) + recycling = FALSE updateUsrDialog() + sleep(10) cut_overlay("fab-load-metal") + else + recycling = FALSE + updateUsrDialog() + return TRUE +/obj/machinery/mecha_part_fabricator/proc/recycling_check_contents_empty(obj/item/I) + if(istype(I, /obj/item/device/mmi/radio_enabled)) + for(var/A as anything in I.contents) + if(!istype(A, /obj/item/device/radio)) + return FALSE + return TRUE + + if(istype(I, /obj/item/weapon/gun/energy/kinetic_accelerator)) + for(var/A as anything in I.contents) + if(!istype(A, /obj/item/weapon/stock_parts/cell/crap) && !istype(A, /obj/item/ammo_casing/energy/kinetic)) + return FALSE + return TRUE + + + var/global/list/allowed_recycling_assembled_types = list( // All the types that are allowed to have contents + /obj/item/device/mmi/posibrain, // haha main reason for fabrication + /obj/item/mecha_parts/mecha_equipment/generator, + /obj/item/mecha_parts/mecha_equipment/extinguisher, + /obj/item/mecha_parts/mecha_equipment/cable_layer, + /obj/item/weapon/gun/energy/laser/cutter, + /obj/item/weapon/pickaxe/drill/jackhammer, + ) + + if(is_type_in_list(I, allowed_recycling_assembled_types)) + return TRUE + + return I.contents.len == 0 + +/obj/machinery/mecha_part_fabricator/proc/get_recycled_materials(obj/item/I) + // TODO: Maybe add mecha wreckage and mecha chassis recycling + + for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. + if((D.build_type & build_type) && istype(I, D.build_path)) + var/list/materials_to_add = list() + for(var/material in D.materials) + if(material in resources) + materials_to_add[material] = round(get_resource_cost_w_coeff(D, material, roundto = 0.01) * FABRICATOR_RECYCLE_MATERIAL_RATE, 1) + return materials_to_add + + return list() + /obj/machinery/mecha_part_fabricator/proc/do_after_checks(mob/user, obj/item/item) return user.Adjacent(src) && item.Adjacent(src) && user.Adjacent(user) From 06242369bdc22fddff13c2b63d6fca8c8c44aeb1 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 02:12:34 +0600 Subject: [PATCH 06/13] Removed smart comment about this feature's state --- code/game/mecha/mech_fabricator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index e788c8930316..f0b6ca18664b 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -661,7 +661,7 @@ var/global/list/allowed_recycling_assembled_types = list( // All the types that are allowed to have contents - /obj/item/device/mmi/posibrain, // haha main reason for fabrication + /obj/item/device/mmi/posibrain, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/extinguisher, /obj/item/mecha_parts/mecha_equipment/cable_layer, From 7df515c191614b7284a01d94bda2386c13149d5f Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 02:15:05 +0600 Subject: [PATCH 07/13] Moved my smart and highly intellectual comment as a sacrifice to please the indentation god --- code/game/mecha/mech_fabricator.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index f0b6ca18664b..ad64b694a38d 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -659,8 +659,8 @@ return FALSE return TRUE - - var/global/list/allowed_recycling_assembled_types = list( // All the types that are allowed to have contents + // All the types that are allowed to have contents + var/global/list/allowed_recycling_assembled_types = list( /obj/item/device/mmi/posibrain, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/extinguisher, From c34ec9c8987e8f5c626ad5296b53f1b36761c7b3 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 02:57:42 +0600 Subject: [PATCH 08/13] Removed 'static' global variables --- code/game/mecha/mech_fabricator.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index ad64b694a38d..42c00f09e04c 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -598,7 +598,7 @@ if(isrobot(user)) return FALSE - var/global/list/disallowed_types = list( + var/list/disallowed_types = list( /obj/item/mecha_parts/chassis, // No way to fully disassemble mecha chassis and im lazy to make a way to disassemble it... ) @@ -660,7 +660,7 @@ return TRUE // All the types that are allowed to have contents - var/global/list/allowed_recycling_assembled_types = list( + var/list/allowed_recycling_assembled_types = list( /obj/item/device/mmi/posibrain, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/extinguisher, From c61beeac7940e62a4c9467e18898d7643df67bf7 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Tue, 31 Oct 2023 12:24:24 +0600 Subject: [PATCH 09/13] Reverted accidentally removed line --- code/game/mecha/equipment/tools/medical_tools.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 74c1a22f2363..ddac308d8b58 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -265,6 +265,7 @@ return /obj/item/mecha_parts/mecha_equipment/cable_layer/detach() + chassis.events.clearEvent("onMove",event) return ..() /obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy() From c93c95da31a644429cbebfdbfa8880eb51c930b9 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Sun, 26 Nov 2023 21:50:01 +0600 Subject: [PATCH 10/13] Replaced all m_amt and g_amt with construction list --- code/defines/obj/hydro.dm | 10 +- code/defines/obj/weapon.dm | 198 ++++++++++++------ .../modes_gameplays/nuclear/pinpointer.dm | 4 +- code/game/machinery/alarm.dm | 12 +- code/game/machinery/autolathe.dm | 15 +- code/game/machinery/camera/camera_assembly.dm | 6 +- code/game/machinery/doors/airlock.dm | 2 +- .../machinery/doors/airlock_electronics.dm | 6 +- code/game/machinery/newscaster.dm | 6 +- code/game/machinery/robot_fabricator.dm | 2 +- code/game/mecha/mech_fabricator.dm | 8 +- code/game/objects/game_kit.dm | 6 +- code/game/objects/items.dm | 2 +- code/game/objects/items/ashtray.dm | 14 +- code/game/objects/items/devices/debugger.dm | 6 +- code/game/objects/items/devices/flashlight.dm | 18 +- code/game/objects/items/devices/multitool.dm | 6 +- code/game/objects/items/devices/powersink.dm | 4 +- .../items/devices/radio/electropack.dm | 6 +- .../objects/items/devices/radio/headset.dm | 6 +- .../game/objects/items/devices/radio/radio.dm | 6 +- .../devices/scanners/contraband_finder.dm | 8 +- .../objects/items/devices/scanners/gas.dm | 6 +- .../items/devices/scanners/health_analyzer.dm | 4 +- .../devices/scanners/mass_spectrometer.dm | 6 +- .../devices/scanners/occult_pinpointer.dm | 4 +- .../items/devices/scanners/occult_scanner.dm | 4 +- .../items/devices/scanners/reagent_scanner.dm | 6 +- .../items/devices/scanners/t_scanner.dm | 4 +- .../items/devices/tabletop_assistant.dm | 6 +- .../objects/items/devices/taperecorder.dm | 6 +- .../objects/items/devices/traitordevices.dm | 4 +- code/game/objects/items/stacks/rods.dm | 4 +- .../game/objects/items/stacks/sheets/glass.dm | 30 ++- .../items/stacks/sheets/sheet_types.dm | 12 +- .../objects/items/stacks/tiles/plasteel.dm | 6 +- code/game/objects/items/toys.dm | 8 +- code/game/objects/items/weapons/RCD.dm | 10 +- .../objects/items/weapons/airlock_painter.dm | 6 +- code/game/objects/items/weapons/bell.dm | 4 +- code/game/objects/items/weapons/cosmetics.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 8 +- code/game/objects/items/weapons/handcuffs.dm | 4 +- code/game/objects/items/weapons/kitchen.dm | 20 +- code/game/objects/items/weapons/makeshift.dm | 4 +- code/game/objects/items/weapons/paint.dm | 6 +- .../game/objects/items/weapons/power_cells.dm | 50 +++-- code/game/objects/items/weapons/shields.dm | 12 +- .../objects/items/weapons/storage/firstaid.dm | 6 +- .../objects/items/weapons/surgery_tools.dm | 36 ++-- .../objects/items/weapons/teleportation.dm | 8 +- code/game/objects/items/weapons/tools.dm | 48 +++-- code/game/objects/items/weapons/weaponry.dm | 4 +- code/game/objects/objs.dm | 3 +- code/modules/assembly/assembly.dm | 6 +- code/modules/assembly/igniter.dm | 6 +- code/modules/assembly/infrared.dm | 6 +- code/modules/assembly/mousetrap.dm | 4 +- code/modules/assembly/proximity.dm | 6 +- code/modules/assembly/signaler.dm | 6 +- code/modules/assembly/timer.dm | 6 +- code/modules/assembly/voice.dm | 6 +- code/modules/clothing/head/misc_special.dm | 6 +- .../spacesuits/rig/modules/utility.dm | 3 +- .../clothing/under/accessories/accessory.dm | 18 +- code/modules/economy/cardpay.dm | 6 +- code/modules/mining/mine_items.dm | 12 +- code/modules/mining/scanners.dm | 6 +- code/modules/musical_instruments/harmonica.dm | 4 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/photography.dm | 4 +- code/modules/paperwork/stamps.dm | 4 +- code/modules/power/antimatter/shielding.dm | 4 +- code/modules/power/cable.dm | 12 +- code/modules/power/lighting/bulbs.dm | 12 +- code/modules/projectiles/ammunition.dm | 4 +- .../modules/projectiles/ammunition/bullets.dm | 44 +++- code/modules/projectiles/gun.dm | 4 +- code/modules/projectiles/guns/energy/laser.dm | 4 +- code/modules/projectiles/guns/energy/stun.dm | 8 +- code/modules/projectiles/guns/projectile.dm | 4 +- code/modules/reagents/grenade_launcher.dm | 4 +- .../reagent_containers/extinguisher.dm | 12 +- .../food/drinks/drinkingglass.dm | 6 +- .../reagents/reagent_containers/glass.dm | 28 ++- .../reagents/reagent_containers/syringes.dm | 4 +- code/modules/reagents/syringe_gun.dm | 4 +- .../recycling/disposal-construction.dm | 4 +- code/modules/recycling/sortingmachinery.dm | 6 +- code/modules/research/designs.dm | 6 +- code/modules/research/destructive_analyzer.dm | 4 +- code/modules/research/experiment.dm | 10 +- code/modules/research/protolathe.dm | 4 +- code/modules/research/research.dm | 6 +- .../research/xenoarchaeology/chemistry.dm | 6 +- 95 files changed, 701 insertions(+), 306 deletions(-) diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 2dc253588f89..b90b4a843f13 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -5,8 +5,10 @@ desc = "A hand-held scanner which reports condition of the plant." icon = 'icons/obj/device.dmi' w_class = SIZE_MINUSCULE - m_amt = 200 - g_amt = 50 + construction = list( + MAT_METAL=200, + MAT_GLASS=50 + ) origin_tech = "materials=1;biotech=1" icon_state = "hydro" item_state = "plantanalyzer" @@ -1429,7 +1431,9 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - m_amt = 2550 + construction = list( + MAT_METAL=2550 + ) origin_tech = "materials=1;biotech=1" attack_verb = list("slashed", "sliced", "cut", "clawed") diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 11afae65af26..fc683f8dd3fd 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -56,7 +56,9 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - m_amt = 50 + construction = list( + MAT_METAL=50 + ) attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") /obj/item/weapon/cane/atom_init() @@ -100,7 +102,9 @@ icon = 'icons/obj/items.dmi' icon_state = "rack_parts" flags = CONDUCT - m_amt = 3750 + construction = list( + MAT_METAL=3750 + ) max_integrity = 100 resistance_flags = CAN_BE_HIT @@ -119,7 +123,9 @@ force = 5.0 throwforce = 8.0 item_state = "shard-glass" - g_amt = 3750 + construction = list( + MAT_GLASS=3750 + ) hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("stabbed", "slashed", "sliced", "cut") var/on_step_sound = 'sound/effects/glass_step.ogg' @@ -279,7 +285,9 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 20 - m_amt = 100 + construction = list( + MAT_METAL=100 + ) origin_tech = "magnets=1" /obj/item/weapon/staff @@ -343,7 +351,9 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "table_parts" - m_amt = 3750 + construction = list( + MAT_METAL=3750 + ) flags = CONDUCT attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") var/table_type = /obj/structure/table @@ -357,7 +367,9 @@ desc = "Hard table parts. Well...harder..." icon = 'icons/obj/items.dmi' icon_state = "reinf_tableparts" - m_amt = 7500 + construction = list( + MAT_METAL=7500 + ) flags = CONDUCT table_type = /obj/structure/table/reinforced debris = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) @@ -367,7 +379,9 @@ desc = "Stall table parts." icon = 'icons/obj/items.dmi' icon_state = "stall_tableparts" - m_amt = 15000 + construction = list( + MAT_METAL=15000 + ) flags = CONDUCT table_type = /obj/structure/table/reinforced/stall debris = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) @@ -414,7 +428,9 @@ var/amount = 1.0 var/laying = 0.0 var/old_lay = null - m_amt = 40 + construction = list( + MAT_METAL=40 + ) attack_verb = list("whipped", "lashed", "disciplined", "tickled") /obj/item/weapon/wire/suicide_act(mob/user) @@ -439,8 +455,10 @@ name = "power control module" icon_state = "power_mod" desc = "Heavy-duty switching circuits for power control." - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) /obj/item/weapon/module/id_auth name = "ID authentication module" @@ -480,7 +498,9 @@ throwforce = 15.0 throw_speed = 4 throw_range = 4 - m_amt = 15000 + construction = list( + MAT_METAL=15000 + ) origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") @@ -627,46 +647,58 @@ desc = "Used in the construction of computers and other devices with a interactive console." icon_state = "screen" origin_tech = "materials=1" - g_amt = 200 + construction = list( + MAT_GLASS=200 + ) /obj/item/weapon/stock_parts/capacitor name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." icon_state = "capacitor" origin_tech = "powerstorage=1" - m_amt = 150 - g_amt = 150 + construction = list( + MAT_METAL=150, + MAT_GLASS=150 + ) /obj/item/weapon/stock_parts/scanning_module name = "scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "scan_module" origin_tech = "magnets=1" - m_amt = 100 - g_amt = 120 + construction = list( + MAT_METAL=100, + MAT_GLASS=120 + ) /obj/item/weapon/stock_parts/manipulator name = "micro-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "micro_mani" origin_tech = "materials=1;programming=1" - m_amt = 100 - g_amt = 80 + construction = list( + MAT_METAL=100, + MAT_GLASS=80 + ) /obj/item/weapon/stock_parts/micro_laser name = "micro-laser" desc = "A tiny laser used in certain devices." icon_state = "micro_laser" origin_tech = "magnets=1" - m_amt = 100 - g_amt = 120 + construction = list( + MAT_METAL=100, + MAT_GLASS=120 + ) /obj/item/weapon/stock_parts/matter_bin name = "matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "matter_bin" origin_tech = "materials=1" - m_amt = 300 + construction = list( + MAT_METAL=300 + ) //Rank 2 @@ -676,8 +708,10 @@ icon_state = "adv_capacitor" origin_tech = "powerstorage=3" rating = 2 - m_amt = 250 - g_amt = 250 + construction = list( + MAT_METAL=250, + MAT_GLASS=250 + ) /obj/item/weapon/stock_parts/scanning_module/adv name = "advanced scanning module" @@ -685,8 +719,10 @@ icon_state = "adv_scan_module" origin_tech = "magnets=3" rating = 2 - m_amt = 250 - g_amt = 220 + construction = list( + MAT_METAL=250, + MAT_GLASS=220 + ) /obj/item/weapon/stock_parts/manipulator/nano name = "nano-manipulator" @@ -694,8 +730,10 @@ icon_state = "nano_mani" origin_tech = "materials=3,programming=2" rating = 2 - m_amt = 230 - g_amt = 220 + construction = list( + MAT_METAL=230, + MAT_GLASS=220 + ) /obj/item/weapon/stock_parts/micro_laser/high name = "high-power micro-laser" @@ -703,8 +741,10 @@ icon_state = "high_micro_laser" origin_tech = "magnets=3" rating = 2 - m_amt = 210 - g_amt = 220 + construction = list( + MAT_METAL=210, + MAT_GLASS=220 + ) /obj/item/weapon/stock_parts/matter_bin/adv name = "advanced matter bin" @@ -712,8 +752,10 @@ icon_state = "advanced_matter_bin" origin_tech = "materials=3" rating = 2 - m_amt = 280 - g_amt = 220 + construction = list( + MAT_METAL=280, + MAT_GLASS=220 + ) //Rating 3 @@ -723,8 +765,10 @@ icon_state = "super_capacitor" origin_tech = "powerstorage=5;materials=4" rating = 3 - m_amt = 350 - g_amt = 350 + construction = list( + MAT_METAL=350, + MAT_GLASS=350 + ) /obj/item/weapon/stock_parts/scanning_module/adv/phasic name = "phasic scanning module" @@ -732,8 +776,10 @@ icon_state = "super_scan_module" origin_tech = "magnets=5" rating = 3 - m_amt = 350 - g_amt = 320 + construction = list( + MAT_METAL=350, + MAT_GLASS=320 + ) /obj/item/weapon/stock_parts/manipulator/nano/pico name = "pico-manipulator" @@ -741,8 +787,10 @@ icon_state = "pico_mani" origin_tech = "materials=5,programming=2" rating = 3 - m_amt = 330 - g_amt = 320 + construction = list( + MAT_METAL=330, + MAT_GLASS=320 + ) /obj/item/weapon/stock_parts/micro_laser/high/ultra name = "ultra-high-power micro-laser" @@ -750,8 +798,10 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=5" rating = 3 - m_amt = 310 - g_amt = 320 + construction = list( + MAT_METAL=310, + MAT_GLASS=320 + ) /obj/item/weapon/stock_parts/matter_bin/adv/super name = "super matter bin" @@ -759,8 +809,10 @@ icon_state = "super_matter_bin" origin_tech = "materials=5" rating = 3 - m_amt = 380 - g_amt = 320 + construction = list( + MAT_METAL=380, + MAT_GLASS=320 + ) //Rating 4 @@ -770,8 +822,10 @@ icon_state = "quadratic_capacitor" origin_tech = "powerstorage=6;materials=5" rating = 4 - m_amt = 350 - g_amt = 350 + construction = list( + MAT_METAL=350, + MAT_GLASS=350 + ) /obj/item/weapon/stock_parts/scanning_module/adv/phasic/triphasic name = "triphasic scanning module" @@ -779,8 +833,10 @@ icon_state = "triphasic_scan_module" origin_tech = "magnets=6" rating = 4 - m_amt = 350 - g_amt = 320 + construction = list( + MAT_METAL=350, + MAT_GLASS=320 + ) /obj/item/weapon/stock_parts/manipulator/nano/pico/femto name = "femto-manipulator" @@ -788,7 +844,9 @@ icon_state = "femto_mani" origin_tech = "materials=6;programming=3" rating = 4 - m_amt = 330 + construction = list( + MAT_METAL=330 + ) /obj/item/weapon/stock_parts/micro_laser/high/ultra/quadultra name = "quad-ultra micro-laser" @@ -796,8 +854,10 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=6" rating = 4 - m_amt = 80 - g_amt = 220 + construction = list( + MAT_METAL=80, + MAT_GLASS=220 + ) /obj/item/weapon/stock_parts/matter_bin/adv/super/bluespace name = "bluespace matter bin" @@ -805,7 +865,9 @@ icon_state = "bluespace_matter_bin" origin_tech = "materials=6" rating = 4 - m_amt = 380 + construction = list( + MAT_METAL=380 + ) // Subspace stock parts @@ -814,54 +876,68 @@ icon_state = "subspace_ansible" desc = "A compact module capable of sensing extradimensional activity." origin_tech = "programming=3;magnets=5;materials=4;bluespace=2" - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) /obj/item/weapon/stock_parts/subspace/filter name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." origin_tech = "programming=4;magnets=2" - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) /obj/item/weapon/stock_parts/subspace/amplifier name = "subspace amplifier" icon_state = "subspace_amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) /obj/item/weapon/stock_parts/subspace/treatment name = "subspace treatment disk" icon_state = "treatment_disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." origin_tech = "programming=3;magnets=2;materials=5;bluespace=2" - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) /obj/item/weapon/stock_parts/subspace/analyzer name = "subspace wavelength analyzer" icon_state = "wavelength_analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) /obj/item/weapon/stock_parts/subspace/crystal name = "ansible crystal" icon_state = "ansible_crystal" desc = "A crystal made from pure glass used to transmit laser databursts to subspace." origin_tech = "magnets=4;materials=4;bluespace=2" - g_amt = 50 + construction = list( + MAT_GLASS=50 + ) /obj/item/weapon/stock_parts/subspace/transmitter name = "subspace transmitter" icon_state = "subspace_transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." origin_tech = "magnets=5;materials=5;bluespace=3" - m_amt = 50 + construction = list( + MAT_METAL=50 + ) /obj/item/weapon/research//Makes testing much less of a pain -Sieve name = "research" diff --git a/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm b/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm index 05f3b54353bb..a59929828323 100644 --- a/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm +++ b/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm @@ -10,7 +10,9 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 500 + construction = list( + MAT_METAL=500 + ) var/active = FALSE var/atom/target = null var/mode = SEARCH_FOR_DISK // Need here for GREAT OOP style, 0 - searching disk diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index b622fdd4d640..bc5cf38bf872 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -900,8 +900,10 @@ Just a object used in constructing air alarms icon_state = "door_electronics" desc = "Looks like a circuit. Probably is." w_class = SIZE_TINY - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) /* @@ -1248,8 +1250,10 @@ Just a object used in constructing fire alarms icon_state = "door_electronics" desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = SIZE_TINY - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) /* diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index ea9da6c3ede5..db05b1d73d17 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -46,9 +46,10 @@ recipe.name = initial(path.name) recipe.category = category_name recipe.result_type = path + var/item_construction = initial(P.construction) recipe.resources = list( - MAT_METAL = initial(P.m_amt) * amount, - MAT_GLASS = initial(P.g_amt) * amount, + MAT_METAL = (item_construction[MAT_METAL] ? item_construction[MAT_METAL] : 0) * amount, + MAT_GLASS = (item_construction[MAT_GLASS] ? item_construction[MAT_GLASS] : 0) * amount, ) return recipe @@ -316,8 +317,8 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes var/amount = 1 var/obj/item/stack/stack - var/m_amt = I.m_amt - var/g_amt = I.g_amt + var/m_amt = I.construction[MAT_METAL] ? I.construction[MAT_METAL] : 0 + var/g_amt = I.construction[MAT_GLASS] ? I.construction[MAT_GLASS] : 0 if(istype(I, /obj/item/stack)) stack = I amount = stack.get_amount() @@ -452,8 +453,10 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes stored_material[MAT_METAL] -= recipe.resources[MAT_METAL] / coeff stored_material[MAT_GLASS] -= recipe.resources[MAT_GLASS] / coeff var/obj/new_item = new recipe.result_type(T) - new_item.m_amt /= coeff - new_item.g_amt /= coeff + if(new_item.construction[MAT_METAL]) + new_item.construction[MAT_METAL] /= coeff + if(new_item.construction[MAT_GLASS]) + new_item.construction[MAT_GLASS] /= coeff if(stored_material[MAT_METAL] < 0) stored_material[MAT_METAL] = 0 if(stored_material[MAT_GLASS] < 0) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 84dfdf67c467..9fc06263b2c2 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -5,8 +5,10 @@ icon_state = "cameracase" w_class = SIZE_TINY anchored = FALSE - m_amt = 700 - g_amt = 300 + construction = list( + MAT_METAL=700, + MAT_GLASS=300 + ) // Motion, EMP-Proof, X-Ray var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/phoron, /obj/item/device/analyzer) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index d61071647102..f7e74617c168 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -569,7 +569,7 @@ var/global/list/airlock_overlays = list() if (isElectrified()) if (isitem(mover)) var/obj/item/i = mover - if (i.m_amt) + if (i.construction[MAT_METAL]) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 6f3d00fcb238..956599520d5b 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -4,8 +4,10 @@ icon = 'icons/obj/doors/door_electronics.dmi' icon_state = "door_electronics" w_class = SIZE_TINY - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) //Emagged var/broken = FALSE diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index bd8c845fb45e..890b9431eee3 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -80,8 +80,10 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that desc = "Used to build newscasters, just secure to the wall." icon_state = "newscaster" item_state = "syringe_kit" - m_amt = 25000 - g_amt = 15000 + construction = list( + MAT_METAL=25000, + MAT_GLASS=15000 + ) /obj/item/newscaster_frame/proc/try_build(turf/on_wall) if (get_dist(on_wall,usr)>1) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 331c04e5ca74..53e1ebad4269 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -23,7 +23,7 @@ if(!M.get_amount()) return while(metal_amount < 150000 && M.use(1)) - src.metal_amount += M.m_amt /*O:height * O:width * O:length * 100000.0*/ + src.metal_amount += M.construction[MAT_METAL] ? m.construction[MAT_METAL] : 0 /*O:height * O:width * O:length * 100000.0*/ count++ to_chat(user, "You insert [count] metal sheet\s into the fabricator.") diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 42c00f09e04c..612d373942d3 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -614,7 +614,7 @@ if(!materials_to_add.len) return FALSE - for(var/material in materials_to_add) + for(var/material as anything in materials_to_add) if((resources[material] + materials_to_add[material]) >= res_max_amount) to_chat(user, "\The [src] [material] storage is full!") return TRUE @@ -629,7 +629,7 @@ var/checks = CALLBACK(src, PROC_REF(do_after_checks), user, I) if(do_after(user, I.w_class * FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER, target = src, extra_checks = checks)) - for(var/material in materials_to_add) + for(var/material as anything in materials_to_add) resources[material] += materials_to_add[material] qdel(I) @@ -680,7 +680,7 @@ for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. if((D.build_type & build_type) && istype(I, D.build_path)) var/list/materials_to_add = list() - for(var/material in D.materials) + for(var/material as anything in D.materials) if(material in resources) materials_to_add[material] = round(get_resource_cost_w_coeff(D, material, roundto = 0.01) * FABRICATOR_RECYCLE_MATERIAL_RATE, 1) return materials_to_add @@ -692,7 +692,7 @@ /obj/machinery/mecha_part_fabricator/deconstruction() . = ..() - for(var/material in resources) + for(var/material as anything in resources) remove_material(material, resources[material]/MINERAL_MATERIAL_AMOUNT) /obj/machinery/mecha_part_fabricator/update_icon() diff --git a/code/game/objects/game_kit.dm b/code/game/objects/game_kit.dm index d7fabd07d3b6..a0bf3696b417 100644 --- a/code/game/objects/game_kit.dm +++ b/code/game/objects/game_kit.dm @@ -9,8 +9,10 @@ var/board_stat = null //Core string var/data = "" force = 8 - m_amt = 2000 - g_amt = 1000 + construction = list( + MAT_METAL=2000, + MAT_GLASS=1000 + ) item_state = "sheet-metal" w_class = SIZE_SMALL diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index deeda37ca1ca..2742d9e13cd8 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -998,7 +998,7 @@ if(qual_prying <= 0) return - var/chance = w_class / (qual_prying * (m_amt + 1)) + var/chance = w_class / (qual_prying * (construction[MAT_METAL] ? construction[MAT_METAL] + 1 : 1)) if(prob(chance * 100)) qdel(src) diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 13cfca7b68a7..54b6ddfb2c91 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -73,8 +73,10 @@ icon_broken = "ashtray_bork_bl" max_butts = 14 max_integrity = 48 - g_amt = 30 - m_amt = 30 + construction = list( + MAT_METAL=30, + MAT_GLASS=30 + ) empty_desc = "Cheap plastic ashtray." throwforce = 3.0 @@ -93,7 +95,9 @@ icon_broken = "ashtray_bork_br" max_butts = 10 max_integrity = 144 - m_amt = 80 + construction = list( + MAT_METAL=80 + ) empty_desc = "Massive bronze ashtray." throwforce = 10.0 @@ -112,7 +116,9 @@ icon_broken = "ashtray_bork_gl" max_butts = 12 max_integrity = 24 - g_amt = 60 + construction = list( + MAT_GLASS=60 + ) empty_desc = "Glass ashtray. Looks fragile." throwforce = 6.0 diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index d6116642c4f0..7b2be1202d97 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -15,8 +15,10 @@ throwforce = 5.0 throw_range = 15 throw_speed = 3 - m_amt = 50 - g_amt = 20 + construction = list( + MAT_METAL=50, + MAT_GLASS=20 + ) origin_tech = "magnets=1;engineering=1" var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 5261b7b9ed61..fe9ca6b9255b 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -7,8 +7,10 @@ w_class = SIZE_TINY flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - m_amt = 50 - g_amt = 20 + construction = list( + MAT_METAL=50, + MAT_GLASS=20 + ) item_action_types = list(/datum/action/item_action/hands_free/toggle_flashlight) var/on = 0 var/button_sound = 'sound/items/flashlight.ogg' // Sound when using light @@ -144,8 +146,10 @@ brightness_on = 4 w_class = SIZE_NORMAL flags = CONDUCT - m_amt = 0 - g_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) on = 1 /obj/item/device/flashlight/lamp/get_current_temperature() @@ -263,8 +267,10 @@ icon_state = "floor" //not a slime extract sprite but... something close enough! item_state = "slime" w_class = SIZE_MINUSCULE - m_amt = 0 - g_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) brightness_on = 6 on = 1 //Bio-luminesence has one setting, on. diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index d5f2cd5ab431..e001fb702665 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -17,8 +17,10 @@ throw_range = 15 throw_speed = 3 desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - m_amt = 50 - g_amt = 20 + construction = list( + MAT_METAL=50, + MAT_GLASS=20 + ) origin_tech = "magnets=1;engineering=1" var/const/buffer_limit = 16 var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 30339b69d29b..3cdbe5bf6fcf 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -20,7 +20,9 @@ throwforce = 5 throw_speed = 1 throw_range = 2 - m_amt = 750 + construction = list( + MAT_METAL=750 + ) origin_tech = "powerstorage=3;syndicate=5" var/drain_rate = 0 // amount of power to drain per tick var/power_drained = 0 // has drained this much power diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 874f985198b4..b8c121a506a5 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -7,8 +7,10 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BACK w_class = SIZE_BIG - g_amt = 2500 - m_amt = 10000 + construction = list( + MAT_METAL=10000, + MAT_GLASS=2500 + ) var/code = 2 /obj/item/device/radio/electropack/attack_hand(mob/user) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 41eff80bb6bc..461b865f7a43 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -3,8 +3,10 @@ desc = "An updated, modular intercom that fits over the head. Takes encryption keys." icon_state = "headset" item_state = "headset" - g_amt = 0 - m_amt = 75 + construction = list( + MAT_METAL=75, + MAT_GLASS=0 + ) subspace_transmission = 1 canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_FLAGS_EARS diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 07e6665873c3..93205b40d6fa 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -31,8 +31,10 @@ var/global/GLOBAL_RADIO_TYPE = 1 // radio type to use throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - g_amt = 25 - m_amt = 75 + construction = list( + MAT_METAL=75, + MAT_GLASS=25 + ) var/const/FREQ_LISTENING = 1 //FREQ_BROADCASTING = 2 diff --git a/code/game/objects/items/devices/scanners/contraband_finder.dm b/code/game/objects/items/devices/scanners/contraband_finder.dm index b64c3cfea4fa..2893bfa8382f 100644 --- a/code/game/objects/items/devices/scanners/contraband_finder.dm +++ b/code/game/objects/items/devices/scanners/contraband_finder.dm @@ -9,7 +9,9 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - m_amt = 200 + construction = list( + MAT_METAL=200 + ) origin_tech = "magnets=4;biotech=4" var/can_scan = TRUE @@ -526,7 +528,9 @@ w_class = SIZE_SMALL throw_speed = 4 throw_range = 10 - m_amt = 300 + construction = list( + MAT_METAL=300 + ) origin_tech = "magnets=5;biotech=5;programming=3" flash_danger_color = TRUE diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index 62dce741a797..702b57864afd 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -17,8 +17,10 @@ ADD_TO_GLOBAL_LIST(/obj/item/device/analyzer, geiger_items_list) throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + construction = list( + MAT_METAL=30, + MAT_GLASS=20 + ) origin_tech = "magnets=1;engineering=1" var/status diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index b213d1a0fd7f..9580c3e94205 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -9,7 +9,9 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - m_amt = 200 + construction = list( + MAT_METAL=200 + ) origin_tech = "magnets=1;biotech=1" var/mode = TRUE var/output_to_chat = TRUE diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index 7e8e03297218..8f7b24f47396 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -9,8 +9,10 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + construction = list( + MAT_METAL=30, + MAT_GLASS=20 + ) origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 diff --git a/code/game/objects/items/devices/scanners/occult_pinpointer.dm b/code/game/objects/items/devices/scanners/occult_pinpointer.dm index f9ffb68d3f2f..74c49fedd751 100644 --- a/code/game/objects/items/devices/scanners/occult_pinpointer.dm +++ b/code/game/objects/items/devices/scanners/occult_pinpointer.dm @@ -8,7 +8,9 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 500 + construction = list( + MAT_METAL=500 + ) var/target = null var/target_type = /obj/item/weapon/reagent_containers/food/snacks/ectoplasm var/active = FALSE diff --git a/code/game/objects/items/devices/scanners/occult_scanner.dm b/code/game/objects/items/devices/scanners/occult_scanner.dm index dccb4b14570b..90d34ce1a074 100644 --- a/code/game/objects/items/devices/scanners/occult_scanner.dm +++ b/code/game/objects/items/devices/scanners/occult_scanner.dm @@ -8,7 +8,9 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 500 + construction = list( + MAT_METAL=500 + ) var/scanned_type = /obj/item/weapon/reagent_containers/food/snacks/ectoplasm /obj/item/device/occult_scanner/attack_self(mob/user) diff --git a/code/game/objects/items/devices/scanners/reagent_scanner.dm b/code/game/objects/items/devices/scanners/reagent_scanner.dm index 29f9cc7007d7..ad590eea676c 100644 --- a/code/game/objects/items/devices/scanners/reagent_scanner.dm +++ b/code/game/objects/items/devices/scanners/reagent_scanner.dm @@ -9,8 +9,10 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + construction = list( + MAT_METAL=30, + MAT_GLASS=20 + ) origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm index ac23c4b60e08..f1681f147b4d 100644 --- a/code/game/objects/items/devices/scanners/t_scanner.dm +++ b/code/game/objects/items/devices/scanners/t_scanner.dm @@ -5,7 +5,9 @@ slot_flags = SLOT_FLAGS_BELT w_class = SIZE_TINY item_state = "electronic" - m_amt = 150 + construction = list( + MAT_METAL=150 + ) origin_tech = "magnets=1;engineering=1" var/on = FALSE diff --git a/code/game/objects/items/devices/tabletop_assistant.dm b/code/game/objects/items/devices/tabletop_assistant.dm index 6895af0a58bb..e35564d5e5ad 100644 --- a/code/game/objects/items/devices/tabletop_assistant.dm +++ b/code/game/objects/items/devices/tabletop_assistant.dm @@ -22,8 +22,10 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + construction = list( + MAT_METAL=30, + MAT_GLASS=20 + ) origin_tech = "magnets=2;engineering=2" var/data = "" // Is used for UI interaction. var/report_time = 0 // So people can't spam with papers. diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index a1f7fd8faa37..b129c8f7a2a5 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -5,8 +5,10 @@ icon_state = "taperecorderidle" item_state = "analyzer" w_class = SIZE_TINY - m_amt = 60 - g_amt = 30 + construction = list( + MAT_METAL=60, + MAT_GLASS=30 + ) var/emagged = FALSE var/recording = FALSE var/playing = FALSE diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index ba6dc1c82b3f..966ffcb4a655 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -69,7 +69,9 @@ effective or pretty fucking useless. w_class = SIZE_TINY throw_speed = 3 throw_range = 5 - m_amt = 10000 + construction = list( + MAT_METAL=10000 + ) origin_tech = "magnets=3;bluespace=4;syndicate=2" COOLDOWN_DECLARE(announce) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 4de47169979f..cc58f1614d0d 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -9,7 +9,9 @@ throwforce = 5.0 throw_speed = 3 throw_range = 20 - m_amt = 1875 + construction = list( + MAT_METAL=1875 + ) max_amount = 60 usesound = 'sound/weapons/Genhit.ogg' attack_verb = list("hit", "bludgeoned", "whacked") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 7d90eb8ff956..b09aa92d16f3 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -15,7 +15,9 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - g_amt = 3750 + construction = list( + MAT_GLASS=3750 + ) origin_tech = "materials=1" var/created_window = /obj/structure/window/thin required_skills = list(/datum/skill/construction = SKILL_LEVEL_NOVICE) @@ -25,7 +27,9 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - g_amt = 0 + construction = list( + MAT_GLASS=0 + ) created_window = /obj/structure/window/thin /obj/item/stack/sheet/glass/attack_self(mob/user) @@ -167,8 +171,10 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - g_amt = 3750 - m_amt = 1875 + construction = list( + MAT_METAL=1875, + MAT_GLASS=3750 + ) origin_tech = "materials=2" required_skills = list(/datum/skill/construction = SKILL_LEVEL_TRAINED) @@ -177,8 +183,10 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - g_amt = 0 - m_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) /obj/item/stack/sheet/rglass/attack_self(mob/user) construct_window(user) @@ -281,7 +289,9 @@ desc = "A very strong and very resistant sheet of a phoron-glass alloy." singular_name = "phoron glass sheet" icon_state = "sheet-phoronglass" - g_amt = 7500 + construction = list( + MAT_GLASS=7500 + ) origin_tech = "materials=3;phorontech=2" created_window = /obj/structure/window/thin/phoron required_skills = list(/datum/skill/construction = SKILL_LEVEL_PRO) @@ -297,8 +307,10 @@ desc = "Phoron glass which seems to have rods or something stuck in them." singular_name = "reinforced phoron glass sheet" icon_state = "sheet-phoronrglass" - g_amt = 7500 - m_amt = 1875 + construction = list( + MAT_METAL=1875, + MAT_GLASS=7500 + ) origin_tech = "materials=4;phorontech=2" created_window = /obj/structure/window/thin/reinforced/phoron required_skills = list(/datum/skill/construction = SKILL_LEVEL_MASTER) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c0727b52d302..d27125fa5a75 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -97,7 +97,9 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( singular_name = "metal sheet" icon_state = "sheet-metal" hitsound = list('sound/items/trayhit2.ogg') - m_amt = 3750 + construction = list( + MAT_METAL=3750 + ) throwforce = 5.0 flags = CONDUCT origin_tech = "materials=1" @@ -107,7 +109,9 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( desc = "Sheets made out off metal. It has been dubbed Metal Sheets." singular_name = "metal sheet" icon_state = "sheet-metal" - m_amt = 0 + construction = list( + MAT_METAL=0 + ) throwforce = 5.0 flags = CONDUCT @@ -129,7 +133,9 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ desc = "This sheet is an alloy of steel and platinum." icon_state = "sheet-plasteel" item_state = "sheet-metal" - m_amt = 7500 + construction = list( + MAT_METAL=7500 + ) throwforce = 7.0 flags = CONDUCT origin_tech = "materials=2" diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm index 5076f2ded074..791e6d43ae6e 100644 --- a/code/game/objects/items/stacks/tiles/plasteel.dm +++ b/code/game/objects/items/stacks/tiles/plasteel.dm @@ -4,7 +4,9 @@ desc = "Those could not work as a pretty decent throwing weapon." w_class = SIZE_SMALL force = 6.0 - m_amt = 937.5 + construction = list( + MAT_METAL=937.5 // wtf + ) throwforce = 5.0 throw_speed = 3 throw_range = 3 @@ -12,7 +14,7 @@ max_amount = 60 turf_type = /turf/simulated/floor - + /obj/item/stack/tile/plasteel/atom_init() . = ..() diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7e083f6268e4..45bb8d8d2c26 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -279,7 +279,9 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BELT w_class = SIZE_SMALL - m_amt = 3250 + construction = list( + MAT_METAL=3250 + ) attack_verb = list("struck", "pistol whipped", "hit", "bashed") var/bullets = 7.0 @@ -335,7 +337,9 @@ icon_state = "357-7" flags = CONDUCT w_class = SIZE_MINUSCULE - m_amt = 500 + construction = list( + MAT_METAL=500 + ) var/amount_left = 7.0 /obj/item/toy/ammo/gun/update_icon() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 5528f6883aed..6573cce8027f 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -16,7 +16,9 @@ RCD throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - m_amt = 50000 + construction = list( + MAT_METAL=50000 + ) origin_tech = "engineering=4;materials=2" var/datum/effect/effect/system/spark_spread/spark_system var/matter = 0 @@ -228,6 +230,8 @@ RCD density = FALSE anchored = FALSE origin_tech = "materials=2" - m_amt = 30000 - g_amt = 15000 + construction = list( + MAT_METAL=30000, + MAT_GLASS=15000 + ) w_class = SIZE_TINY diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 679e817eced0..16ba8010783e 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -6,8 +6,10 @@ w_class = SIZE_SMALL - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) origin_tech = "engineering=1" flags = CONDUCT diff --git a/code/game/objects/items/weapons/bell.dm b/code/game/objects/items/weapons/bell.dm index 39af4f6f5ede..f423399ca225 100644 --- a/code/game/objects/items/weapons/bell.dm +++ b/code/game/objects/items/weapons/bell.dm @@ -7,7 +7,9 @@ icon_state = "bell" flags = NOBLUDGEON hitsound = list('sound/items/oneding.ogg') - m_amt = 75 + construction = list( + MAT_METAL=75 + ) var/next_ring = 0 /obj/item/weapon/bell/attack_hand(mob/user) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index d003c74b55a8..8a43ff827604 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -202,7 +202,9 @@ throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - m_amt = 80 + construction = list( + MAT_METAL=80 + ) origin_tech = "materials=1;engineering=1" attack_verb = list("cut", "stabbed", "chipped") sharp = 1 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index eacf27376b71..b40c396a15e8 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -10,7 +10,9 @@ throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - m_amt = 500 + construction = list( + MAT_METAL=500 + ) origin_tech = "combat=1;phorontech=1" var/status = 0 var/throw_amount = 1 // If player turns it up higher, it may be a worldfire. @@ -221,7 +223,9 @@ throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - m_amt = 500 + construction = list( + MAT_METAL=500 + ) origin_tech = "combat=2;phorontech=1" var/status = 0 var/throw_amount = 25 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index a1decbd6f3b8..32b6ed2c2dbf 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -10,7 +10,9 @@ w_class = SIZE_TINY throw_speed = 2 throw_range = 5 - m_amt = 500 + construction = list( + MAT_METAL=500 + ) origin_tech = "materials=1" var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index e0f1a6aa0338..6ce0f95cc994 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -70,7 +70,9 @@ icon_state = "spoon" attack_verb = list("attacked", "poked") overlay_food_string = "food_spoon" - m_amt = 250 + construction = list( + MAT_METAL=250 + ) /obj/item/weapon/kitchen/utensil/pspoon name = "plastic spoon" @@ -89,7 +91,9 @@ hitsound = list('sound/items/tools/screwdriver-stab.ogg') icon_state = "fork" overlay_food_string = "food_fork" - m_amt = 300 + construction = list( + MAT_METAL=300 + ) /obj/item/weapon/kitchen/utensil/fork/afterattack(atom/target, mob/user, proximity, params) if(istype(target,/obj/item/weapon/reagent_containers/food/snacks)) return // fork is not only for cleanning @@ -144,7 +148,9 @@ throwforce = 6.0 throw_speed = 3 throw_range = 6 - m_amt = 12000 + construction = list( + MAT_METAL=12000 + ) origin_tech = "materials=1" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") qualities = list( @@ -231,7 +237,9 @@ throwforce = 8.0 throw_speed = 3 throw_range = 6 - m_amt = 12000 + construction = list( + MAT_METAL=12000 + ) sweep_step = 2 /* @@ -291,7 +299,9 @@ throw_range = 5 w_class = SIZE_SMALL flags = CONDUCT - m_amt = 3000 + construction = list( + MAT_METAL=3000 + ) max_w_class = SIZE_SMALL opened = TRUE max_storage_space = 18 diff --git a/code/game/objects/items/weapons/makeshift.dm b/code/game/objects/items/weapons/makeshift.dm index 4a1d22c8a7c4..1771239d550f 100644 --- a/code/game/objects/items/weapons/makeshift.dm +++ b/code/game/objects/items/weapons/makeshift.dm @@ -230,7 +230,9 @@ force = 9 throwforce = 10 w_class = SIZE_SMALL - m_amt = 1875 + construction = list( + MAT_METAL=1875 + ) attack_verb = list("hit", "bludgeoned", "whacked", "bonked") /obj/item/weapon/noose diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 5ba7c6e92a4e..92644e60a441 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -8,8 +8,10 @@ var/global/list/cached_icons = list() icon = 'icons/obj/items.dmi' icon_state = "paint_neutral" item_state = "paintcan" - m_amt = 200 - g_amt = 0 + construction = list( + MAT_METAL=200, + MAT_GLASS=0 + ) w_class = SIZE_SMALL amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,50,70) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index fdf2e5873f1a..e5369c982c4b 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -14,8 +14,10 @@ var/charge = 0 var/maxcharge = 1000 var/init_full = TRUE // initialize charge with maxcharge - m_amt = 700 - g_amt = 50 + construction = list( + MAT_METAL=700, + MAT_GLASS=50 + ) var/rigged = 0 // true if rigged to explode var/minor_fault = 0 //If not 100% reliable, it will build up faults. @@ -40,14 +42,18 @@ origin_tech = "powerstorage=1" maxcharge = 500 init_full = FALSE - g_amt = 40 + construction = list( + MAT_GLASS=40 + ) rating = 2 /obj/item/weapon/stock_parts/cell/secborg name = "security borg rechargable D battery" origin_tech = "powerstorage=1" maxcharge = 600 //600 max charge / 100 charge per shot = six shots - g_amt = 40 + construction = list( + MAT_GLASS=40 + ) rating = 2.5 /obj/item/weapon/stock_parts/cell/secborg/empty @@ -58,14 +64,18 @@ desc = "A special power cell designed for heavy-duty use in area power controllers." origin_tech = "powerstorage=1" maxcharge = 500 - g_amt = 40 + construction = list( + MAT_GLASS=40 + ) /obj/item/weapon/stock_parts/cell/high name = "high-capacity power cell" origin_tech = "powerstorage=2" icon_state = "hcell" maxcharge = 10000 - g_amt = 60 + construction = list( + MAT_GLASS=60 + ) rating = 3 /obj/item/weapon/stock_parts/cell/high/empty @@ -76,7 +86,9 @@ origin_tech = "powerstorage=5" icon_state = "scell" maxcharge = 20000 - g_amt = 70 + construction = list( + MAT_GLASS=70 + ) rating = 4 /obj/item/weapon/stock_parts/cell/super/empty @@ -87,7 +99,9 @@ origin_tech = "powerstorage=6" icon_state = "hpcell" maxcharge = 30000 - g_amt = 80 + construction = list( + MAT_GLASS=80 + ) rating = 5 /obj/item/weapon/stock_parts/cell/hyper/empty @@ -98,7 +112,9 @@ origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 - g_amt = 80 + construction = list( + MAT_GLASS=80 + ) rating = 6 //chargerate = 4000 @@ -110,7 +126,9 @@ icon_state = "icell" origin_tech = null maxcharge = 30000 - g_amt = 80 + construction = list( + MAT_GLASS=80 + ) rating = 6 /obj/item/weapon/stock_parts/cell/infinite/use() @@ -124,8 +142,10 @@ icon_state = "potato_cell" //"potato_battery" charge = 100 maxcharge = 300 - m_amt = 0 - g_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) minor_fault = 1 rating = 1 @@ -136,6 +156,8 @@ icon = 'icons/mob/slimes.dmi' icon_state = "yellow slime extract" maxcharge = 10000 - m_amt = 0 - g_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) rating = 3 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index f2bdbcfec469..42c69b3b6790 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -152,8 +152,10 @@ throw_speed = 1 throw_range = 4 w_class = SIZE_NORMAL - g_amt = 7500 - m_amt = 1000 + construction = list( + MAT_METAL=1000, + MAT_GLASS=7500 + ) origin_tech = "materials=2" attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time @@ -322,8 +324,10 @@ throw_range = 5 block_chance = 45 w_class = SIZE_SMALL - m_amt = 1000 - g_amt = 0 + construction = list( + MAT_METAL=1000, + MAT_GLASS=0 + ) origin_tech = "materials=2" attack_verb = list("shoved", "bashed") hitsound = list('sound/weapons/wood_shield_hit.ogg') diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index a6901af40c03..b1ad65581d0a 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -122,8 +122,10 @@ use_to_pickup = 1 var/wrapper_color var/label - m_amt = 50 - g_amt = 50 + construction = list( + MAT_METAL=50, + MAT_GLASS=50 + ) /obj/item/weapon/storage/pill_bottle/attackby(obj/item/weapon/W, mob/user) if(!istype(W)) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index dcc9eb3422f4..ae8cd5b5747e 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -16,8 +16,10 @@ desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" - m_amt = 10000 - g_amt = 5000 + construction = list( + MAT_METAL=10000, + MAT_GLASS=5000 + ) flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -31,8 +33,10 @@ desc = "You think you have seen this before." icon = 'icons/obj/surgery.dmi' icon_state = "hemostat" - m_amt = 5000 - g_amt = 2500 + construction = list( + MAT_METAL=5000, + MAT_GLASS=2500 + ) flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -47,8 +51,10 @@ desc = "This stops bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "cautery" - m_amt = 5000 - g_amt = 2500 + construction = list( + MAT_METAL=5000, + MAT_GLASS=2500 + ) flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -65,8 +71,10 @@ icon = 'icons/obj/surgery.dmi' icon_state = "drill" hitsound = list('sound/weapons/circsawhit.ogg') - m_amt = 15000 - g_amt = 10000 + construction = list( + MAT_METAL=15000, + MAT_GLASS=10000 + ) flags = CONDUCT force = 15.0 w_class = SIZE_TINY @@ -97,8 +105,10 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - m_amt = 10000 - g_amt = 5000 + construction = list( + MAT_METAL=10000, + MAT_GLASS=5000 + ) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") required_skills = list(/datum/skill/surgery = SKILL_LEVEL_TRAINED) @@ -162,8 +172,10 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - m_amt = 20000 - g_amt = 10000 + construction = list( + MAT_METAL=20000, + MAT_GLASS=10000 + ) origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") sharp = 1 diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 50c4003e352a..0ad5fe654396 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -21,7 +21,9 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - m_amt = 400 + construction = list( + MAT_METAL=400 + ) origin_tech = "magnets=1" /obj/item/weapon/locator/attack_self(mob/user) @@ -133,7 +135,9 @@ Frequency: w_class = SIZE_TINY throw_speed = 3 throw_range = 5 - m_amt = 10000 + construction = list( + MAT_METAL=10000 + ) origin_tech = "magnets=1;bluespace=3" /obj/item/weapon/hand_tele/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index cc6f34175861..ff9a24bed9a6 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -24,7 +24,9 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - m_amt = 150 + construction = list( + MAT_METAL=150 + ) origin_tech = "materials=1;engineering=1" hitsound = list('sound/items/tools/crowbar-hit.ogg') attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -59,8 +61,10 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - g_amt = 0 - m_amt = 75 + construction = list( + MAT_METAL=75, + MAT_GLASS=0 + ) hitsound = list('sound/items/tools/screwdriver-stab.ogg') attack_verb = list("stabbed") usesound = 'sound/items/Screwdriver.ogg' @@ -103,7 +107,9 @@ throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - m_amt = 80 + construction = list( + MAT_METAL=80 + ) origin_tech = "materials=1;engineering=1" hitsound = list('sound/items/tools/wirecutters-pinch.ogg') attack_verb = list("pinched", "nipped") @@ -159,8 +165,12 @@ QUALITY_WELDING = 1 ) - m_amt = 70 // Cost to make in the autolathe - g_amt = 30 + construction = list( + MAT_METAL=70 + ) // Cost to make in the autolathe + construction = list( + MAT_GLASS=30 + ) origin_tech = "engineering=1" // R&D tech level @@ -447,8 +457,10 @@ icon = 'icons/obj/tools.dmi' icon_state = "indwelder" max_fuel = 40 - m_amt = 70 - g_amt = 60 + construction = list( + MAT_METAL=70, + MAT_GLASS=60 + ) origin_tech = "engineering=2" /obj/item/weapon/weldingtool/hugetank @@ -457,8 +469,10 @@ icon_state = "hugewelder" max_fuel = 80 w_class = SIZE_SMALL - m_amt = 70 - g_amt = 120 + construction = list( + MAT_METAL=70, + MAT_GLASS=120 + ) origin_tech = "engineering=3" /obj/item/weapon/weldingtool/experimental @@ -467,8 +481,10 @@ icon_state = "expwelder" max_fuel = 40 w_class = SIZE_SMALL - m_amt = 70 - g_amt = 120 + construction = list( + MAT_METAL=70, + MAT_GLASS=120 + ) toolspeed = 0.5 origin_tech = "materials=4;engineering=4;bluespace=2;phorontech=3" var/next_refuel_tick = 0 @@ -502,7 +518,9 @@ w_class = SIZE_SMALL - m_amt = 50 + construction = list( + MAT_METAL=50 + ) origin_tech = "engineering=1" hitsound = list('sound/items/tools/crowbar-hit.ogg') attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") @@ -522,7 +540,9 @@ throwforce = 5.0 w_class = SIZE_TINY - m_amt = 15 + construction = list( + MAT_METAL=15 + ) qualities = list( QUALITY_PRYING = 0.7 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e6a5af0df47c..02135dc8662a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,7 +89,9 @@ edge = FALSE throw_speed = 3 throw_range = 6 - m_amt = 12000 + construction = list( + MAT_METAL=12000 + ) origin_tech = "materials=1" hitsound = list('sound/weapons/Genhit.ogg') attack_verb = list("stubbed", "poked") diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 50d2fb181260..102c33dfe561 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,7 +1,6 @@ /obj //var/datum/module/mod //not used - var/m_amt = 0 // metal - var/g_amt = 0 // glass + var/construction = list() // Resources used for construction var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index bf2a31761bb9..147eea6faeaf 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -5,8 +5,10 @@ icon_state = "" flags = CONDUCT w_class = SIZE_TINY - m_amt = 100 - g_amt = 0 + construction = list( + MAT_METAL=100, + MAT_GLASS=0 + ) throwforce = 2 throw_speed = 3 throw_range = 10 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 25b69e8b6fbd..8d25c63d107c 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -2,8 +2,10 @@ name = "igniter" desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" - m_amt = 500 - g_amt = 50 + construction = list( + MAT_METAL=500, + MAT_GLASS=50 + ) origin_tech = "magnets=1" secured = 1 diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 4a7cdd530e56..238e6400e539 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -2,8 +2,10 @@ name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" - m_amt = 1000 - g_amt = 500 + construction = list( + MAT_METAL=1000, + MAT_GLASS=500 + ) origin_tech = "magnets=2" wires = WIRE_PULSE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index e528c6bc9cb3..4a43654fa3ed 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -2,7 +2,9 @@ name = "mousetrap" desc = "A handy little spring-loaded trap for catching pesty rodents." icon_state = "mousetrap" - m_amt = 100 + construction = list( + MAT_METAL=100 + ) origin_tech = "combat=1" var/armed = 0 diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 3b00ae279450..735b995922f8 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,8 +2,10 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - m_amt = 800 - g_amt = 200 + construction = list( + MAT_METAL=800, + MAT_GLASS=200 + ) origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index bbc5f2b293d4..b1111cb4d6d4 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -3,8 +3,10 @@ desc = "Used to remotely activate devices." icon_state = "signaller" item_state = "signaler" - m_amt = 1000 - g_amt = 200 + construction = list( + MAT_METAL=1000, + MAT_GLASS=200 + ) origin_tech = "magnets=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 0f8c9f62e87b..b7e3898f94ad 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,8 +2,10 @@ name = "timer" desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" - m_amt = 500 - g_amt = 50 + construction = list( + MAT_METAL=500, + MAT_GLASS=50 + ) origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index b43ba4de14d2..12534d281cec 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -5,8 +5,10 @@ flags = HEAR_TALK materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" - m_amt = 500 - g_amt = 50 + construction = list( + MAT_METAL=500, + MAT_GLASS=50 + ) var/listening = 0 var/recorded = "" //the activation message diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index a41e1a2ed869..f3d9cbbc8fcd 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -17,8 +17,10 @@ icon_state = "welding" flags = (HEADCOVERSEYES | HEADCOVERSMOUTH) item_state = "welding" - m_amt = 3000 - g_amt = 1000 + construction = list( + MAT_METAL=3000, + MAT_GLASS=1000 + ) var/up = 0 flash_protection = FLASHES_FULL_PROTECTION flash_protection_slots = list(SLOT_HEAD) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 1c46bb5923f2..f573fcd2e8eb 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -124,8 +124,7 @@ device.canremove = FALSE // so we can't place mounted devices on tables/racks device.flags |= ABSTRACT // so we can't put mounted devices into backpacks device.origin_tech = null // so we can't put them into destructive analyzer - device.m_amt = 0 // so we can't put them into autolathe - device.g_amt = 0 + device.construction = list() // so we can't put them into autolathe /obj/item/rig_module/device/engage(atom/target) if(!isturf(holder.wearer.loc) && target) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 83377aa6eafb..d1fc317d9e96 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -75,8 +75,10 @@ desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" layer_priority = 0.1 - m_amt = 150 - g_amt = 20 + construction = list( + MAT_METAL=150, + MAT_GLASS=20 + ) /obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user) if(ishuman(M) && isliving(user)) @@ -166,7 +168,9 @@ desc = "A bronze medal." icon_state = "bronze" layer_priority = 0.1 - m_amt = 1000 + construction = list( + MAT_METAL=1000 + ) var/medaltype = "medal" //Sprite used for medalbox var/commended = FALSE @@ -226,7 +230,9 @@ desc = "A silver medal." icon_state = "silver" medaltype = "medal-silver" - m_amt = 0 + construction = list( + MAT_METAL=0 + ) /obj/item/clothing/accessory/medal/silver/valor name = "medal of valor" @@ -255,7 +261,9 @@ desc = "A prestigious golden medal." icon_state = "gold" medaltype = "medal-gold" - m_amt = 0 + construction = list( + MAT_METAL=0 + ) unacidable = TRUE /obj/item/clothing/accessory/medal/gold/captain diff --git a/code/modules/economy/cardpay.dm b/code/modules/economy/cardpay.dm index 13c235cc7c1d..19bba6ad45f4 100644 --- a/code/modules/economy/cardpay.dm +++ b/code/modules/economy/cardpay.dm @@ -10,8 +10,10 @@ icon_state = "card-pay-idle" slot_flags = SLOT_FLAGS_BELT - m_amt = 7000 - g_amt = 2000 + construction = list( + MAT_METAL=7000, + MAT_GLASS=2000 + ) var/linked_account = 0 var/pay_amount = 0 diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 2ba6b920bd87..9906531bf5a2 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -170,7 +170,9 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station throwforce = 4.0 item_state = "pickaxe" w_class = SIZE_NORMAL - m_amt = 3750 //one sheet, but where can you make them? + construction = list( + MAT_METAL=3750 + ) //one sheet, but where can you make them? toolspeed = 1 //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = "materials=1;engineering=1" attack_verb = list("hit", "pierced", "sliced", "attacked") @@ -263,7 +265,9 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station throwforce = 4.0 item_state = "shovel" w_class = SIZE_SMALL - m_amt = 50 + construction = list( + MAT_METAL=50 + ) origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") usesound = 'sound/effects/shovel_digging.ogg' @@ -314,7 +318,9 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station force = 15.0 throwforce = 4.0 w_class = SIZE_NORMAL - m_amt = 3750 + construction = list( + MAT_METAL=3750 + ) attack_verb = list("hit", "pierced", "sliced", "attacked") usesound = 'sound/items/drill.ogg' hitsound = list('sound/items/drill_hit.ogg') diff --git a/code/modules/mining/scanners.dm b/code/modules/mining/scanners.dm index c7c891d2a78c..23986e6d3d5f 100644 --- a/code/modules/mining/scanners.dm +++ b/code/modules/mining/scanners.dm @@ -9,8 +9,10 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - m_amt = 30 - g_amt = 20 + construction = list( + MAT_METAL=30, + MAT_GLASS=20 + ) origin_tech = "magnets=1;engineering=2" /obj/item/device/geoscanner/afterattack(atom/target, mob/user, proximity, params) diff --git a/code/modules/musical_instruments/harmonica.dm b/code/modules/musical_instruments/harmonica.dm index 1dd9f0d32858..243f19fa0ad2 100644 --- a/code/modules/musical_instruments/harmonica.dm +++ b/code/modules/musical_instruments/harmonica.dm @@ -6,7 +6,9 @@ item_state = "harmonica" force = 5 w_class = SIZE_TINY - m_amt = 500 + construction = list( + MAT_METAL=500 + ) var/channel var/cooldown = 70 var/last_played = 0 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 5ee5e6be313b..964e5b54532a 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -20,7 +20,9 @@ w_class = SIZE_MINUSCULE throw_speed = 4 throw_range = 15 - m_amt = 10 + construction = list( + MAT_METAL=10 + ) var/colour = "black" // can we make it HEX? var/click_cooldown = 0 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 671fa60c07ed..ef2c81bf1b7a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -298,7 +298,9 @@ w_class = SIZE_TINY flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) var/flash_enabled = TRUE var/pictures_max = 10 var/pictures_left = 10 diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index e4de7e9a719d..158e7b9cc290 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -13,7 +13,9 @@ w_class = SIZE_MINUSCULE throw_speed = 4 throw_range = 15 - m_amt = 60 + construction = list( + MAT_METAL=60 + ) hitsound = list('sound/effects/stamp.ogg') //taken from Baystation build var/dye_color = DYE_CARGO attack_verb = list("stamped") diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index 2a6995351c2c..d64e89211927 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -210,7 +210,9 @@ throwforce = 5 throw_speed = 1 throw_range = 2 - m_amt = 100 + construction = list( + MAT_METAL=100 + ) /obj/item/device/am_shielding_container/attackby(obj/item/I, mob/user, params) if(ispulsing(I) && istype(loc, /turf)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 8e88a0af8d1e..33bb2fe62ee8 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -436,8 +436,10 @@ By design, d1 is the smallest direction and d2 is the highest w_class = SIZE_TINY throw_speed = 2 throw_range = 5 - m_amt = 50 - g_amt = 20 + construction = list( + MAT_METAL=50, + MAT_GLASS=20 + ) flags = CONDUCT slot_flags = SLOT_FLAGS_BELT item_state = "coil" @@ -449,8 +451,10 @@ By design, d1 is the smallest direction and d2 is the highest /obj/item/stack/cable_coil/cyborg max_amount = 90 - m_amt = 0 - g_amt = 0 + construction = list( + MAT_METAL=0, + MAT_GLASS=0 + ) /obj/item/stack/cable_coil/atom_init(mapload, new_amount = null, param_color = null) . = ..() diff --git a/code/modules/power/lighting/bulbs.dm b/code/modules/power/lighting/bulbs.dm index e16627e51dbf..8aa8f7434478 100644 --- a/code/modules/power/lighting/bulbs.dm +++ b/code/modules/power/lighting/bulbs.dm @@ -10,7 +10,9 @@ throwforce = 5 w_class = SIZE_TINY - m_amt = 50 // in case of mats change tweak lightreplacer + construction = list( + MAT_METAL=50 + ) // in case of mats change tweak lightreplacer var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/fitting = LAMP_FITTING_TUBE @@ -25,7 +27,9 @@ desc = "A replacement light tube." icon_state = "ltube" item_state = "c_tube" - g_amt = 100 + construction = list( + MAT_GLASS=100 + ) fitting = LAMP_FITTING_TUBE light_mode = /datum/light_mode/default @@ -46,7 +50,9 @@ desc = "A replacement light bulb." icon_state = "lbulb" item_state = "contvapour" - g_amt = 100 + construction = list( + MAT_GLASS=100 + ) fitting = LAMP_FITTING_BULB light_mode = /datum/light_mode/default/bulb diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index aca49733512c..fb80526eea11 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -83,7 +83,9 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BELT item_state = "syringe_kit" - m_amt = 500 + construction = list( + MAT_METAL=500 + ) throwforce = 2 w_class = SIZE_TINY throw_speed = 4 diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 77bae69382c4..172be5df31f1 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -4,7 +4,9 @@ desc = "Патрон от пули калибра .357." caliber = "357" projectile_type = /obj/item/projectile/bullet/revbullet - m_amt = 1000 + construction = list( + MAT_METAL=1000 + ) /obj/item/ammo_casing/a50 desc = "Патрон от пули калибра .50АЕ." @@ -19,26 +21,34 @@ icon_state = "casing_38_rubber" caliber = "38" projectile_type = /obj/item/projectile/bullet/weakbullet - m_amt = 200 + construction = list( + MAT_METAL=200 + ) /obj/item/ammo_casing/c9mm desc = "Патрон от пули калибра 9мм." caliber = "9mm" projectile_type = /obj/item/projectile/bullet/midbullet2 - m_amt = 300 + construction = list( + MAT_METAL=300 + ) /obj/item/ammo_casing/c9mmr desc = "Патрон от резиновой пули калибра 9мм." icon_state = "casing_rubber" caliber = "9mm" projectile_type = /obj/item/projectile/bullet/weakbullet/rubber - m_amt = 100 + construction = list( + MAT_METAL=100 + ) /obj/item/ammo_casing/c45 desc = "Патрон от пули 45-го калибра." caliber = ".45" projectile_type = /obj/item/projectile/bullet/smg - m_amt = 400 + construction = list( + MAT_METAL=400 + ) /obj/item/ammo_casing/c45hp desc = "Патрон от пули калибра .45 HP." @@ -59,7 +69,9 @@ desc = "Патрон от резиновой пули 45-го калибра." caliber = ".45" projectile_type = /obj/item/projectile/bullet/weakbullet/rubber - m_amt = 200 + construction = list( + MAT_METAL=200 + ) /obj/item/ammo_casing/a12mm desc = "Патрон от пули калибра 12мм." @@ -72,7 +84,9 @@ icon_state = "blshell" caliber = "shotgun" projectile_type = /obj/item/projectile/bullet/slug - m_amt = 3750 + construction = list( + MAT_METAL=3750 + ) /obj/item/ammo_casing/shotgun/buckshot name = "buckshot shell" @@ -86,7 +100,9 @@ desc = "Патрон от 12-го калибра типа травматический." icon_state = "bshell" projectile_type = /obj/item/projectile/bullet/weakbullet/beanbag - m_amt = 300 + construction = list( + MAT_METAL=300 + ) /obj/item/ammo_casing/shotgun/stunshot name = "stun shell" @@ -94,7 +110,9 @@ icon_state = "stunshell" projectile_type = /obj/item/projectile/bullet/stunshot pellets = 5 - m_amt = 2500 + construction = list( + MAT_METAL=2500 + ) /obj/item/ammo_casing/shotgun/incendiary name = "incendiary shell" @@ -108,7 +126,9 @@ desc = "Патрон от 12-го калибра типа дротик." icon_state = "cshell" projectile_type = /obj/item/projectile/energy/dart - m_amt = 2500 + construction = list( + MAT_METAL=2500 + ) /obj/item/ammo_casing/a762 desc = "Патрон пули калибра 7.62мм." @@ -208,7 +228,9 @@ icon_state = "casing_38" caliber = "38" projectile_type = /obj/item/projectile/bullet/midbullet2 - m_amt = 400 + construction = list( + MAT_METAL=400 + ) /obj/item/ammo_casing/a556 desc = "Патрон от пули калибра 5.56мм." diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ed31e7d13761..3842b129cb8c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -12,7 +12,9 @@ item_state = "gun" flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) w_class = SIZE_SMALL throwforce = 5 throw_speed = 4 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 1cba4c52b654..b661a03e003b 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -5,7 +5,9 @@ icon_state = "laser" item_state = null //so the human update icon uses the icon_state instead. w_class = SIZE_SMALL - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) origin_tech = "combat=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/laser) slot_flags = SLOT_FLAGS_BACK diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 33560a2a5fab..08c4c65f3661 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -63,7 +63,9 @@ icon_state = "crossbow" w_class = SIZE_TINY item_state = "crossbow" - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) origin_tech = "combat=2;magnets=2;syndicate=5" silenced = 1 ammo_type = list(/obj/item/ammo_casing/energy/bolt) @@ -100,4 +102,6 @@ w_class = SIZE_NORMAL can_be_holstered = FALSE force = 10 - m_amt = 200000 + construction = list( + MAT_METAL=200000 + ) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 4a4dd17aff09..d95c7615eb3c 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -4,7 +4,9 @@ icon_state = "pistol" origin_tech = "combat=2;materials=2" w_class = SIZE_SMALL - m_amt = 1000 + construction = list( + MAT_METAL=1000 + ) fire_delay = 4 recoil = 1 var/bolt_slide_sound = 'sound/weapons/guns/TargetOn.ogg' diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 86d1c4fe24a2..9a914941420e 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -9,7 +9,9 @@ force = 5.0 var/list/grenades = list() var/max_grenades = 3 - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) slot_flags = SLOT_FLAGS_BACK can_be_holstered = FALSE diff --git a/code/modules/reagents/reagent_containers/extinguisher.dm b/code/modules/reagents/reagent_containers/extinguisher.dm index 22aeb45216f7..a60846927185 100644 --- a/code/modules/reagents/reagent_containers/extinguisher.dm +++ b/code/modules/reagents/reagent_containers/extinguisher.dm @@ -12,7 +12,9 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throw_speed = 2 throw_range = 10 force = 10.0 - m_amt = 90 + construction = list( + MAT_METAL=90 + ) safety = TRUE attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") @@ -85,7 +87,9 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throwforce = 2 w_class = SIZE_TINY force = 3.0 - m_amt = 0 + construction = list( + MAT_METAL=0 + ) volume = 120 @@ -143,7 +147,9 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throwforce = 2 w_class = SIZE_TINY force = 3.0 - m_amt = 0 + construction = list( + MAT_METAL=0 + ) volume = 120 random_overlay = FALSE FE_type = "mini" diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index 9180b9313e30..b5a6b3e15949 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -3,8 +3,10 @@ desc = "Your standard drinking glass." icon_state = "glass_empty" amount_per_transfer_from_this = 5 - m_amt = 0 - g_amt = 250 + construction = list( + MAT_METAL=0, + MAT_GLASS=250 + ) volume = 25 pickup_sound = 'sound/items/glass_containers/bottle_take-empty.ogg' dropped_sound = 'sound/items/glass_containers/bottle_put-empty.ogg' diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a232aaea8584..0948925ea389 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -183,8 +183,10 @@ icon = 'icons/obj/chemical.dmi' icon_state = "beaker" item_state = "beaker" - m_amt = 0 - g_amt = 500 + construction = list( + MAT_METAL=0, + MAT_GLASS=500 + ) volume = 60 var/list/filling_states = list() possible_transfer_amounts = list(5,10,15,25,30,60) @@ -235,7 +237,9 @@ name = "large beaker" desc = "A large beaker." icon_state = "beakerlarge" - g_amt = 5000 + construction = list( + MAT_GLASS=5000 + ) volume = 150 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,150) @@ -245,7 +249,9 @@ name = "cryostasis beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions." icon_state = "beakernoreact" - g_amt = 500 + construction = list( + MAT_GLASS=500 + ) amount_per_transfer_from_this = 10 flags = OPENCONTAINER | NOREACT @@ -253,7 +259,9 @@ name = "bluespace beaker" desc = "A bluespace beaker, powered by experimental bluespace technology." icon_state = "beakerbluespace" - g_amt = 5000 + construction = list( + MAT_GLASS=5000 + ) volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,300) @@ -264,7 +272,9 @@ name = "vial" desc = "A small glass vial." icon_state = "vial" - g_amt = 250 + construction = list( + MAT_GLASS=250 + ) volume = 25 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25) @@ -328,8 +338,10 @@ icon = 'icons/obj/makeshift.dmi' icon_state = "bucket" item_state = "bucket" - m_amt = 200 - g_amt = 0 + construction = list( + MAT_METAL=200, + MAT_GLASS=0 + ) w_class = SIZE_SMALL amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,50,70) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index a74de837bdac..06cacbc26f55 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -11,7 +11,9 @@ icon = 'icons/obj/syringe.dmi' item_state = "syringe_0" icon_state = "0" - g_amt = 150 + construction = list( + MAT_GLASS=150 + ) amount_per_transfer_from_this = 5 possible_transfer_amounts = null //list(5,10,15) volume = 15 diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index 57e5ddd6c8ba..0b31176bc3d2 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -13,7 +13,9 @@ force = 4.0 var/list/syringes = list() var/max_syringes = 1 - m_amt = 2000 + construction = list( + MAT_METAL=2000 + ) can_suicide_with = FALSE /obj/item/weapon/gun/syringe/examine(mob/user) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index c943e1bca5c8..d6068cddc672 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -9,7 +9,9 @@ icon_state = "conpipe-s" anchored = FALSE density = FALSE - m_amt = 1850 + construction = list( + MAT_METAL=1850 + ) level = 2 resistance_flags = CAN_BE_HIT var/ptype = 0 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 822682d328ff..5a8360a9e2ad 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -225,8 +225,10 @@ item_state = "electronic" flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - m_amt = 3000 - g_amt = 1300 + construction = list( + MAT_METAL=3000, + MAT_GLASS=1300 + ) origin_tech = "materials=1;engineering=1" var/mode = 1 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 877f6cef6a46..4d670f66efff 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -2330,8 +2330,10 @@ other types of metals and chemistry for reagents). icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) var/datum/design/blueprint /obj/item/weapon/disk/design_disk/atom_init() diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index fbf797255262..c550ee6a095b 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -111,8 +111,8 @@ Note: Must be placed within 3 tiles of the R&D Console linked_console.files.experiments.do_research_object(loaded_item) if(linked_console.linked_lathe) - linked_console.linked_lathe.loaded_materials[MAT_METAL].amount += round(min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (loaded_item.m_amt*(decon_mod/10)))) - linked_console.linked_lathe.loaded_materials[MAT_GLASS].amount += round(min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (loaded_item.g_amt*(decon_mod/10)))) + for(var/material as anything in loaded_item.construction) + linked_console.linked_lathe.loaded_materials[material].amount += round(min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (loaded_item.construction[material]*(decon_mod/10)))) if(istype(loaded_item,/obj/item/stack/sheet)) var/obj/item/stack/sheet/S = loaded_item diff --git a/code/modules/research/experiment.dm b/code/modules/research/experiment.dm index 87fbebbfe967..df6fc7646717 100644 --- a/code/modules/research/experiment.dm +++ b/code/modules/research/experiment.dm @@ -319,7 +319,9 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - m_amt = 200 + construction = list( + MAT_METAL=200 + ) origin_tech = "engineering=1;biotech=1" var/datum/experiment_data/experiments @@ -403,8 +405,10 @@ icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) var/stored_points /obj/item/weapon/disk/research_points/atom_init() diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 995401437491..a8b4a7afdf70 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -235,8 +235,8 @@ Note: Must be placed west/left of and R&D console to function. // So consider them tests of "new" construction techniques for an item already known // #define MAGIC_2_MANIPULATORS_MAX_OUTPUT_CONSIDERING_IT_SHOULD_ROUND_UP_TO_30_PERCENT_COEFFICIENT 3.75 new_item.prototipify(min_reliability=linked_console.files.design_reliabilities[D.id] + efficiency_coeff * 12.5, max_reliability=70 + efficiency_coeff * 12.5) - new_item.m_amt /= efficiency_coeff - new_item.g_amt /= efficiency_coeff + for(var/material as anything in new_item.construction) + new_item.construction[material] /= efficiency_coeff linked_console.files.design_reliabilities[D.id] += linked_console.files.design_reliabilities[D.id] * (RND_RELIABILITY_EXPONENT ** linked_console.files.design_created_prototypes[D.id]) linked_console.files.design_reliabilities[D.id] = max(round(linked_console.files.design_reliabilities[D.id], 5), 1) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 44f80471ae90..b07eb713939e 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -285,8 +285,10 @@ The tech datums are the actual "tech trees" that you improve through researching icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - m_amt = 30 - g_amt = 10 + construction = list( + MAT_METAL=30, + MAT_GLASS=10 + ) var/datum/tech/stored /obj/item/weapon/disk/tech_disk/atom_init() diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm index 6ccad4950a3f..ff63264eb111 100644 --- a/code/modules/research/xenoarchaeology/chemistry.dm +++ b/code/modules/research/xenoarchaeology/chemistry.dm @@ -71,8 +71,10 @@ desc = "A small, open-topped glass container for delicate research samples. It sports a re-useable strip for labelling with a pen." icon = 'icons/obj/device.dmi' icon_state = "solution_tray" - m_amt = 0 - g_amt = 5 + construction = list( + MAT_METAL=0, + MAT_GLASS=5 + ) w_class = SIZE_TINY amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 2) From 2c2e265e75d1234630064b96a268a18f258e237f Mon Sep 17 00:00:00 2001 From: AirBlack Date: Sun, 26 Nov 2023 22:09:16 +0600 Subject: [PATCH 11/13] Fixed build errors --- code/game/machinery/autolathe.dm | 4 ++-- code/game/machinery/robot_fabricator.dm | 2 +- code/game/mecha/mech_fabricator.dm | 2 +- code/game/objects/objs.dm | 2 +- .../xenoarchaeology/artifact/artifact_replicator.dm | 12 ++++++------ 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index db05b1d73d17..8a60766f2764 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -334,8 +334,8 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes var/obj/item/ammo_box/ammobox = I if(ammobox.stored_ammo.len) for(var/obj/item/ammo_casing/ammo_type in ammobox.stored_ammo) - m_amt += ammo_type.m_amt - g_amt += ammo_type.g_amt + m_amt += ammo_type.construction[MAT_METAL] ? ammo_type.construction[MAT_METAL] : 0 + g_amt += ammo_type.construction[MAT_GLASS] ? ammo_type.construction[MAT_GLASS] : 0 m_amt *= amount g_amt *= amount diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 53e1ebad4269..7e184870f30c 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -23,7 +23,7 @@ if(!M.get_amount()) return while(metal_amount < 150000 && M.use(1)) - src.metal_amount += M.construction[MAT_METAL] ? m.construction[MAT_METAL] : 0 /*O:height * O:width * O:length * 100000.0*/ + src.metal_amount += M.construction[MAT_METAL] ? M.construction[MAT_METAL] : 0 /*O:height * O:width * O:length * 100000.0*/ count++ to_chat(user, "You insert [count] metal sheet\s into the fabricator.") diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 612d373942d3..81bc816f1ef3 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -184,7 +184,7 @@ files.design_created_prototypes[D.id]++ if(isitem(I)) var/obj/item/Item = I - Item.materials[MAT_METAL] = get_resource_cost_w_coeff(D,MAT_METAL) + Item.materials[MAT_METAL] = get_resource_cost_w_coeff(D,MAT_METAL) // Uhm Item.materials[MAT_GLASS] = get_resource_cost_w_coeff(D,MAT_GLASS) visible_message("[bicon(src)] \The [src] beeps, \"\The [I] is complete.\"") being_built = null diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 102c33dfe561..f98ef5758bd5 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,6 +1,6 @@ /obj //var/datum/module/mod //not used - var/construction = list() // Resources used for construction + var/list/construction = list() // Resources used for construction var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm b/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm index 8b4310223280..18db8514aad6 100644 --- a/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm +++ b/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm @@ -15,7 +15,7 @@ var/max_spawn_time = 50 var/last_process_time = 0 - var/list/construction = list() + var/list/alien_construction = list() var/list/spawning_types = list() var/list/stored_materials = list() @@ -93,7 +93,7 @@ var/button_desc = "a [pick("yellow", "purple", "green", "blue", "red", "orange", "white")], " button_desc += "[pick("round", "square", "diamond", "heart", "dog", "human")] shaped " button_desc += "[pick("toggle", "switch", "lever", "button", "pad", "hole")]" - construction[button_desc] = PATH_OR_RANDOM_PATH(pick_n_take(viables)) + alien_construction[button_desc] = PATH_OR_RANDOM_PATH(pick_n_take(viables)) fail_message = "[bicon(src)] a [pick("loud", "soft", "sinister", "eery", "triumphant", "depressing", "cheerful", "angry")] \ [pick("horn", "beep", "bing", "bleep", "blat", "honk", "hrumph", "ding")] sounds and a \ @@ -137,8 +137,8 @@ /obj/machinery/replicator/ui_interact(mob/user) var/dat = "The control panel displays an incomprehensible selection of controls, many with unusual markings or text around them.
" dat += "
" - for(var/index=1, index<=construction.len, index++) - dat += "\[[construction[index]]\]
" + for(var/index=1, index<=alien_construction.len, index++) + dat += "\[[alien_construction[index]]\]
" var/datum/browser/popup = new(user, "alien_replicator") popup.set_content(dat) @@ -162,14 +162,14 @@ if(href_list["activate"]) var/index = text2num(href_list["activate"]) - if(index > 0 && index <= construction.len) + if(index > 0 && index <= alien_construction.len) if(stored_materials.len > spawning_types.len) if(spawning_types.len) visible_message("[bicon(src)] a [pick("light", "dial", "display", "meter", "pad")] on [src]'s front [pick("blinks", "flashes")] [pick("red", "yellow", "blue", "orange", "purple", "green", "white")].") else visible_message("[bicon(src)] [src]'s front compartment slides shut.") - spawning_types.Add(construction[construction[index]]) + spawning_types.Add(alien_construction[alien_construction[index]]) // wtf? spawn_progress_time = 0 set_power_use(ACTIVE_POWER_USE) icon_state = "replicator_active" From 897ef07d1dcdc843242493d7c1c1f372923f9122 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Mon, 27 Nov 2023 00:05:52 +0600 Subject: [PATCH 12/13] Now fabricator recycling uses construction --- code/game/machinery/autolathe.dm | 2 +- .../mecha/equipment/tools/medical_tools.dm | 3 ++ code/game/mecha/equipment/tools/tools.dm | 6 +++ code/game/mecha/mech_fabricator.dm | 43 +++++-------------- code/game/objects/objs.dm | 7 +++ code/modules/mining/mine_items.dm | 14 ++++++ code/modules/mob/living/carbon/brain/MMI.dm | 8 ++++ .../mob/living/carbon/brain/posibrain.dm | 2 + 8 files changed, 51 insertions(+), 34 deletions(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8a60766f2764..012d14dffd24 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -46,7 +46,7 @@ recipe.name = initial(path.name) recipe.category = category_name recipe.result_type = path - var/item_construction = initial(P.construction) + var/list/item_construction = initial(P.construction) recipe.resources = list( MAT_METAL = (item_construction[MAT_METAL] ? item_construction[MAT_METAL] : 0) * amount, MAT_GLASS = (item_construction[MAT_GLASS] ? item_construction[MAT_GLASS] : 0) * amount, diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index ddac308d8b58..89f9f7d21db3 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -248,6 +248,9 @@ var/obj/item/stack/cable_coil/cable var/max_cable = 1000 +/obj/item/mecha_parts/mecha_equipment/cable_layer/can_be_disassembled() + return TRUE + /obj/item/mecha_parts/mecha_equipment/cable_layer/atom_init() cable = new(src) cable.amount = 0 diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 29b376fef5e1..b8bcd12c2c33 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -241,6 +241,9 @@ var/obj/item/weapon/reagent_containers/spray/extinguisher/ext +/obj/item/mecha_parts/mecha_equipment/extinguisher/can_be_disassembled() + return TRUE + /obj/item/mecha_parts/mecha_equipment/extinguisher/atom_init() ext = new/obj/item/weapon/reagent_containers/spray/extinguisher/mecha(src) . = ..() @@ -866,6 +869,9 @@ var/power_per_cycle = 20 reliability = 1000 +/obj/item/mecha_parts/mecha_equipment/generator/can_be_disassembled() + return TRUE + /obj/item/mecha_parts/mecha_equipment/generator/atom_init() ..() return INITIALIZE_HINT_LATELOAD diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 81bc816f1ef3..85520a9a4f3a 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -1,4 +1,3 @@ -#define FABRICATOR_RECYCLE_MATERIAL_RATE 0.8 // To be discussed. Maybe add dependency on part tiers. #define FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER 5 // Item.size * modifier is the time required to recycle an item. /obj/machinery/mecha_part_fabricator @@ -17,6 +16,7 @@ var/time_coeff_tech = 1 var/resource_coeff = 1 var/resource_coeff_tech = 1 + var/resource_coeff_recycle = 0.6 var/efficiency_coeff = 0 var/list/resources = list( MAT_METAL=0, @@ -85,6 +85,8 @@ for(var/obj/item/weapon/stock_parts/micro_laser/Ma in component_parts) T += Ma.rating resource_coeff = round(initial(resource_coeff) - (initial(resource_coeff)*(T))/8,0.01) + //resources recycle coefficient (0.6 -> 0.73 -> 0.87 -> 1) + resource_coeff_recycle = min(round(initial(resource_coeff_recycle) + ((1 - resource_coeff_recycle) * (T))/4, 0.01), 1) //building time adjustment coefficient (1 -> 0.8 -> 0.6) T = -1 @@ -177,6 +179,10 @@ var/I = new D.build_path(location) if(isobj(I)) var/obj/O = I + for(var/resource in D.materials) + if(resource in resources) + O.construction[resource] = get_resource_cost_w_coeff(D, resource) + O.prototipify(min_reliability=files.design_reliabilities[D.id] + efficiency_coeff * 25.0, max_reliability=70 + efficiency_coeff * 25.0) files.design_reliabilities[D.id] += files.design_reliabilities[D.id] * (RND_RELIABILITY_EXPONENT ** files.design_created_prototypes[D.id]) @@ -605,7 +611,7 @@ if(is_type_in_list(I, disallowed_types)) return FALSE - if(!recycling_check_contents_empty(I)) // Needs review. Check to prevent recycling whole rigs/assembled borg endoskeletons. + if(!I.can_be_disassembled()) to_chat(user, "You need to fully disassemble \the [I] before recycling.") return TRUE @@ -646,43 +652,15 @@ return TRUE -/obj/machinery/mecha_part_fabricator/proc/recycling_check_contents_empty(obj/item/I) - if(istype(I, /obj/item/device/mmi/radio_enabled)) - for(var/A as anything in I.contents) - if(!istype(A, /obj/item/device/radio)) - return FALSE - return TRUE - - if(istype(I, /obj/item/weapon/gun/energy/kinetic_accelerator)) - for(var/A as anything in I.contents) - if(!istype(A, /obj/item/weapon/stock_parts/cell/crap) && !istype(A, /obj/item/ammo_casing/energy/kinetic)) - return FALSE - return TRUE - - // All the types that are allowed to have contents - var/list/allowed_recycling_assembled_types = list( - /obj/item/device/mmi/posibrain, - /obj/item/mecha_parts/mecha_equipment/generator, - /obj/item/mecha_parts/mecha_equipment/extinguisher, - /obj/item/mecha_parts/mecha_equipment/cable_layer, - /obj/item/weapon/gun/energy/laser/cutter, - /obj/item/weapon/pickaxe/drill/jackhammer, - ) - - if(is_type_in_list(I, allowed_recycling_assembled_types)) - return TRUE - - return I.contents.len == 0 - /obj/machinery/mecha_part_fabricator/proc/get_recycled_materials(obj/item/I) // TODO: Maybe add mecha wreckage and mecha chassis recycling for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. if((D.build_type & build_type) && istype(I, D.build_path)) var/list/materials_to_add = list() - for(var/material as anything in D.materials) + for(var/material as anything in I.construction) if(material in resources) - materials_to_add[material] = round(get_resource_cost_w_coeff(D, material, roundto = 0.01) * FABRICATOR_RECYCLE_MATERIAL_RATE, 1) + materials_to_add[material] = round(I.construction[material] * resource_coeff_recycle, 1) return materials_to_add return list() @@ -708,5 +686,4 @@ ..() update_icon() -#undef FABRICATOR_RECYCLE_MATERIAL_RATE #undef FABRICATOR_ITEM_RECYCLE_SIZE_TO_TIME_MODIFIER diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index f98ef5758bd5..c3877a2fc71b 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -49,6 +49,13 @@ underlays -= icon(icon = 'icons/obj/device.dmi', icon_state = "tag") verbs -= /obj/proc/remove_price_tag +/obj/proc/can_be_disassembled() + /* + Returns TRUE if this item can be safely disassembled by recycling. + TODO: Add more implementations and use this proc in RnD deconstruction and autolathe recycling + */ + return contents.len == 0 + /obj/proc/get_current_temperature() /* It actually returns a rise in temperature from the enviroment since I don't know why. diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 9906531bf5a2..6174d34aa149 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -421,6 +421,9 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." drill_verb = "hammering" +/obj/item/weapon/pickaxe/drill/jackhammer/can_be_disassembled() + return TRUE + /obj/item/weapon/pickaxe/drill/jackhammer/attackby(obj/item/I, mob/user, params) return @@ -522,6 +525,14 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station var/list/installed_upgrades = list() var/max_upgrades = 3 +/obj/item/weapon/gun/energy/kinetic_accelerator/can_be_disassembled() + if(!contents.len) + return TRUE + for(var/A as anything in contents) + if(A != chambered && A != power_supply) + return FALSE + return TRUE + #define MAX_IDENTICAL_UPGRADES 2 #define MAX_UPGRADES_LIMIT 5 @@ -679,6 +690,9 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station desc = "The latest self-rechargeable low-power cutter using bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff." var/emagged = FALSE +/obj/item/weapon/gun/energy/laser/cutter/can_be_disassembled() + return TRUE + /obj/item/projectile/beam/plasma_cutter name = "cutter" damage = 5 diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index af767d4c0da1..67db65709949 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -165,6 +165,14 @@ var/obj/item/device/radio/radio = null//Let's give it a radio. +/obj/item/device/mmi/radio_enabled/can_be_disassembled() + if(!contents.len) + return TRUE + for(var/A as anything in contents) + if(A != radio) + return FALSE + return TRUE + /obj/item/device/mmi/radio_enabled/atom_init() . = ..() radio = new(src)//Spawns a radio inside the MMI. diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index f2a12a51a55e..db78917f69db 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -13,6 +13,8 @@ var/ping_cd = 0//attack_ghost cooldown +/obj/item/device/mmi/posibrain/can_be_disassembled() + return TRUE /obj/item/device/mmi/posibrain/attack_self(mob/user) if(brainmob && !brainmob.key && searching == 0) From ea641932bebe4d2e240d5b68ec1e3e65a8c49180 Mon Sep 17 00:00:00 2001 From: AirBlack Date: Mon, 27 Nov 2023 01:05:56 +0600 Subject: [PATCH 13/13] Converted construction list to construction params --- code/__HELPERS/_lists.dm | 16 ++ code/defines/obj/hydro.dm | 9 +- code/defines/obj/weapon.dm | 175 ++++-------------- .../modes_gameplays/nuclear/pinpointer.dm | 4 +- code/game/machinery/alarm.dm | 10 +- code/game/machinery/autolathe.dm | 27 +-- code/game/machinery/camera/camera_assembly.dm | 5 +- code/game/machinery/doors/airlock.dm | 2 +- .../machinery/doors/airlock_electronics.dm | 5 +- code/game/machinery/newscaster.dm | 5 +- code/game/machinery/robot_fabricator.dm | 3 +- code/game/mecha/mech_fabricator.dm | 9 +- code/game/objects/game_kit.dm | 5 +- code/game/objects/items.dm | 2 +- code/game/objects/items/ashtray.dm | 13 +- code/game/objects/items/devices/debugger.dm | 5 +- code/game/objects/items/devices/flashlight.dm | 15 +- code/game/objects/items/devices/multitool.dm | 5 +- code/game/objects/items/devices/powersink.dm | 4 +- .../items/devices/radio/electropack.dm | 5 +- .../objects/items/devices/radio/headset.dm | 5 +- .../game/objects/items/devices/radio/radio.dm | 5 +- .../devices/scanners/contraband_finder.dm | 8 +- .../objects/items/devices/scanners/gas.dm | 5 +- .../items/devices/scanners/health_analyzer.dm | 4 +- .../devices/scanners/mass_spectrometer.dm | 5 +- .../devices/scanners/occult_pinpointer.dm | 4 +- .../items/devices/scanners/occult_scanner.dm | 4 +- .../items/devices/scanners/reagent_scanner.dm | 5 +- .../items/devices/scanners/t_scanner.dm | 4 +- .../items/devices/tabletop_assistant.dm | 5 +- .../objects/items/devices/taperecorder.dm | 5 +- .../objects/items/devices/traitordevices.dm | 4 +- code/game/objects/items/stacks/rods.dm | 4 +- .../game/objects/items/stacks/sheets/glass.dm | 27 +-- .../items/stacks/sheets/sheet_types.dm | 12 +- .../objects/items/stacks/tiles/plasteel.dm | 4 +- code/game/objects/items/toys.dm | 8 +- code/game/objects/items/weapons/RCD.dm | 9 +- .../objects/items/weapons/airlock_painter.dm | 5 +- code/game/objects/items/weapons/bell.dm | 4 +- code/game/objects/items/weapons/cosmetics.dm | 4 +- .../objects/items/weapons/flamethrower.dm | 8 +- code/game/objects/items/weapons/handcuffs.dm | 4 +- code/game/objects/items/weapons/kitchen.dm | 20 +- code/game/objects/items/weapons/makeshift.dm | 4 +- code/game/objects/items/weapons/paint.dm | 5 +- .../game/objects/items/weapons/power_cells.dm | 47 ++--- code/game/objects/items/weapons/shields.dm | 10 +- .../objects/items/weapons/storage/firstaid.dm | 5 +- .../objects/items/weapons/surgery_tools.dm | 30 +-- .../objects/items/weapons/teleportation.dm | 8 +- code/game/objects/items/weapons/tools.dm | 44 +---- code/game/objects/items/weapons/weaponry.dm | 4 +- code/game/objects/objs.dm | 2 +- code/modules/assembly/assembly.dm | 5 +- code/modules/assembly/igniter.dm | 5 +- code/modules/assembly/infrared.dm | 5 +- code/modules/assembly/mousetrap.dm | 4 +- code/modules/assembly/proximity.dm | 5 +- code/modules/assembly/signaler.dm | 5 +- code/modules/assembly/timer.dm | 5 +- code/modules/assembly/voice.dm | 5 +- code/modules/clothing/head/misc_special.dm | 5 +- .../spacesuits/rig/modules/utility.dm | 2 +- .../clothing/under/accessories/accessory.dm | 17 +- code/modules/economy/cardpay.dm | 5 +- code/modules/mining/mine_items.dm | 12 +- code/modules/mining/scanners.dm | 5 +- code/modules/musical_instruments/harmonica.dm | 4 +- code/modules/paperwork/pen.dm | 4 +- code/modules/paperwork/photography.dm | 4 +- code/modules/paperwork/stamps.dm | 4 +- code/modules/power/antimatter/shielding.dm | 4 +- code/modules/power/cable.dm | 10 +- code/modules/power/lighting/bulbs.dm | 12 +- code/modules/projectiles/ammunition.dm | 4 +- .../modules/projectiles/ammunition/bullets.dm | 44 ++--- code/modules/projectiles/gun.dm | 4 +- code/modules/projectiles/guns/energy/laser.dm | 4 +- code/modules/projectiles/guns/energy/stun.dm | 8 +- code/modules/projectiles/guns/projectile.dm | 4 +- code/modules/reagents/grenade_launcher.dm | 4 +- .../reagent_containers/extinguisher.dm | 12 +- .../food/drinks/drinkingglass.dm | 5 +- .../reagents/reagent_containers/glass.dm | 26 +-- .../reagents/reagent_containers/syringes.dm | 4 +- code/modules/reagents/syringe_gun.dm | 4 +- .../recycling/disposal-construction.dm | 4 +- code/modules/recycling/sortingmachinery.dm | 5 +- code/modules/research/designs.dm | 5 +- code/modules/research/destructive_analyzer.dm | 5 +- code/modules/research/experiment.dm | 9 +- code/modules/research/protolathe.dm | 7 +- code/modules/research/research.dm | 5 +- .../research/xenoarchaeology/chemistry.dm | 5 +- 96 files changed, 249 insertions(+), 701 deletions(-) diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index f65dc3d3d383..fbcc9a2bd388 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -830,6 +830,22 @@ sub_keys |= assoc_list[primary_key] return sub_keys +/proc/params2numberlist(params) + var/temp_list = list() + var/params_list = params2list(params) + + for(var/key as anything in params_list) + temp_list[key] = text2num(params_list[key]) + return temp_list + +/proc/numberlist2params(list/number_list) + var/temp_list = list() + + for(var/key as anything in number_list) + temp_list[key] = num2text(number_list[key]) + + return list2params(temp_list) + #define LAZYINITLIST(L) if (!L) L = list() #define UNSETEMPTY(L) if (L && !L.len) L = null #define LAZYADD(L, I) if(!L) { L = list(); } L += I; diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index b90b4a843f13..283bfdef782b 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -5,10 +5,7 @@ desc = "A hand-held scanner which reports condition of the plant." icon = 'icons/obj/device.dmi' w_class = SIZE_MINUSCULE - construction = list( - MAT_METAL=200, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=200;"+MAT_GLASS+"=50" origin_tech = "materials=1;biotech=1" icon_state = "hydro" item_state = "plantanalyzer" @@ -1431,9 +1428,7 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - construction = list( - MAT_METAL=2550 - ) + construction = MAT_METAL+"=2550" origin_tech = "materials=1;biotech=1" attack_verb = list("slashed", "sliced", "cut", "clawed") diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index fc683f8dd3fd..3b8c5ad79fbb 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -56,9 +56,7 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - construction = list( - MAT_METAL=50 - ) + construction = MAT_METAL+"=50" attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") /obj/item/weapon/cane/atom_init() @@ -102,9 +100,7 @@ icon = 'icons/obj/items.dmi' icon_state = "rack_parts" flags = CONDUCT - construction = list( - MAT_METAL=3750 - ) + construction = MAT_METAL+"=3750" max_integrity = 100 resistance_flags = CAN_BE_HIT @@ -123,9 +119,7 @@ force = 5.0 throwforce = 8.0 item_state = "shard-glass" - construction = list( - MAT_GLASS=3750 - ) + construction = MAT_GLASS+"=3750" hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("stabbed", "slashed", "sliced", "cut") var/on_step_sound = 'sound/effects/glass_step.ogg' @@ -285,9 +279,7 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=100 - ) + construction = MAT_METAL+"=100" origin_tech = "magnets=1" /obj/item/weapon/staff @@ -351,9 +343,7 @@ gender = PLURAL icon = 'icons/obj/items.dmi' icon_state = "table_parts" - construction = list( - MAT_METAL=3750 - ) + construction = MAT_METAL+"=3750" flags = CONDUCT attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked") var/table_type = /obj/structure/table @@ -367,9 +357,7 @@ desc = "Hard table parts. Well...harder..." icon = 'icons/obj/items.dmi' icon_state = "reinf_tableparts" - construction = list( - MAT_METAL=7500 - ) + construction = MAT_METAL+"=7500" flags = CONDUCT table_type = /obj/structure/table/reinforced debris = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) @@ -379,9 +367,7 @@ desc = "Stall table parts." icon = 'icons/obj/items.dmi' icon_state = "stall_tableparts" - construction = list( - MAT_METAL=15000 - ) + construction = MAT_METAL+"=15000" flags = CONDUCT table_type = /obj/structure/table/reinforced/stall debris = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods) @@ -428,9 +414,7 @@ var/amount = 1.0 var/laying = 0.0 var/old_lay = null - construction = list( - MAT_METAL=40 - ) + construction = MAT_METAL+"=40" attack_verb = list("whipped", "lashed", "disciplined", "tickled") /obj/item/weapon/wire/suicide_act(mob/user) @@ -455,10 +439,7 @@ name = "power control module" icon_state = "power_mod" desc = "Heavy-duty switching circuits for power control." - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" /obj/item/weapon/module/id_auth name = "ID authentication module" @@ -498,9 +479,7 @@ throwforce = 15.0 throw_speed = 4 throw_range = 4 - construction = list( - MAT_METAL=15000 - ) + construction = MAT_METAL+"=15000" origin_tech = "materials=2;combat=1" attack_verb = list("chopped", "torn", "cut") @@ -647,58 +626,42 @@ desc = "Used in the construction of computers and other devices with a interactive console." icon_state = "screen" origin_tech = "materials=1" - construction = list( - MAT_GLASS=200 - ) + construction = MAT_GLASS+"=200" /obj/item/weapon/stock_parts/capacitor name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." icon_state = "capacitor" origin_tech = "powerstorage=1" - construction = list( - MAT_METAL=150, - MAT_GLASS=150 - ) + construction = MAT_METAL+"=150;"+MAT_GLASS+"=150" /obj/item/weapon/stock_parts/scanning_module name = "scanning module" desc = "A compact, high resolution scanning module used in the construction of certain devices." icon_state = "scan_module" origin_tech = "magnets=1" - construction = list( - MAT_METAL=100, - MAT_GLASS=120 - ) + construction = MAT_METAL+"=100;"+MAT_GLASS+"=120" /obj/item/weapon/stock_parts/manipulator name = "micro-manipulator" desc = "A tiny little manipulator used in the construction of certain devices." icon_state = "micro_mani" origin_tech = "materials=1;programming=1" - construction = list( - MAT_METAL=100, - MAT_GLASS=80 - ) + construction = MAT_METAL+"=100;"+MAT_GLASS+"=80" /obj/item/weapon/stock_parts/micro_laser name = "micro-laser" desc = "A tiny laser used in certain devices." icon_state = "micro_laser" origin_tech = "magnets=1" - construction = list( - MAT_METAL=100, - MAT_GLASS=120 - ) + construction = MAT_METAL+"=100;"+MAT_GLASS+"=120" /obj/item/weapon/stock_parts/matter_bin name = "matter bin" desc = "A container for hold compressed matter awaiting re-construction." icon_state = "matter_bin" origin_tech = "materials=1" - construction = list( - MAT_METAL=300 - ) + construction = MAT_METAL+"=300" //Rank 2 @@ -708,10 +671,7 @@ icon_state = "adv_capacitor" origin_tech = "powerstorage=3" rating = 2 - construction = list( - MAT_METAL=250, - MAT_GLASS=250 - ) + construction = MAT_METAL+"=250;"+MAT_GLASS+"=250" /obj/item/weapon/stock_parts/scanning_module/adv name = "advanced scanning module" @@ -719,10 +679,7 @@ icon_state = "adv_scan_module" origin_tech = "magnets=3" rating = 2 - construction = list( - MAT_METAL=250, - MAT_GLASS=220 - ) + construction = MAT_METAL+"=250;"+MAT_GLASS+"=220" /obj/item/weapon/stock_parts/manipulator/nano name = "nano-manipulator" @@ -730,10 +687,7 @@ icon_state = "nano_mani" origin_tech = "materials=3,programming=2" rating = 2 - construction = list( - MAT_METAL=230, - MAT_GLASS=220 - ) + construction = MAT_METAL+"=230;"+MAT_GLASS+"=220" /obj/item/weapon/stock_parts/micro_laser/high name = "high-power micro-laser" @@ -741,10 +695,7 @@ icon_state = "high_micro_laser" origin_tech = "magnets=3" rating = 2 - construction = list( - MAT_METAL=210, - MAT_GLASS=220 - ) + construction = MAT_METAL+"=210;"+MAT_GLASS+"=220" /obj/item/weapon/stock_parts/matter_bin/adv name = "advanced matter bin" @@ -752,10 +703,7 @@ icon_state = "advanced_matter_bin" origin_tech = "materials=3" rating = 2 - construction = list( - MAT_METAL=280, - MAT_GLASS=220 - ) + construction = MAT_METAL+"=280;"+MAT_GLASS+"=220" //Rating 3 @@ -765,10 +713,7 @@ icon_state = "super_capacitor" origin_tech = "powerstorage=5;materials=4" rating = 3 - construction = list( - MAT_METAL=350, - MAT_GLASS=350 - ) + construction = MAT_METAL+"=350;"+MAT_GLASS+"=350" /obj/item/weapon/stock_parts/scanning_module/adv/phasic name = "phasic scanning module" @@ -776,10 +721,7 @@ icon_state = "super_scan_module" origin_tech = "magnets=5" rating = 3 - construction = list( - MAT_METAL=350, - MAT_GLASS=320 - ) + construction = MAT_METAL+"=350;"+MAT_GLASS+"=320" /obj/item/weapon/stock_parts/manipulator/nano/pico name = "pico-manipulator" @@ -787,10 +729,7 @@ icon_state = "pico_mani" origin_tech = "materials=5,programming=2" rating = 3 - construction = list( - MAT_METAL=330, - MAT_GLASS=320 - ) + construction = MAT_METAL+"=330;"+MAT_GLASS+"=320" /obj/item/weapon/stock_parts/micro_laser/high/ultra name = "ultra-high-power micro-laser" @@ -798,10 +737,7 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=5" rating = 3 - construction = list( - MAT_METAL=310, - MAT_GLASS=320 - ) + construction = MAT_METAL+"=310;"+MAT_GLASS+"=320" /obj/item/weapon/stock_parts/matter_bin/adv/super name = "super matter bin" @@ -809,10 +745,7 @@ icon_state = "super_matter_bin" origin_tech = "materials=5" rating = 3 - construction = list( - MAT_METAL=380, - MAT_GLASS=320 - ) + construction = MAT_METAL+"=380;"+MAT_GLASS+"=320" //Rating 4 @@ -822,10 +755,7 @@ icon_state = "quadratic_capacitor" origin_tech = "powerstorage=6;materials=5" rating = 4 - construction = list( - MAT_METAL=350, - MAT_GLASS=350 - ) + construction = MAT_METAL+"=350;"+MAT_GLASS+"=350" /obj/item/weapon/stock_parts/scanning_module/adv/phasic/triphasic name = "triphasic scanning module" @@ -833,10 +763,7 @@ icon_state = "triphasic_scan_module" origin_tech = "magnets=6" rating = 4 - construction = list( - MAT_METAL=350, - MAT_GLASS=320 - ) + construction = MAT_METAL+"=350;"+MAT_GLASS+"=320" /obj/item/weapon/stock_parts/manipulator/nano/pico/femto name = "femto-manipulator" @@ -844,9 +771,7 @@ icon_state = "femto_mani" origin_tech = "materials=6;programming=3" rating = 4 - construction = list( - MAT_METAL=330 - ) + construction = MAT_METAL+"=330" /obj/item/weapon/stock_parts/micro_laser/high/ultra/quadultra name = "quad-ultra micro-laser" @@ -854,10 +779,7 @@ desc = "A tiny laser used in certain devices." origin_tech = "magnets=6" rating = 4 - construction = list( - MAT_METAL=80, - MAT_GLASS=220 - ) + construction = MAT_METAL+"=80;"+MAT_GLASS+"=220" /obj/item/weapon/stock_parts/matter_bin/adv/super/bluespace name = "bluespace matter bin" @@ -865,9 +787,7 @@ icon_state = "bluespace_matter_bin" origin_tech = "materials=6" rating = 4 - construction = list( - MAT_METAL=380 - ) + construction = MAT_METAL+"=380" // Subspace stock parts @@ -876,68 +796,49 @@ icon_state = "subspace_ansible" desc = "A compact module capable of sensing extradimensional activity." origin_tech = "programming=3;magnets=5;materials=4;bluespace=2" - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" /obj/item/weapon/stock_parts/subspace/filter name = "hyperwave filter" icon_state = "hyperwave_filter" desc = "A tiny device capable of filtering and converting super-intense radiowaves." origin_tech = "programming=4;magnets=2" - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" /obj/item/weapon/stock_parts/subspace/amplifier name = "subspace amplifier" icon_state = "subspace_amplifier" desc = "A compact micro-machine capable of amplifying weak subspace transmissions." origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" /obj/item/weapon/stock_parts/subspace/treatment name = "subspace treatment disk" icon_state = "treatment_disk" desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." origin_tech = "programming=3;magnets=2;materials=5;bluespace=2" - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" /obj/item/weapon/stock_parts/subspace/analyzer name = "subspace wavelength analyzer" icon_state = "wavelength_analyzer" desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." origin_tech = "programming=3;magnets=4;materials=4;bluespace=2" - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" /obj/item/weapon/stock_parts/subspace/crystal name = "ansible crystal" icon_state = "ansible_crystal" desc = "A crystal made from pure glass used to transmit laser databursts to subspace." origin_tech = "magnets=4;materials=4;bluespace=2" - construction = list( - MAT_GLASS=50 - ) + construction = MAT_GLASS+"=50" /obj/item/weapon/stock_parts/subspace/transmitter name = "subspace transmitter" icon_state = "subspace_transmitter" desc = "A large piece of equipment used to open a window into the subspace dimension." origin_tech = "magnets=5;materials=5;bluespace=3" - construction = list( - MAT_METAL=50 - ) + construction = MAT_METAL+"=50" /obj/item/weapon/research//Makes testing much less of a pain -Sieve name = "research" diff --git a/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm b/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm index a59929828323..e794fdf75902 100644 --- a/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm +++ b/code/game/gamemodes/modes_gameplays/nuclear/pinpointer.dm @@ -10,9 +10,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" var/active = FALSE var/atom/target = null var/mode = SEARCH_FOR_DISK // Need here for GREAT OOP style, 0 - searching disk diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index bc5cf38bf872..8a1a39949663 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -900,10 +900,7 @@ Just a object used in constructing air alarms icon_state = "door_electronics" desc = "Looks like a circuit. Probably is." w_class = SIZE_TINY - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" /* @@ -1250,10 +1247,7 @@ Just a object used in constructing fire alarms icon_state = "door_electronics" desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\"" w_class = SIZE_TINY - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" /* diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 012d14dffd24..1c76e45e5da8 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -46,10 +46,12 @@ recipe.name = initial(path.name) recipe.category = category_name recipe.result_type = path - var/list/item_construction = initial(P.construction) + var/list/item_construction = params2numberlist(initial(P.construction)) + var/m_amt = item_construction[MAT_METAL] || 0 + var/g_amt = item_construction[MAT_GLASS] || 0 recipe.resources = list( - MAT_METAL = (item_construction[MAT_METAL] ? item_construction[MAT_METAL] : 0) * amount, - MAT_GLASS = (item_construction[MAT_GLASS] ? item_construction[MAT_GLASS] : 0) * amount, + MAT_METAL = m_amt * amount, + MAT_GLASS = g_amt * amount ) return recipe @@ -317,8 +319,9 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes var/amount = 1 var/obj/item/stack/stack - var/m_amt = I.construction[MAT_METAL] ? I.construction[MAT_METAL] : 0 - var/g_amt = I.construction[MAT_GLASS] ? I.construction[MAT_GLASS] : 0 + var/list/item_construction = params2numberlist(I.construction) + var/m_amt = item_construction[MAT_METAL] || 0 + var/g_amt = item_construction[MAT_GLASS] || 0 if(istype(I, /obj/item/stack)) stack = I amount = stack.get_amount() @@ -334,8 +337,9 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes var/obj/item/ammo_box/ammobox = I if(ammobox.stored_ammo.len) for(var/obj/item/ammo_casing/ammo_type in ammobox.stored_ammo) - m_amt += ammo_type.construction[MAT_METAL] ? ammo_type.construction[MAT_METAL] : 0 - g_amt += ammo_type.construction[MAT_GLASS] ? ammo_type.construction[MAT_GLASS] : 0 + var/list/ammo_construction = params2numberlist(ammo_type.construction) + m_amt += ammo_construction[MAT_METAL] || 0 + g_amt += ammo_construction[MAT_GLASS] || 0 m_amt *= amount g_amt *= amount @@ -453,10 +457,11 @@ var/global/list/datum/autolathe_recipe/autolathe_recipes_all = autolathe_recipes stored_material[MAT_METAL] -= recipe.resources[MAT_METAL] / coeff stored_material[MAT_GLASS] -= recipe.resources[MAT_GLASS] / coeff var/obj/new_item = new recipe.result_type(T) - if(new_item.construction[MAT_METAL]) - new_item.construction[MAT_METAL] /= coeff - if(new_item.construction[MAT_GLASS]) - new_item.construction[MAT_GLASS] /= coeff + var/list/item_construction = params2numberlist(new_item.construction) + if(item_construction[MAT_METAL]) + item_construction[MAT_METAL] /= coeff + if(item_construction[MAT_GLASS]) + item_construction[MAT_GLASS] /= coeff if(stored_material[MAT_METAL] < 0) stored_material[MAT_METAL] = 0 if(stored_material[MAT_GLASS] < 0) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 9fc06263b2c2..70d230da8ea9 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -5,10 +5,7 @@ icon_state = "cameracase" w_class = SIZE_TINY anchored = FALSE - construction = list( - MAT_METAL=700, - MAT_GLASS=300 - ) + construction = MAT_METAL+"=700;"+MAT_GLASS+"=300" // Motion, EMP-Proof, X-Ray var/list/obj/item/possible_upgrades = list(/obj/item/device/assembly/prox_sensor, /obj/item/stack/sheet/mineral/phoron, /obj/item/device/analyzer) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index f7e74617c168..796f174c2646 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -569,7 +569,7 @@ var/global/list/airlock_overlays = list() if (isElectrified()) if (isitem(mover)) var/obj/item/i = mover - if (i.construction[MAT_METAL]) + if (params2numberlist(i.construction)[MAT_METAL]) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index 956599520d5b..41f4373576b9 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -4,10 +4,7 @@ icon = 'icons/obj/doors/door_electronics.dmi' icon_state = "door_electronics" w_class = SIZE_TINY - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" //Emagged var/broken = FALSE diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 890b9431eee3..780ada0f22e3 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -80,10 +80,7 @@ var/global/list/obj/machinery/newscaster/allCasters = list() //Global list that desc = "Used to build newscasters, just secure to the wall." icon_state = "newscaster" item_state = "syringe_kit" - construction = list( - MAT_METAL=25000, - MAT_GLASS=15000 - ) + construction = MAT_METAL+"=25000;"+MAT_GLASS+"=15000" /obj/item/newscaster_frame/proc/try_build(turf/on_wall) if (get_dist(on_wall,usr)>1) diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm index 7e184870f30c..189a72ee8b83 100644 --- a/code/game/machinery/robot_fabricator.dm +++ b/code/game/machinery/robot_fabricator.dm @@ -16,6 +16,7 @@ /obj/machinery/robotic_fabricator/attackby(obj/item/O, mob/user) if (istype(O, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = O + var/list/item_construction = params2numberlist(M.construction) if (src.metal_amount < 150000.0) var/count = 0 add_overlay("fab-load-metal") @@ -23,7 +24,7 @@ if(!M.get_amount()) return while(metal_amount < 150000 && M.use(1)) - src.metal_amount += M.construction[MAT_METAL] ? M.construction[MAT_METAL] : 0 /*O:height * O:width * O:length * 100000.0*/ + src.metal_amount += item_construction || 0 /*O:height * O:width * O:length * 100000.0*/ count++ to_chat(user, "You insert [count] metal sheet\s into the fabricator.") diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 85520a9a4f3a..b69296540768 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -179,9 +179,11 @@ var/I = new D.build_path(location) if(isobj(I)) var/obj/O = I + var/list/used_materials = list() for(var/resource in D.materials) if(resource in resources) - O.construction[resource] = get_resource_cost_w_coeff(D, resource) + used_materials[resource] = get_resource_cost_w_coeff(D, resource) + O.construction = numberlist2params(used_materials) O.prototipify(min_reliability=files.design_reliabilities[D.id] + efficiency_coeff * 25.0, max_reliability=70 + efficiency_coeff * 25.0) @@ -658,9 +660,10 @@ for(var/datum/design/D as anything in files.known_designs) // TODO: Optimize and cache it with keeping "recycle only known designs" feature instead of cycling through all designs, but I can't think of any way with less than O(N) complexity on every check. Only way I can think of is to keep build_path to design list with all available designs in research files, but that seems as a bad solution. Review needed. if((D.build_type & build_type) && istype(I, D.build_path)) var/list/materials_to_add = list() - for(var/material as anything in I.construction) + var/list/item_construction = params2numberlist(I.construction) + for(var/material as anything in item_construction) if(material in resources) - materials_to_add[material] = round(I.construction[material] * resource_coeff_recycle, 1) + materials_to_add[material] = round(item_construction[material] * resource_coeff_recycle, 1) return materials_to_add return list() diff --git a/code/game/objects/game_kit.dm b/code/game/objects/game_kit.dm index a0bf3696b417..fc4af69cec75 100644 --- a/code/game/objects/game_kit.dm +++ b/code/game/objects/game_kit.dm @@ -9,10 +9,7 @@ var/board_stat = null //Core string var/data = "" force = 8 - construction = list( - MAT_METAL=2000, - MAT_GLASS=1000 - ) + construction = MAT_METAL+"=2000;"+MAT_GLASS+"=1000" item_state = "sheet-metal" w_class = SIZE_SMALL diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2742d9e13cd8..cd378c6608f4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -998,7 +998,7 @@ if(qual_prying <= 0) return - var/chance = w_class / (qual_prying * (construction[MAT_METAL] ? construction[MAT_METAL] + 1 : 1)) + var/chance = w_class / (qual_prying * (params2numberlist(construction)[MAT_METAL] || 0) + 1) if(prob(chance * 100)) qdel(src) diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 54b6ddfb2c91..abdf84cb386a 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -73,10 +73,7 @@ icon_broken = "ashtray_bork_bl" max_butts = 14 max_integrity = 48 - construction = list( - MAT_METAL=30, - MAT_GLASS=30 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=30" empty_desc = "Cheap plastic ashtray." throwforce = 3.0 @@ -95,9 +92,7 @@ icon_broken = "ashtray_bork_br" max_butts = 10 max_integrity = 144 - construction = list( - MAT_METAL=80 - ) + construction = MAT_METAL+"=80" empty_desc = "Massive bronze ashtray." throwforce = 10.0 @@ -116,9 +111,7 @@ icon_broken = "ashtray_bork_gl" max_butts = 12 max_integrity = 24 - construction = list( - MAT_GLASS=60 - ) + construction = MAT_GLASS+"=60" empty_desc = "Glass ashtray. Looks fragile." throwforce = 6.0 diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm index 7b2be1202d97..44348828ed98 100644 --- a/code/game/objects/items/devices/debugger.dm +++ b/code/game/objects/items/devices/debugger.dm @@ -15,10 +15,7 @@ throwforce = 5.0 throw_range = 15 throw_speed = 3 - construction = list( - MAT_METAL=50, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=20" origin_tech = "magnets=1;engineering=1" var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index fe9ca6b9255b..3cf26b6bc80b 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -7,10 +7,7 @@ w_class = SIZE_TINY flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - construction = list( - MAT_METAL=50, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=20" item_action_types = list(/datum/action/item_action/hands_free/toggle_flashlight) var/on = 0 var/button_sound = 'sound/items/flashlight.ogg' // Sound when using light @@ -146,10 +143,7 @@ brightness_on = 4 w_class = SIZE_NORMAL flags = CONDUCT - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" on = 1 /obj/item/device/flashlight/lamp/get_current_temperature() @@ -267,10 +261,7 @@ icon_state = "floor" //not a slime extract sprite but... something close enough! item_state = "slime" w_class = SIZE_MINUSCULE - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" brightness_on = 6 on = 1 //Bio-luminesence has one setting, on. diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index e001fb702665..626a08d6f3e2 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -17,10 +17,7 @@ throw_range = 15 throw_speed = 3 desc = "You can use this on airlocks or APCs to try to hack them without cutting wires." - construction = list( - MAT_METAL=50, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=20" origin_tech = "magnets=1;engineering=1" var/const/buffer_limit = 16 var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 3cdbe5bf6fcf..9a6f0fd9efc4 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -20,9 +20,7 @@ throwforce = 5 throw_speed = 1 throw_range = 2 - construction = list( - MAT_METAL=750 - ) + construction = MAT_METAL+"=750" origin_tech = "powerstorage=3;syndicate=5" var/drain_rate = 0 // amount of power to drain per tick var/power_drained = 0 // has drained this much power diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index b8c121a506a5..3b6314116706 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -7,10 +7,7 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BACK w_class = SIZE_BIG - construction = list( - MAT_METAL=10000, - MAT_GLASS=2500 - ) + construction = MAT_METAL+"=10000;"+MAT_GLASS+"=2500" var/code = 2 /obj/item/device/radio/electropack/attack_hand(mob/user) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 461b865f7a43..9fb42af2713f 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -3,10 +3,7 @@ desc = "An updated, modular intercom that fits over the head. Takes encryption keys." icon_state = "headset" item_state = "headset" - construction = list( - MAT_METAL=75, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=75;"+MAT_GLASS+"=0" subspace_transmission = 1 canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_FLAGS_EARS diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 93205b40d6fa..4daff7eb839e 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -31,10 +31,7 @@ var/global/GLOBAL_RADIO_TYPE = 1 // radio type to use throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - construction = list( - MAT_METAL=75, - MAT_GLASS=25 - ) + construction = MAT_METAL+"=75;"+MAT_GLASS+"=25" var/const/FREQ_LISTENING = 1 //FREQ_BROADCASTING = 2 diff --git a/code/game/objects/items/devices/scanners/contraband_finder.dm b/code/game/objects/items/devices/scanners/contraband_finder.dm index 2893bfa8382f..7270f99e96ee 100644 --- a/code/game/objects/items/devices/scanners/contraband_finder.dm +++ b/code/game/objects/items/devices/scanners/contraband_finder.dm @@ -9,9 +9,7 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - construction = list( - MAT_METAL=200 - ) + construction = MAT_METAL+"=200" origin_tech = "magnets=4;biotech=4" var/can_scan = TRUE @@ -528,9 +526,7 @@ w_class = SIZE_SMALL throw_speed = 4 throw_range = 10 - construction = list( - MAT_METAL=300 - ) + construction = MAT_METAL+"=300" origin_tech = "magnets=5;biotech=5;programming=3" flash_danger_color = TRUE diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index 702b57864afd..ccc3e449481f 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -17,10 +17,7 @@ ADD_TO_GLOBAL_LIST(/obj/item/device/analyzer, geiger_items_list) throwforce = 5 throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=30, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=20" origin_tech = "magnets=1;engineering=1" var/status diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 9580c3e94205..ec9f7d5613af 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -9,9 +9,7 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - construction = list( - MAT_METAL=200 - ) + construction = MAT_METAL+"=200" origin_tech = "magnets=1;biotech=1" var/mode = TRUE var/output_to_chat = TRUE diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index 8f7b24f47396..847510691f8e 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -9,10 +9,7 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=30, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=20" origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 diff --git a/code/game/objects/items/devices/scanners/occult_pinpointer.dm b/code/game/objects/items/devices/scanners/occult_pinpointer.dm index 74c49fedd751..2bde83d6818f 100644 --- a/code/game/objects/items/devices/scanners/occult_pinpointer.dm +++ b/code/game/objects/items/devices/scanners/occult_pinpointer.dm @@ -8,9 +8,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" var/target = null var/target_type = /obj/item/weapon/reagent_containers/food/snacks/ectoplasm var/active = FALSE diff --git a/code/game/objects/items/devices/scanners/occult_scanner.dm b/code/game/objects/items/devices/scanners/occult_scanner.dm index 90d34ce1a074..8fe76b39932b 100644 --- a/code/game/objects/items/devices/scanners/occult_scanner.dm +++ b/code/game/objects/items/devices/scanners/occult_scanner.dm @@ -8,9 +8,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" var/scanned_type = /obj/item/weapon/reagent_containers/food/snacks/ectoplasm /obj/item/device/occult_scanner/attack_self(mob/user) diff --git a/code/game/objects/items/devices/scanners/reagent_scanner.dm b/code/game/objects/items/devices/scanners/reagent_scanner.dm index ad590eea676c..aa3ad25494d1 100644 --- a/code/game/objects/items/devices/scanners/reagent_scanner.dm +++ b/code/game/objects/items/devices/scanners/reagent_scanner.dm @@ -9,10 +9,7 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=30, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=20" origin_tech = "magnets=2;biotech=2" var/details = 0 var/recent_fail = 0 diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm index f1681f147b4d..ca6758d45c13 100644 --- a/code/game/objects/items/devices/scanners/t_scanner.dm +++ b/code/game/objects/items/devices/scanners/t_scanner.dm @@ -5,9 +5,7 @@ slot_flags = SLOT_FLAGS_BELT w_class = SIZE_TINY item_state = "electronic" - construction = list( - MAT_METAL=150 - ) + construction = MAT_METAL+"=150" origin_tech = "magnets=1;engineering=1" var/on = FALSE diff --git a/code/game/objects/items/devices/tabletop_assistant.dm b/code/game/objects/items/devices/tabletop_assistant.dm index e35564d5e5ad..5032ee5ec3eb 100644 --- a/code/game/objects/items/devices/tabletop_assistant.dm +++ b/code/game/objects/items/devices/tabletop_assistant.dm @@ -22,10 +22,7 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=30, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=20" origin_tech = "magnets=2;engineering=2" var/data = "" // Is used for UI interaction. var/report_time = 0 // So people can't spam with papers. diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index b129c8f7a2a5..5c6118ae6481 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -5,10 +5,7 @@ icon_state = "taperecorderidle" item_state = "analyzer" w_class = SIZE_TINY - construction = list( - MAT_METAL=60, - MAT_GLASS=30 - ) + construction = MAT_METAL+"=60;"+MAT_GLASS+"=30" var/emagged = FALSE var/recording = FALSE var/playing = FALSE diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 966ffcb4a655..094cc94fb611 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -69,9 +69,7 @@ effective or pretty fucking useless. w_class = SIZE_TINY throw_speed = 3 throw_range = 5 - construction = list( - MAT_METAL=10000 - ) + construction = MAT_METAL+"=10000" origin_tech = "magnets=3;bluespace=4;syndicate=2" COOLDOWN_DECLARE(announce) diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index cc58f1614d0d..90555058f3e4 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -9,9 +9,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 20 - construction = list( - MAT_METAL=1875 - ) + construction = MAT_METAL+"=1875" max_amount = 60 usesound = 'sound/weapons/Genhit.ogg' attack_verb = list("hit", "bludgeoned", "whacked") diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index b09aa92d16f3..d2f45150a992 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -15,9 +15,7 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - construction = list( - MAT_GLASS=3750 - ) + construction = MAT_GLASS+"=3750" origin_tech = "materials=1" var/created_window = /obj/structure/window/thin required_skills = list(/datum/skill/construction = SKILL_LEVEL_NOVICE) @@ -27,9 +25,7 @@ desc = "HOLY SHEET! That is a lot of glass." singular_name = "glass sheet" icon_state = "sheet-glass" - construction = list( - MAT_GLASS=0 - ) + construction = MAT_GLASS+"=0" created_window = /obj/structure/window/thin /obj/item/stack/sheet/glass/attack_self(mob/user) @@ -171,10 +167,7 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - construction = list( - MAT_METAL=1875, - MAT_GLASS=3750 - ) + construction = MAT_METAL+"=1875;"+MAT_GLASS+"=3750" origin_tech = "materials=2" required_skills = list(/datum/skill/construction = SKILL_LEVEL_TRAINED) @@ -183,10 +176,7 @@ desc = "Glass which seems to have rods or something stuck in them." singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" /obj/item/stack/sheet/rglass/attack_self(mob/user) construct_window(user) @@ -289,9 +279,7 @@ desc = "A very strong and very resistant sheet of a phoron-glass alloy." singular_name = "phoron glass sheet" icon_state = "sheet-phoronglass" - construction = list( - MAT_GLASS=7500 - ) + construction = MAT_GLASS+"=7500" origin_tech = "materials=3;phorontech=2" created_window = /obj/structure/window/thin/phoron required_skills = list(/datum/skill/construction = SKILL_LEVEL_PRO) @@ -307,10 +295,7 @@ desc = "Phoron glass which seems to have rods or something stuck in them." singular_name = "reinforced phoron glass sheet" icon_state = "sheet-phoronrglass" - construction = list( - MAT_METAL=1875, - MAT_GLASS=7500 - ) + construction = MAT_METAL+"=1875;"+MAT_GLASS+"=7500" origin_tech = "materials=4;phorontech=2" created_window = /obj/structure/window/thin/reinforced/phoron required_skills = list(/datum/skill/construction = SKILL_LEVEL_MASTER) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d27125fa5a75..b1ebd866af75 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -97,9 +97,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( singular_name = "metal sheet" icon_state = "sheet-metal" hitsound = list('sound/items/trayhit2.ogg') - construction = list( - MAT_METAL=3750 - ) + construction = MAT_METAL+"=3750" throwforce = 5.0 flags = CONDUCT origin_tech = "materials=1" @@ -109,9 +107,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( desc = "Sheets made out off metal. It has been dubbed Metal Sheets." singular_name = "metal sheet" icon_state = "sheet-metal" - construction = list( - MAT_METAL=0 - ) + construction = MAT_METAL+"=0" throwforce = 5.0 flags = CONDUCT @@ -133,9 +129,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \ desc = "This sheet is an alloy of steel and platinum." icon_state = "sheet-plasteel" item_state = "sheet-metal" - construction = list( - MAT_METAL=7500 - ) + construction = MAT_METAL+"=7500" throwforce = 7.0 flags = CONDUCT origin_tech = "materials=2" diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm index 791e6d43ae6e..d65a19a1aa47 100644 --- a/code/game/objects/items/stacks/tiles/plasteel.dm +++ b/code/game/objects/items/stacks/tiles/plasteel.dm @@ -4,9 +4,7 @@ desc = "Those could not work as a pretty decent throwing weapon." w_class = SIZE_SMALL force = 6.0 - construction = list( - MAT_METAL=937.5 // wtf - ) + construction = MAT_METAL+"=937.5" throwforce = 5.0 throw_speed = 3 throw_range = 3 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 45bb8d8d2c26..9d21de09f0fd 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -279,9 +279,7 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BELT w_class = SIZE_SMALL - construction = list( - MAT_METAL=3250 - ) + construction = MAT_METAL+"=3250" attack_verb = list("struck", "pistol whipped", "hit", "bashed") var/bullets = 7.0 @@ -337,9 +335,7 @@ icon_state = "357-7" flags = CONDUCT w_class = SIZE_MINUSCULE - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" var/amount_left = 7.0 /obj/item/toy/ammo/gun/update_icon() diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 6573cce8027f..4777fc2d4c58 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -16,9 +16,7 @@ RCD throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - construction = list( - MAT_METAL=50000 - ) + construction = MAT_METAL+"=50000" origin_tech = "engineering=4;materials=2" var/datum/effect/effect/system/spark_spread/spark_system var/matter = 0 @@ -230,8 +228,5 @@ RCD density = FALSE anchored = FALSE origin_tech = "materials=2" - construction = list( - MAT_METAL=30000, - MAT_GLASS=15000 - ) + construction = MAT_METAL+"=30000;"+MAT_GLASS+"=15000" w_class = SIZE_TINY diff --git a/code/game/objects/items/weapons/airlock_painter.dm b/code/game/objects/items/weapons/airlock_painter.dm index 16ba8010783e..9ec49b217159 100644 --- a/code/game/objects/items/weapons/airlock_painter.dm +++ b/code/game/objects/items/weapons/airlock_painter.dm @@ -6,10 +6,7 @@ w_class = SIZE_SMALL - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" origin_tech = "engineering=1" flags = CONDUCT diff --git a/code/game/objects/items/weapons/bell.dm b/code/game/objects/items/weapons/bell.dm index f423399ca225..2b3c6d8bbc3e 100644 --- a/code/game/objects/items/weapons/bell.dm +++ b/code/game/objects/items/weapons/bell.dm @@ -7,9 +7,7 @@ icon_state = "bell" flags = NOBLUDGEON hitsound = list('sound/items/oneding.ogg') - construction = list( - MAT_METAL=75 - ) + construction = MAT_METAL+"=75" var/next_ring = 0 /obj/item/weapon/bell/attack_hand(mob/user) diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm index 8a43ff827604..06a36e629db6 100644 --- a/code/game/objects/items/weapons/cosmetics.dm +++ b/code/game/objects/items/weapons/cosmetics.dm @@ -202,9 +202,7 @@ throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - construction = list( - MAT_METAL=80 - ) + construction = MAT_METAL+"=80" origin_tech = "materials=1;engineering=1" attack_verb = list("cut", "stabbed", "chipped") sharp = 1 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index b40c396a15e8..49d29083d9fd 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -10,9 +10,7 @@ throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" origin_tech = "combat=1;phorontech=1" var/status = 0 var/throw_amount = 1 // If player turns it up higher, it may be a worldfire. @@ -223,9 +221,7 @@ throw_speed = 1 throw_range = 5 w_class = SIZE_SMALL - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" origin_tech = "combat=2;phorontech=1" var/status = 0 var/throw_amount = 25 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 32b6ed2c2dbf..5a2581b6abeb 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -10,9 +10,7 @@ w_class = SIZE_TINY throw_speed = 2 throw_range = 5 - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" origin_tech = "materials=1" var/dispenser = 0 var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 6ce0f95cc994..1c299e8a9675 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -70,9 +70,7 @@ icon_state = "spoon" attack_verb = list("attacked", "poked") overlay_food_string = "food_spoon" - construction = list( - MAT_METAL=250 - ) + construction = MAT_METAL+"=250" /obj/item/weapon/kitchen/utensil/pspoon name = "plastic spoon" @@ -91,9 +89,7 @@ hitsound = list('sound/items/tools/screwdriver-stab.ogg') icon_state = "fork" overlay_food_string = "food_fork" - construction = list( - MAT_METAL=300 - ) + construction = MAT_METAL+"=300" /obj/item/weapon/kitchen/utensil/fork/afterattack(atom/target, mob/user, proximity, params) if(istype(target,/obj/item/weapon/reagent_containers/food/snacks)) return // fork is not only for cleanning @@ -148,9 +144,7 @@ throwforce = 6.0 throw_speed = 3 throw_range = 6 - construction = list( - MAT_METAL=12000 - ) + construction = MAT_METAL+"=12000" origin_tech = "materials=1" attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") qualities = list( @@ -237,9 +231,7 @@ throwforce = 8.0 throw_speed = 3 throw_range = 6 - construction = list( - MAT_METAL=12000 - ) + construction = MAT_METAL+"=12000" sweep_step = 2 /* @@ -299,9 +291,7 @@ throw_range = 5 w_class = SIZE_SMALL flags = CONDUCT - construction = list( - MAT_METAL=3000 - ) + construction = MAT_METAL+"=3000" max_w_class = SIZE_SMALL opened = TRUE max_storage_space = 18 diff --git a/code/game/objects/items/weapons/makeshift.dm b/code/game/objects/items/weapons/makeshift.dm index 1771239d550f..70c82665b3c8 100644 --- a/code/game/objects/items/weapons/makeshift.dm +++ b/code/game/objects/items/weapons/makeshift.dm @@ -230,9 +230,7 @@ force = 9 throwforce = 10 w_class = SIZE_SMALL - construction = list( - MAT_METAL=1875 - ) + construction = MAT_METAL+"=1875" attack_verb = list("hit", "bludgeoned", "whacked", "bonked") /obj/item/weapon/noose diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 92644e60a441..fa211713cc71 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -8,10 +8,7 @@ var/global/list/cached_icons = list() icon = 'icons/obj/items.dmi' icon_state = "paint_neutral" item_state = "paintcan" - construction = list( - MAT_METAL=200, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=200;"+MAT_GLASS+"=0" w_class = SIZE_SMALL amount_per_transfer_from_this = 10 possible_transfer_amounts = list(10,20,30,50,70) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index e5369c982c4b..0c18672d3d48 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -14,10 +14,7 @@ var/charge = 0 var/maxcharge = 1000 var/init_full = TRUE // initialize charge with maxcharge - construction = list( - MAT_METAL=700, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=700;"+MAT_GLASS+"=50" var/rigged = 0 // true if rigged to explode var/minor_fault = 0 //If not 100% reliable, it will build up faults. @@ -42,18 +39,14 @@ origin_tech = "powerstorage=1" maxcharge = 500 init_full = FALSE - construction = list( - MAT_GLASS=40 - ) + construction = MAT_GLASS+"=40" rating = 2 /obj/item/weapon/stock_parts/cell/secborg name = "security borg rechargable D battery" origin_tech = "powerstorage=1" maxcharge = 600 //600 max charge / 100 charge per shot = six shots - construction = list( - MAT_GLASS=40 - ) + construction = MAT_GLASS+"=40" rating = 2.5 /obj/item/weapon/stock_parts/cell/secborg/empty @@ -64,18 +57,14 @@ desc = "A special power cell designed for heavy-duty use in area power controllers." origin_tech = "powerstorage=1" maxcharge = 500 - construction = list( - MAT_GLASS=40 - ) + construction = MAT_GLASS+"=40" /obj/item/weapon/stock_parts/cell/high name = "high-capacity power cell" origin_tech = "powerstorage=2" icon_state = "hcell" maxcharge = 10000 - construction = list( - MAT_GLASS=60 - ) + construction = MAT_GLASS+"=60" rating = 3 /obj/item/weapon/stock_parts/cell/high/empty @@ -86,9 +75,7 @@ origin_tech = "powerstorage=5" icon_state = "scell" maxcharge = 20000 - construction = list( - MAT_GLASS=70 - ) + construction = MAT_GLASS+"=70" rating = 4 /obj/item/weapon/stock_parts/cell/super/empty @@ -99,9 +86,7 @@ origin_tech = "powerstorage=6" icon_state = "hpcell" maxcharge = 30000 - construction = list( - MAT_GLASS=80 - ) + construction = MAT_GLASS+"=80" rating = 5 /obj/item/weapon/stock_parts/cell/hyper/empty @@ -112,9 +97,7 @@ origin_tech = "powerstorage=7" icon_state = "bscell" maxcharge = 40000 - construction = list( - MAT_GLASS=80 - ) + construction = MAT_GLASS+"=80" rating = 6 //chargerate = 4000 @@ -126,9 +109,7 @@ icon_state = "icell" origin_tech = null maxcharge = 30000 - construction = list( - MAT_GLASS=80 - ) + construction = MAT_GLASS+"=80" rating = 6 /obj/item/weapon/stock_parts/cell/infinite/use() @@ -142,10 +123,7 @@ icon_state = "potato_cell" //"potato_battery" charge = 100 maxcharge = 300 - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" minor_fault = 1 rating = 1 @@ -156,8 +134,5 @@ icon = 'icons/mob/slimes.dmi' icon_state = "yellow slime extract" maxcharge = 10000 - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" rating = 3 diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 42c69b3b6790..cbfc4df71005 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -152,10 +152,7 @@ throw_speed = 1 throw_range = 4 w_class = SIZE_NORMAL - construction = list( - MAT_METAL=1000, - MAT_GLASS=7500 - ) + construction = MAT_METAL+"=1000;"+MAT_GLASS+"=7500" origin_tech = "materials=2" attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time @@ -324,10 +321,7 @@ throw_range = 5 block_chance = 45 w_class = SIZE_SMALL - construction = list( - MAT_METAL=1000, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=1000;"+MAT_GLASS+"=0" origin_tech = "materials=2" attack_verb = list("shoved", "bashed") hitsound = list('sound/weapons/wood_shield_hit.ogg') diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index b1ad65581d0a..c852abfb5646 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -122,10 +122,7 @@ use_to_pickup = 1 var/wrapper_color var/label - construction = list( - MAT_METAL=50, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=50" /obj/item/weapon/storage/pill_bottle/attackby(obj/item/weapon/W, mob/user) if(!istype(W)) diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index ae8cd5b5747e..a41ab8e9ac1d 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -16,10 +16,7 @@ desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" - construction = list( - MAT_METAL=10000, - MAT_GLASS=5000 - ) + construction = MAT_METAL+"=10000;"+MAT_GLASS+"=5000" flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -33,10 +30,7 @@ desc = "You think you have seen this before." icon = 'icons/obj/surgery.dmi' icon_state = "hemostat" - construction = list( - MAT_METAL=5000, - MAT_GLASS=2500 - ) + construction = MAT_METAL+"=5000;"+MAT_GLASS+"=2500" flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -51,10 +45,7 @@ desc = "This stops bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "cautery" - construction = list( - MAT_METAL=5000, - MAT_GLASS=2500 - ) + construction = MAT_METAL+"=5000;"+MAT_GLASS+"=2500" flags = CONDUCT w_class = SIZE_TINY origin_tech = "materials=1;biotech=1" @@ -71,10 +62,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "drill" hitsound = list('sound/weapons/circsawhit.ogg') - construction = list( - MAT_METAL=15000, - MAT_GLASS=10000 - ) + construction = MAT_METAL+"=15000;"+MAT_GLASS+"=10000" flags = CONDUCT force = 15.0 w_class = SIZE_TINY @@ -105,10 +93,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - construction = list( - MAT_METAL=10000, - MAT_GLASS=5000 - ) + construction = MAT_METAL+"=10000;"+MAT_GLASS+"=5000" origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") required_skills = list(/datum/skill/surgery = SKILL_LEVEL_TRAINED) @@ -172,10 +157,7 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - construction = list( - MAT_METAL=20000, - MAT_GLASS=10000 - ) + construction = MAT_METAL+"=20000;"+MAT_GLASS+"=10000" origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") sharp = 1 diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 0ad5fe654396..6e394bd697ee 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -21,9 +21,7 @@ item_state = "electronic" throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=400 - ) + construction = MAT_METAL+"=400" origin_tech = "magnets=1" /obj/item/weapon/locator/attack_self(mob/user) @@ -135,9 +133,7 @@ Frequency: w_class = SIZE_TINY throw_speed = 3 throw_range = 5 - construction = list( - MAT_METAL=10000 - ) + construction = MAT_METAL+"=10000" origin_tech = "magnets=1;bluespace=3" /obj/item/weapon/hand_tele/attack_self(mob/user) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index ff9a24bed9a6..b77623996034 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -24,9 +24,7 @@ force = 5.0 throwforce = 7.0 w_class = SIZE_TINY - construction = list( - MAT_METAL=150 - ) + construction = MAT_METAL+"=150" origin_tech = "materials=1;engineering=1" hitsound = list('sound/items/tools/crowbar-hit.ogg') attack_verb = list("bashed", "battered", "bludgeoned", "whacked") @@ -61,10 +59,7 @@ throwforce = 5.0 throw_speed = 3 throw_range = 5 - construction = list( - MAT_METAL=75, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=75;"+MAT_GLASS+"=0" hitsound = list('sound/items/tools/screwdriver-stab.ogg') attack_verb = list("stabbed") usesound = 'sound/items/Screwdriver.ogg' @@ -107,9 +102,7 @@ throw_speed = 2 throw_range = 9 w_class = SIZE_TINY - construction = list( - MAT_METAL=80 - ) + construction = MAT_METAL+"=80" origin_tech = "materials=1;engineering=1" hitsound = list('sound/items/tools/wirecutters-pinch.ogg') attack_verb = list("pinched", "nipped") @@ -165,12 +158,8 @@ QUALITY_WELDING = 1 ) - construction = list( - MAT_METAL=70 - ) // Cost to make in the autolathe - construction = list( - MAT_GLASS=30 - ) + construction = MAT_METAL+"=70" // Cost to make in the autolathe + construction = MAT_GLASS+"=30" origin_tech = "engineering=1" // R&D tech level @@ -457,10 +446,7 @@ icon = 'icons/obj/tools.dmi' icon_state = "indwelder" max_fuel = 40 - construction = list( - MAT_METAL=70, - MAT_GLASS=60 - ) + construction = MAT_METAL+"=70;"+MAT_GLASS+"=60" origin_tech = "engineering=2" /obj/item/weapon/weldingtool/hugetank @@ -469,10 +455,7 @@ icon_state = "hugewelder" max_fuel = 80 w_class = SIZE_SMALL - construction = list( - MAT_METAL=70, - MAT_GLASS=120 - ) + construction = MAT_METAL+"=70;"+MAT_GLASS+"=120" origin_tech = "engineering=3" /obj/item/weapon/weldingtool/experimental @@ -481,10 +464,7 @@ icon_state = "expwelder" max_fuel = 40 w_class = SIZE_SMALL - construction = list( - MAT_METAL=70, - MAT_GLASS=120 - ) + construction = MAT_METAL+"=70;"+MAT_GLASS+"=120" toolspeed = 0.5 origin_tech = "materials=4;engineering=4;bluespace=2;phorontech=3" var/next_refuel_tick = 0 @@ -518,9 +498,7 @@ w_class = SIZE_SMALL - construction = list( - MAT_METAL=50 - ) + construction = MAT_METAL+"=50" origin_tech = "engineering=1" hitsound = list('sound/items/tools/crowbar-hit.ogg') attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") @@ -540,9 +518,7 @@ throwforce = 5.0 w_class = SIZE_TINY - construction = list( - MAT_METAL=15 - ) + construction = MAT_METAL+"=15" qualities = list( QUALITY_PRYING = 0.7 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 02135dc8662a..11f0d9a9fe49 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,9 +89,7 @@ edge = FALSE throw_speed = 3 throw_range = 6 - construction = list( - MAT_METAL=12000 - ) + construction = MAT_METAL+"=12000" origin_tech = "materials=1" hitsound = list('sound/weapons/Genhit.ogg') attack_verb = list("stubbed", "poked") diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index c3877a2fc71b..7a7273e1db57 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,6 +1,6 @@ /obj //var/datum/module/mod //not used - var/list/construction = list() // Resources used for construction + var/construction = "" // Resources used for construction var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 147eea6faeaf..6bec5905558d 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -5,10 +5,7 @@ icon_state = "" flags = CONDUCT w_class = SIZE_TINY - construction = list( - MAT_METAL=100, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=100;"+MAT_GLASS+"=0" throwforce = 2 throw_speed = 3 throw_range = 10 diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 8d25c63d107c..3688fbdbc1f5 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -2,10 +2,7 @@ name = "igniter" desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" - construction = list( - MAT_METAL=500, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=500;"+MAT_GLASS+"=50" origin_tech = "magnets=1" secured = 1 diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 238e6400e539..d1e14cf1fb74 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -2,10 +2,7 @@ name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" - construction = list( - MAT_METAL=1000, - MAT_GLASS=500 - ) + construction = MAT_METAL+"=1000;"+MAT_GLASS+"=500" origin_tech = "magnets=2" wires = WIRE_PULSE diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 4a43654fa3ed..4f0c2012de2c 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -2,9 +2,7 @@ name = "mousetrap" desc = "A handy little spring-loaded trap for catching pesty rodents." icon_state = "mousetrap" - construction = list( - MAT_METAL=100 - ) + construction = MAT_METAL+"=100" origin_tech = "combat=1" var/armed = 0 diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 735b995922f8..e285001faf4c 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,10 +2,7 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - construction = list( - MAT_METAL=800, - MAT_GLASS=200 - ) + construction = MAT_METAL+"=800;"+MAT_GLASS+"=200" origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index b1111cb4d6d4..d89ed773924f 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -3,10 +3,7 @@ desc = "Used to remotely activate devices." icon_state = "signaller" item_state = "signaler" - construction = list( - MAT_METAL=1000, - MAT_GLASS=200 - ) + construction = MAT_METAL+"=1000;"+MAT_GLASS+"=200" origin_tech = "magnets=1" wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index b7e3898f94ad..ec345c8a0562 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -2,10 +2,7 @@ name = "timer" desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" - construction = list( - MAT_METAL=500, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=500;"+MAT_GLASS+"=50" origin_tech = "magnets=1" wires = WIRE_PULSE diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 12534d281cec..3bc7771c2018 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -5,10 +5,7 @@ flags = HEAR_TALK materials = list(MAT_METAL=500, MAT_GLASS=50) origin_tech = "magnets=1" - construction = list( - MAT_METAL=500, - MAT_GLASS=50 - ) + construction = MAT_METAL+"=500;"+MAT_GLASS+"=50" var/listening = 0 var/recorded = "" //the activation message diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index f3d9cbbc8fcd..02185fe8c45d 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -17,10 +17,7 @@ icon_state = "welding" flags = (HEADCOVERSEYES | HEADCOVERSMOUTH) item_state = "welding" - construction = list( - MAT_METAL=3000, - MAT_GLASS=1000 - ) + construction = MAT_METAL+"=3000;"+MAT_GLASS+"=1000" var/up = 0 flash_protection = FLASHES_FULL_PROTECTION flash_protection_slots = list(SLOT_HEAD) diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index f573fcd2e8eb..a6443c0fb33b 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -124,7 +124,7 @@ device.canremove = FALSE // so we can't place mounted devices on tables/racks device.flags |= ABSTRACT // so we can't put mounted devices into backpacks device.origin_tech = null // so we can't put them into destructive analyzer - device.construction = list() // so we can't put them into autolathe + device.construction = "" // so we can't put them into autolathe /obj/item/rig_module/device/engage(atom/target) if(!isturf(holder.wearer.loc) && target) diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index d1fc317d9e96..7f3462b30c4e 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -75,10 +75,7 @@ desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" layer_priority = 0.1 - construction = list( - MAT_METAL=150, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=150;"+MAT_GLASS+"=20" /obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user) if(ishuman(M) && isliving(user)) @@ -168,9 +165,7 @@ desc = "A bronze medal." icon_state = "bronze" layer_priority = 0.1 - construction = list( - MAT_METAL=1000 - ) + construction = MAT_METAL+"=1000" var/medaltype = "medal" //Sprite used for medalbox var/commended = FALSE @@ -230,9 +225,7 @@ desc = "A silver medal." icon_state = "silver" medaltype = "medal-silver" - construction = list( - MAT_METAL=0 - ) + construction = MAT_METAL+"=0" /obj/item/clothing/accessory/medal/silver/valor name = "medal of valor" @@ -261,9 +254,7 @@ desc = "A prestigious golden medal." icon_state = "gold" medaltype = "medal-gold" - construction = list( - MAT_METAL=0 - ) + construction = MAT_METAL+"=0" unacidable = TRUE /obj/item/clothing/accessory/medal/gold/captain diff --git a/code/modules/economy/cardpay.dm b/code/modules/economy/cardpay.dm index 19bba6ad45f4..97e2fd76a495 100644 --- a/code/modules/economy/cardpay.dm +++ b/code/modules/economy/cardpay.dm @@ -10,10 +10,7 @@ icon_state = "card-pay-idle" slot_flags = SLOT_FLAGS_BELT - construction = list( - MAT_METAL=7000, - MAT_GLASS=2000 - ) + construction = MAT_METAL+"=7000;"+MAT_GLASS+"=2000" var/linked_account = 0 var/pay_amount = 0 diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 6174d34aa149..d72ed641e5eb 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -170,9 +170,7 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station throwforce = 4.0 item_state = "pickaxe" w_class = SIZE_NORMAL - construction = list( - MAT_METAL=3750 - ) //one sheet, but where can you make them? + construction = MAT_METAL+"=3750" //one sheet, but where can you make them? toolspeed = 1 //moving the delay to an item var so R&D can make improved picks. --NEO origin_tech = "materials=1;engineering=1" attack_verb = list("hit", "pierced", "sliced", "attacked") @@ -265,9 +263,7 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station throwforce = 4.0 item_state = "shovel" w_class = SIZE_SMALL - construction = list( - MAT_METAL=50 - ) + construction = MAT_METAL+"=50" origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") usesound = 'sound/effects/shovel_digging.ogg' @@ -318,9 +314,7 @@ var/global/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station force = 15.0 throwforce = 4.0 w_class = SIZE_NORMAL - construction = list( - MAT_METAL=3750 - ) + construction = MAT_METAL+"=3750" attack_verb = list("hit", "pierced", "sliced", "attacked") usesound = 'sound/items/drill.ogg' hitsound = list('sound/items/drill_hit.ogg') diff --git a/code/modules/mining/scanners.dm b/code/modules/mining/scanners.dm index 23986e6d3d5f..0c5a1c590568 100644 --- a/code/modules/mining/scanners.dm +++ b/code/modules/mining/scanners.dm @@ -9,10 +9,7 @@ throwforce = 5 throw_speed = 4 throw_range = 20 - construction = list( - MAT_METAL=30, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=20" origin_tech = "magnets=1;engineering=2" /obj/item/device/geoscanner/afterattack(atom/target, mob/user, proximity, params) diff --git a/code/modules/musical_instruments/harmonica.dm b/code/modules/musical_instruments/harmonica.dm index 243f19fa0ad2..99aed9168492 100644 --- a/code/modules/musical_instruments/harmonica.dm +++ b/code/modules/musical_instruments/harmonica.dm @@ -6,9 +6,7 @@ item_state = "harmonica" force = 5 w_class = SIZE_TINY - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" var/channel var/cooldown = 70 var/last_played = 0 diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 964e5b54532a..ef6f467b4ba9 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -20,9 +20,7 @@ w_class = SIZE_MINUSCULE throw_speed = 4 throw_range = 15 - construction = list( - MAT_METAL=10 - ) + construction = MAT_METAL+"=10" var/colour = "black" // can we make it HEX? var/click_cooldown = 0 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index ef2c81bf1b7a..45aa36097230 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -298,9 +298,7 @@ w_class = SIZE_TINY flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" var/flash_enabled = TRUE var/pictures_max = 10 var/pictures_left = 10 diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 158e7b9cc290..eae9a4742232 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -13,9 +13,7 @@ w_class = SIZE_MINUSCULE throw_speed = 4 throw_range = 15 - construction = list( - MAT_METAL=60 - ) + construction = MAT_METAL+"=60" hitsound = list('sound/effects/stamp.ogg') //taken from Baystation build var/dye_color = DYE_CARGO attack_verb = list("stamped") diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index d64e89211927..205d10d05793 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -210,9 +210,7 @@ throwforce = 5 throw_speed = 1 throw_range = 2 - construction = list( - MAT_METAL=100 - ) + construction = MAT_METAL+"=100" /obj/item/device/am_shielding_container/attackby(obj/item/I, mob/user, params) if(ispulsing(I) && istype(loc, /turf)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 33bb2fe62ee8..0b49cc17284f 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -436,10 +436,7 @@ By design, d1 is the smallest direction and d2 is the highest w_class = SIZE_TINY throw_speed = 2 throw_range = 5 - construction = list( - MAT_METAL=50, - MAT_GLASS=20 - ) + construction = MAT_METAL+"=50;"+MAT_GLASS+"=20" flags = CONDUCT slot_flags = SLOT_FLAGS_BELT item_state = "coil" @@ -451,10 +448,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/item/stack/cable_coil/cyborg max_amount = 90 - construction = list( - MAT_METAL=0, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=0" /obj/item/stack/cable_coil/atom_init(mapload, new_amount = null, param_color = null) . = ..() diff --git a/code/modules/power/lighting/bulbs.dm b/code/modules/power/lighting/bulbs.dm index 8aa8f7434478..87fb336d4716 100644 --- a/code/modules/power/lighting/bulbs.dm +++ b/code/modules/power/lighting/bulbs.dm @@ -10,9 +10,7 @@ throwforce = 5 w_class = SIZE_TINY - construction = list( - MAT_METAL=50 - ) // in case of mats change tweak lightreplacer + construction = MAT_METAL+"=50" // in case of mats change tweak lightreplacer var/status = LIGHT_OK // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN var/fitting = LAMP_FITTING_TUBE @@ -27,9 +25,7 @@ desc = "A replacement light tube." icon_state = "ltube" item_state = "c_tube" - construction = list( - MAT_GLASS=100 - ) + construction = MAT_GLASS+"=100" fitting = LAMP_FITTING_TUBE light_mode = /datum/light_mode/default @@ -50,9 +46,7 @@ desc = "A replacement light bulb." icon_state = "lbulb" item_state = "contvapour" - construction = list( - MAT_GLASS=100 - ) + construction = MAT_GLASS+"=100" fitting = LAMP_FITTING_BULB light_mode = /datum/light_mode/default/bulb diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index fb80526eea11..80d3a8c5f5c7 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -83,9 +83,7 @@ flags = CONDUCT slot_flags = SLOT_FLAGS_BELT item_state = "syringe_kit" - construction = list( - MAT_METAL=500 - ) + construction = MAT_METAL+"=500" throwforce = 2 w_class = SIZE_TINY throw_speed = 4 diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 172be5df31f1..be7a257a341f 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -4,9 +4,7 @@ desc = "Патрон от пули калибра .357." caliber = "357" projectile_type = /obj/item/projectile/bullet/revbullet - construction = list( - MAT_METAL=1000 - ) + construction = MAT_METAL+"=1000" /obj/item/ammo_casing/a50 desc = "Патрон от пули калибра .50АЕ." @@ -21,34 +19,26 @@ icon_state = "casing_38_rubber" caliber = "38" projectile_type = /obj/item/projectile/bullet/weakbullet - construction = list( - MAT_METAL=200 - ) + construction = MAT_METAL+"=200" /obj/item/ammo_casing/c9mm desc = "Патрон от пули калибра 9мм." caliber = "9mm" projectile_type = /obj/item/projectile/bullet/midbullet2 - construction = list( - MAT_METAL=300 - ) + construction = MAT_METAL+"=300" /obj/item/ammo_casing/c9mmr desc = "Патрон от резиновой пули калибра 9мм." icon_state = "casing_rubber" caliber = "9mm" projectile_type = /obj/item/projectile/bullet/weakbullet/rubber - construction = list( - MAT_METAL=100 - ) + construction = MAT_METAL+"=100" /obj/item/ammo_casing/c45 desc = "Патрон от пули 45-го калибра." caliber = ".45" projectile_type = /obj/item/projectile/bullet/smg - construction = list( - MAT_METAL=400 - ) + construction = MAT_METAL+"=400" /obj/item/ammo_casing/c45hp desc = "Патрон от пули калибра .45 HP." @@ -69,9 +59,7 @@ desc = "Патрон от резиновой пули 45-го калибра." caliber = ".45" projectile_type = /obj/item/projectile/bullet/weakbullet/rubber - construction = list( - MAT_METAL=200 - ) + construction = MAT_METAL+"=200" /obj/item/ammo_casing/a12mm desc = "Патрон от пули калибра 12мм." @@ -84,9 +72,7 @@ icon_state = "blshell" caliber = "shotgun" projectile_type = /obj/item/projectile/bullet/slug - construction = list( - MAT_METAL=3750 - ) + construction = MAT_METAL+"=3750" /obj/item/ammo_casing/shotgun/buckshot name = "buckshot shell" @@ -100,9 +86,7 @@ desc = "Патрон от 12-го калибра типа травматический." icon_state = "bshell" projectile_type = /obj/item/projectile/bullet/weakbullet/beanbag - construction = list( - MAT_METAL=300 - ) + construction = MAT_METAL+"=300" /obj/item/ammo_casing/shotgun/stunshot name = "stun shell" @@ -110,9 +94,7 @@ icon_state = "stunshell" projectile_type = /obj/item/projectile/bullet/stunshot pellets = 5 - construction = list( - MAT_METAL=2500 - ) + construction = MAT_METAL+"=2500" /obj/item/ammo_casing/shotgun/incendiary name = "incendiary shell" @@ -126,9 +108,7 @@ desc = "Патрон от 12-го калибра типа дротик." icon_state = "cshell" projectile_type = /obj/item/projectile/energy/dart - construction = list( - MAT_METAL=2500 - ) + construction = MAT_METAL+"=2500" /obj/item/ammo_casing/a762 desc = "Патрон пули калибра 7.62мм." @@ -228,9 +208,7 @@ icon_state = "casing_38" caliber = "38" projectile_type = /obj/item/projectile/bullet/midbullet2 - construction = list( - MAT_METAL=400 - ) + construction = MAT_METAL+"=400" /obj/item/ammo_casing/a556 desc = "Патрон от пули калибра 5.56мм." diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3842b129cb8c..e63b68c762f4 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -12,9 +12,7 @@ item_state = "gun" flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" w_class = SIZE_SMALL throwforce = 5 throw_speed = 4 diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index b661a03e003b..1721eadc344c 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -5,9 +5,7 @@ icon_state = "laser" item_state = null //so the human update icon uses the icon_state instead. w_class = SIZE_SMALL - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" origin_tech = "combat=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/laser) slot_flags = SLOT_FLAGS_BACK diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 08c4c65f3661..70cafe83305a 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -63,9 +63,7 @@ icon_state = "crossbow" w_class = SIZE_TINY item_state = "crossbow" - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" origin_tech = "combat=2;magnets=2;syndicate=5" silenced = 1 ammo_type = list(/obj/item/ammo_casing/energy/bolt) @@ -102,6 +100,4 @@ w_class = SIZE_NORMAL can_be_holstered = FALSE force = 10 - construction = list( - MAT_METAL=200000 - ) + construction = MAT_METAL+"=200000" diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index d95c7615eb3c..545aaecdf690 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -4,9 +4,7 @@ icon_state = "pistol" origin_tech = "combat=2;materials=2" w_class = SIZE_SMALL - construction = list( - MAT_METAL=1000 - ) + construction = MAT_METAL+"=1000" fire_delay = 4 recoil = 1 var/bolt_slide_sound = 'sound/weapons/guns/TargetOn.ogg' diff --git a/code/modules/reagents/grenade_launcher.dm b/code/modules/reagents/grenade_launcher.dm index 9a914941420e..f53322c5b6ea 100644 --- a/code/modules/reagents/grenade_launcher.dm +++ b/code/modules/reagents/grenade_launcher.dm @@ -9,9 +9,7 @@ force = 5.0 var/list/grenades = list() var/max_grenades = 3 - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" slot_flags = SLOT_FLAGS_BACK can_be_holstered = FALSE diff --git a/code/modules/reagents/reagent_containers/extinguisher.dm b/code/modules/reagents/reagent_containers/extinguisher.dm index a60846927185..adb8833eb0be 100644 --- a/code/modules/reagents/reagent_containers/extinguisher.dm +++ b/code/modules/reagents/reagent_containers/extinguisher.dm @@ -12,9 +12,7 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throw_speed = 2 throw_range = 10 force = 10.0 - construction = list( - MAT_METAL=90 - ) + construction = MAT_METAL+"=90" safety = TRUE attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") @@ -87,9 +85,7 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throwforce = 2 w_class = SIZE_TINY force = 3.0 - construction = list( - MAT_METAL=0 - ) + construction = MAT_METAL+"=0" volume = 120 @@ -147,9 +143,7 @@ ADD_TO_GLOBAL_LIST(/obj/item/weapon/reagent_containers/spray/extinguisher, extin throwforce = 2 w_class = SIZE_TINY force = 3.0 - construction = list( - MAT_METAL=0 - ) + construction = MAT_METAL+"=0" volume = 120 random_overlay = FALSE FE_type = "mini" diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm index b5a6b3e15949..2585211f333b 100644 --- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm @@ -3,10 +3,7 @@ desc = "Your standard drinking glass." icon_state = "glass_empty" amount_per_transfer_from_this = 5 - construction = list( - MAT_METAL=0, - MAT_GLASS=250 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=250" volume = 25 pickup_sound = 'sound/items/glass_containers/bottle_take-empty.ogg' dropped_sound = 'sound/items/glass_containers/bottle_put-empty.ogg' diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 0948925ea389..622c39d23841 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -183,10 +183,7 @@ icon = 'icons/obj/chemical.dmi' icon_state = "beaker" item_state = "beaker" - construction = list( - MAT_METAL=0, - MAT_GLASS=500 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=500" volume = 60 var/list/filling_states = list() possible_transfer_amounts = list(5,10,15,25,30,60) @@ -237,9 +234,7 @@ name = "large beaker" desc = "A large beaker." icon_state = "beakerlarge" - construction = list( - MAT_GLASS=5000 - ) + construction = MAT_GLASS+"=5000" volume = 150 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,150) @@ -249,9 +244,7 @@ name = "cryostasis beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions." icon_state = "beakernoreact" - construction = list( - MAT_GLASS=500 - ) + construction = MAT_GLASS+"=500" amount_per_transfer_from_this = 10 flags = OPENCONTAINER | NOREACT @@ -259,9 +252,7 @@ name = "bluespace beaker" desc = "A bluespace beaker, powered by experimental bluespace technology." icon_state = "beakerbluespace" - construction = list( - MAT_GLASS=5000 - ) + construction = MAT_GLASS+"=5000" volume = 300 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25,30,50,100,300) @@ -272,9 +263,7 @@ name = "vial" desc = "A small glass vial." icon_state = "vial" - construction = list( - MAT_GLASS=250 - ) + construction = MAT_GLASS+"=250" volume = 25 amount_per_transfer_from_this = 10 possible_transfer_amounts = list(5,10,15,25) @@ -338,10 +327,7 @@ icon = 'icons/obj/makeshift.dmi' icon_state = "bucket" item_state = "bucket" - construction = list( - MAT_METAL=200, - MAT_GLASS=0 - ) + construction = MAT_METAL+"=200;"+MAT_GLASS+"=0" w_class = SIZE_SMALL amount_per_transfer_from_this = 20 possible_transfer_amounts = list(10,20,30,50,70) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 06cacbc26f55..a0496394914b 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -11,9 +11,7 @@ icon = 'icons/obj/syringe.dmi' item_state = "syringe_0" icon_state = "0" - construction = list( - MAT_GLASS=150 - ) + construction = MAT_GLASS+"=150" amount_per_transfer_from_this = 5 possible_transfer_amounts = null //list(5,10,15) volume = 15 diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index 0b31176bc3d2..5243d3356d5e 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -13,9 +13,7 @@ force = 4.0 var/list/syringes = list() var/max_syringes = 1 - construction = list( - MAT_METAL=2000 - ) + construction = MAT_METAL+"=2000" can_suicide_with = FALSE /obj/item/weapon/gun/syringe/examine(mob/user) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index d6068cddc672..e76df4e57b6c 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -9,9 +9,7 @@ icon_state = "conpipe-s" anchored = FALSE density = FALSE - construction = list( - MAT_METAL=1850 - ) + construction = MAT_METAL+"=1850" level = 2 resistance_flags = CAN_BE_HIT var/ptype = 0 diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 5a8360a9e2ad..91246bc09b0b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -225,10 +225,7 @@ item_state = "electronic" flags = CONDUCT slot_flags = SLOT_FLAGS_BELT - construction = list( - MAT_METAL=3000, - MAT_GLASS=1300 - ) + construction = MAT_METAL+"=3000;"+MAT_GLASS+"=1300" origin_tech = "materials=1;engineering=1" var/mode = 1 diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 4d670f66efff..43bddd69e7d5 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -2330,10 +2330,7 @@ other types of metals and chemistry for reagents). icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" var/datum/design/blueprint /obj/item/weapon/disk/design_disk/atom_init() diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index c550ee6a095b..8c517894b49c 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -111,8 +111,9 @@ Note: Must be placed within 3 tiles of the R&D Console linked_console.files.experiments.do_research_object(loaded_item) if(linked_console.linked_lathe) - for(var/material as anything in loaded_item.construction) - linked_console.linked_lathe.loaded_materials[material].amount += round(min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (loaded_item.construction[material]*(decon_mod/10)))) + var/list/loaded_item_construction = params2numberlist(loaded_item.construction) + for(var/material as anything in loaded_item_construction) + linked_console.linked_lathe.loaded_materials[material].amount += round(min((linked_console.linked_lathe.max_material_storage - linked_console.linked_lathe.TotalMaterials()), (loaded_item_construction[material]*(decon_mod/10)))) if(istype(loaded_item,/obj/item/stack/sheet)) var/obj/item/stack/sheet/S = loaded_item diff --git a/code/modules/research/experiment.dm b/code/modules/research/experiment.dm index df6fc7646717..5076c4cbec92 100644 --- a/code/modules/research/experiment.dm +++ b/code/modules/research/experiment.dm @@ -319,9 +319,7 @@ w_class = SIZE_TINY throw_speed = 4 throw_range = 10 - construction = list( - MAT_METAL=200 - ) + construction = MAT_METAL+"=200" origin_tech = "engineering=1;biotech=1" var/datum/experiment_data/experiments @@ -405,10 +403,7 @@ icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" var/stored_points /obj/item/weapon/disk/research_points/atom_init() diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index a8b4a7afdf70..f04b73802cbf 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -235,8 +235,11 @@ Note: Must be placed west/left of and R&D console to function. // So consider them tests of "new" construction techniques for an item already known // #define MAGIC_2_MANIPULATORS_MAX_OUTPUT_CONSIDERING_IT_SHOULD_ROUND_UP_TO_30_PERCENT_COEFFICIENT 3.75 new_item.prototipify(min_reliability=linked_console.files.design_reliabilities[D.id] + efficiency_coeff * 12.5, max_reliability=70 + efficiency_coeff * 12.5) - for(var/material as anything in new_item.construction) - new_item.construction[material] /= efficiency_coeff + var/list/item_construction = params2numberlist(new_item.construction) + for(var/material as anything in item_construction) + item_construction[material] /= efficiency_coeff + + new_item.construction = numberlist2params(item_construction) linked_console.files.design_reliabilities[D.id] += linked_console.files.design_reliabilities[D.id] * (RND_RELIABILITY_EXPONENT ** linked_console.files.design_created_prototypes[D.id]) linked_console.files.design_reliabilities[D.id] = max(round(linked_console.files.design_reliabilities[D.id], 5), 1) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index b07eb713939e..039f3ee03b85 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -285,10 +285,7 @@ The tech datums are the actual "tech trees" that you improve through researching icon_state = "datadisk2" item_state = "card-id" w_class = SIZE_TINY - construction = list( - MAT_METAL=30, - MAT_GLASS=10 - ) + construction = MAT_METAL+"=30;"+MAT_GLASS+"=10" var/datum/tech/stored /obj/item/weapon/disk/tech_disk/atom_init() diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm index ff63264eb111..e30dc28f07d4 100644 --- a/code/modules/research/xenoarchaeology/chemistry.dm +++ b/code/modules/research/xenoarchaeology/chemistry.dm @@ -71,10 +71,7 @@ desc = "A small, open-topped glass container for delicate research samples. It sports a re-useable strip for labelling with a pen." icon = 'icons/obj/device.dmi' icon_state = "solution_tray" - construction = list( - MAT_METAL=0, - MAT_GLASS=5 - ) + construction = MAT_METAL+"=0;"+MAT_GLASS+"=5" w_class = SIZE_TINY amount_per_transfer_from_this = 1 possible_transfer_amounts = list(1, 2)