From 4d105bb50fe4935986bb1cd1bac70f51274f41ea Mon Sep 17 00:00:00 2001 From: SandPoot <43283559+SandPoot@users.noreply.github.com> Date: Tue, 18 Aug 2020 01:22:14 -0300 Subject: [PATCH] A few fixes and stuff (#51) --- .../mob/living/carbon/human/examine.dm | 2 +- sandcode/code/game/mecha/mech_fabricator.dm | 487 ------------------ .../circuitboards/machine_circuitboards.dm | 9 - sandcode/code/modules/admin/verbs/fix_air.dm | 2 +- .../research/designs/machine_designs.dm | 8 - .../modules/research/techweb/all_nodes.dm | 8 - sandcode/icons/obj/robotics.dmi | Bin 11376 -> 0 bytes tgstation.dme | 1 - 8 files changed, 2 insertions(+), 515 deletions(-) delete mode 100644 sandcode/code/game/mecha/mech_fabricator.dm delete mode 100644 sandcode/icons/obj/robotics.dmi diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 7d6c5c7986..1f3e4ad458 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -371,7 +371,7 @@ if(!key) msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely.\n" else if(!client) - msg += "[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon.\n" + msg += "[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)), 1)] minutes. [t_He] may snap out of it soon.\n" //SKYRAT CHANGE - ssd indicator if(digitalcamo) msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly inhuman manner.\n" diff --git a/sandcode/code/game/mecha/mech_fabricator.dm b/sandcode/code/game/mecha/mech_fabricator.dm deleted file mode 100644 index 396da01ed5..0000000000 --- a/sandcode/code/game/mecha/mech_fabricator.dm +++ /dev/null @@ -1,487 +0,0 @@ -/obj/machinery/mecha_part_fabricator_adv - icon = 'sandcode/icons/obj/robotics.dmi' - icon_state = "fab-idle" - name = "advanced exosuit fabricator" - desc = "Nothing is being built." - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 20 - active_power_usage = 5000 - req_access = list(ACCESS_ROBOTICS) - circuit = /obj/item/circuitboard/machine/mechfab_adv - var/time_coeff = 1 - var/component_coeff = 1 - var/datum/techweb/specialized/autounlocking/exofab/stored_research - var/sync = 0 - var/part_set - var/datum/design/being_built - var/list/queue = list() - var/processing_queue = 0 - var/screen = "main" - var/link_on_init = TRUE - var/temp - var/offstation_security_levels = TRUE - var/datum/component/remote_materials/rmat - var/list/part_sets = list( - "Cyborg", - "Ripley", - "Firefighter", - "Odysseus", - "Gygax", - "Medical-Spec Gygax", - "Durand", - "H.O.N.K", - "Phazon", - "Exosuit Equipment", - "Exosuit Ammunition", - "Cyborg Upgrade Modules", - "Misc" - ) - -/obj/machinery/mecha_part_fabricator_adv/Initialize(mapload) - stored_research = new - rmat = AddComponent(/datum/component/remote_materials, "mechfab", mapload && link_on_init) - RefreshParts() //Recalculating local material sizes if the fab isn't linked - return ..() - -/obj/machinery/mecha_part_fabricator_adv/examine(mob/user) - . = ..() - if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Storing up to [rmat.local_size] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%.
" - -/obj/machinery/mecha_part_fabricator_adv/RefreshParts() - var/T = 0 - - //maximum stocking amount (default 300000, 600000 at T4) - for(var/obj/item/stock_parts/matter_bin/M in component_parts) - T += M.rating - rmat.set_local_size((200000 + (T*50000))) - - //resources adjustment coefficient (1 -> 0.85 -> 0.7 -> 0.55) - T = 1.15 - for(var/obj/item/stock_parts/micro_laser/Ma in component_parts) - T -= Ma.rating*0.15 - component_coeff = T - - //building time adjustment coefficient (1 -> 0.8 -> 0.6) - T = -1 - for(var/obj/item/stock_parts/manipulator/Ml in component_parts) - T += Ml.rating - time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01) - -/obj/machinery/mecha_part_fabricator_adv/emag_act() - . = ..() - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - req_access = list() - INVOKE_ASYNC(src, .proc/error_action_sucessful) - return TRUE - -/obj/machinery/mecha_part_fabricator_adv/proc/error_action_sucessful() - say("DB error \[Code 0x00F1\]") - sleep(10) - say("Attempting auto-repair...") - sleep(15) - say("User DB corrupted \[Code 0x00FA\]. Truncating data structure...") - sleep(30) - say("User DB truncated. Please contact your Nanotrasen system operator for future assistance.") - - -/obj/machinery/mecha_part_fabricator_adv/proc/output_parts_list(set_name) - var/output = "" - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(!(set_name in D.category)) - continue - output += "
[output_part_info(D)]
\[" - if(check_clearance(D) && check_resources(D)) - output += "Build | " - output += "Add to queue\]\[?\]
" - return output - -/obj/machinery/mecha_part_fabricator_adv/proc/check_clearance(datum/design/D) - if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) && !ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)) - return FALSE - return TRUE - -/obj/machinery/mecha_part_fabricator_adv/proc/output_part_info(datum/design/D) - var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) - var/sec_text = "" - if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA)) - sec_text = " (Allowed security levels: " - for(var/n in D.min_security_level to D.max_security_level) - sec_text += NUM2SECLEVEL(n) - if(n + 1 <= D.max_security_level) - sec_text += ", " - sec_text += ") " - var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [sec_text][get_construction_time_w_coeff(D)/10]sec" - return output - -/obj/machinery/mecha_part_fabricator_adv/proc/output_part_cost(datum/design/D) - var/i = 0 - var/output - for(var/c in D.materials) - var/datum/material/M = c - output += "[i?" | ":null][get_resource_cost_w_coeff(D, M)] [M.name]" - i++ - return output - -/obj/machinery/mecha_part_fabricator_adv/proc/output_available_resources() - var/output - var/datum/component/material_container/materials = rmat.mat_container - - if(materials) - for(var/mat_id in materials.materials) - var/datum/material/M = mat_id - var/amount = materials.materials[mat_id] - var/ref = REF(M) - output += "[M.name]: [amount] cm³" - if(amount >= MINERAL_MATERIAL_AMOUNT) - output += "- Remove \[1\]" - if(amount >= (MINERAL_MATERIAL_AMOUNT * 10)) - output += " | \[10\]" - output += " | \[50\]" - output += "
" - else - output += "No material storage connected, please contact the quartermaster.
" - return output - -/obj/machinery/mecha_part_fabricator_adv/proc/get_resources_w_coeff(datum/design/D) - var/list/resources = list() - for(var/R in D.materials) - resources[R] = get_resource_cost_w_coeff(D, R) - return resources - -/obj/machinery/mecha_part_fabricator_adv/proc/check_resources(datum/design/D) - if(D.reagents_list.len) // No reagents storage - no reagent designs. - return FALSE - var/datum/component/material_container/materials = rmat.mat_container - if(materials.has_materials(get_resources_w_coeff(D))) - return TRUE - return FALSE - -/obj/machinery/mecha_part_fabricator_adv/proc/build_part(datum/design/D) - var/list/res_coef = get_resources_w_coeff(D) - - var/datum/component/material_container/materials = rmat.mat_container - if (!materials) - say("No access to material storage, please contact the quartermaster.") - return FALSE - if (rmat.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return FALSE - if(!check_resources(D)) - say("Not enough resources. Queue processing stopped.") - return FALSE - being_built = D - desc = "It's building \a [initial(D.name)]." - materials.use_materials(res_coef) - rmat.silo_log(src, "built", -1, "[D.name]", res_coef) - - add_overlay("fab-active") - use_power = ACTIVE_POWER_USE - updateUsrDialog() - sleep(get_construction_time_w_coeff(D)) - use_power = IDLE_POWER_USE - cut_overlay("fab-active") - desc = initial(desc) - - var/location = get_step(src,(dir)) - var/obj/item/I = new D.build_path(location) - I.set_custom_materials(res_coef) - say("\The [I] is complete.") - being_built = null - - updateUsrDialog() - - return TRUE - -/obj/machinery/mecha_part_fabricator_adv/proc/update_queue_on_page() - send_byjax(usr,"mecha_fabricator.browser","queue",list_queue()) - return - -/obj/machinery/mecha_part_fabricator_adv/proc/add_part_set_to_queue(set_name) - if(set_name in part_sets) - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(set_name in D.category) - add_to_queue(D) - -/obj/machinery/mecha_part_fabricator_adv/proc/add_to_queue(D) - if(!istype(queue)) - queue = list() - if(D) - queue[++queue.len] = D - return queue.len - -/obj/machinery/mecha_part_fabricator_adv/proc/remove_from_queue(index) - if(!isnum(index) || !ISINTEGER(index) || !istype(queue) || (index<1 || index>queue.len)) - return FALSE - queue.Cut(index,++index) - return TRUE - -/obj/machinery/mecha_part_fabricator_adv/proc/process_queue() - var/datum/design/D = queue[1] - if(!D) - remove_from_queue(1) - if(queue.len) - return process_queue() - else - return - temp = null - while(D) - if(stat&(NOPOWER|BROKEN)) - return FALSE - if(!check_clearance(D)) - say("Security level not met. Queue processing stopped.") - temp = {"Security level not met to build next part.
- Try again | Return"} - return FALSE - if(!check_resources(D)) - say("Not enough resources. Queue processing stopped.") - temp = {"Not enough resources to build next part.
-
Try again | Return"} - return FALSE - remove_from_queue(1) - build_part(D) - D = listgetindex(queue, 1) - say("Queue processing finished successfully.") - -/obj/machinery/mecha_part_fabricator_adv/proc/list_queue() - var/output = "Queue contains:" - if(!istype(queue) || !queue.len) - output += "
Nothing" - else - output += "
    " - var/i = 0 - for(var/datum/design/D in queue) - i++ - var/obj/part = D.build_path - output += "" - output += initial(part.name) + " - " - output += "[i>1?"":null] " - output += "[i↓":null] " - output += "Remove" - - output += "
" - output += "\[Process queue | Clear queue\]" - return output - -/obj/machinery/mecha_part_fabricator_adv/proc/sync() - temp = "Updating local R&D database..." - updateUsrDialog() - sleep(30) //only sleep if called by user - - for(var/obj/machinery/computer/rdconsole/RDC in oview(7,src)) - RDC.stored_research.copy_research_to(stored_research) - temp = "Processed equipment designs.
" - //check if the tech coefficients have changed - temp += "Return" - - updateUsrDialog() - say("Successfully synchronized with R&D server.") - return - - temp = "Unable to connect to local R&D Database.
Please check your connections and try again.
Return" - updateUsrDialog() - return - -/obj/machinery/mecha_part_fabricator_adv/proc/get_resource_cost_w_coeff(datum/design/D, resource, roundto = 1) - return round(D.materials[resource]*component_coeff, roundto) - -/obj/machinery/mecha_part_fabricator_adv/proc/get_construction_time_w_coeff(datum/design/D, roundto = 1) //aran - return round(initial(D.construction_time)*time_coeff, roundto) - -/obj/machinery/mecha_part_fabricator_adv/ui_interact(mob/user as mob) - . = ..() - var/dat, left_part - user.set_machine(src) - var/turf/exit = get_step(src,(dir)) - if(exit.density) - say("Error! Part outlet is obstructed.") - return - if(temp) - left_part = temp - else if(being_built) - var/obj/I = being_built.build_path - left_part = {"Building [initial(I.name)].
- Please wait until completion...
"} - else - switch(screen) - if("main") - left_part = output_available_resources()+"
" - left_part += "Sync with R&D servers
" - for(var/part_set in part_sets) - left_part += "[part_set] - \[Add all parts to queue\]
" - if("parts") - left_part += output_parts_list(part_set) - left_part += "
Return" - dat = {" - - - [name] data - - - - - - - - - -
- [left_part] - - [list_queue()] -
- - "} - user << browse(dat, "window=mecha_fabricator;size=1000x430") - onclose(user, "mecha_fabricator") - return - -/obj/machinery/mecha_part_fabricator_adv/Topic(href, href_list) - if(..()) - return - if(href_list["part_set"]) - var/tpart_set = href_list["part_set"] - if(tpart_set) - if(tpart_set=="clear") - part_set = null - else - part_set = tpart_set - screen = "parts" - if(href_list["part"]) - var/T = href_list["part"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - if(!processing_queue) - build_part(D) - else - add_to_queue(D) - break - if(href_list["add_to_queue"]) - var/T = href_list["add_to_queue"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - add_to_queue(D) - break - return update_queue_on_page() - if(href_list["remove_from_queue"]) - remove_from_queue(text2num(href_list["remove_from_queue"])) - return update_queue_on_page() - if(href_list["partset_to_queue"]) - add_part_set_to_queue(href_list["partset_to_queue"]) - return update_queue_on_page() - if(href_list["process_queue"]) - spawn(0) - if(processing_queue || being_built) - return FALSE - processing_queue = 1 - process_queue() - processing_queue = 0 - if(href_list["clear_temp"]) - temp = null - if(href_list["screen"]) - screen = href_list["screen"] - if(href_list["queue_move"] && href_list["index"]) - var/index = text2num(href_list["index"]) - var/new_index = index + text2num(href_list["queue_move"]) - if(isnum(index) && isnum(new_index) && ISINTEGER(index) && ISINTEGER(new_index)) - if(ISINRANGE(new_index,1,queue.len)) - queue.Swap(index,new_index) - return update_queue_on_page() - if(href_list["clear_queue"]) - queue = list() - return update_queue_on_page() - if(href_list["sync"]) - sync() - if(href_list["part_desc"]) - var/T = href_list["part_desc"] - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(D.build_type & MECHFAB) - if(D.id == T) - var/obj/part = D.build_path - temp = {"

[initial(part.name)] description:

- [initial(part.desc)]
- Return - "} - break - - if(href_list["remove_mat"] && href_list["material"]) - var/datum/material/Mat = locate(href_list["material"]) - eject_sheets(Mat, text2num(href_list["remove_mat"])) - - updateUsrDialog() - return - -/obj/machinery/mecha_part_fabricator_adv/proc/do_process_queue() - if(processing_queue || being_built) - return FALSE - processing_queue = 1 - process_queue() - processing_queue = 0 - -/obj/machinery/mecha_part_fabricator_adv/proc/eject_sheets(eject_sheet, eject_amt) - var/datum/component/material_container/mat_container = rmat.mat_container - if (!mat_container) - say("No access to material storage, please contact the quartermaster.") - return 0 - if (rmat.on_hold()) - say("Mineral access is on hold, please contact the quartermaster.") - return 0 - var/count = mat_container.retrieve_sheets(text2num(eject_amt), eject_sheet, drop_location()) - var/list/matlist = list() - matlist[eject_sheet] = text2num(eject_amt) - rmat.silo_log(src, "ejected", -count, "sheets", matlist) - return count - -/obj/machinery/mecha_part_fabricator_adv/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted) - var/stack_name = material2name(id_inserted) - add_overlay("fab-load-[stack_name]") - addtimer(CALLBACK(src, /atom/proc/cut_overlay, "fab-load-[stack_name]"), 10) - updateUsrDialog() - -/obj/machinery/mecha_part_fabricator_adv/attackby(obj/item/W, mob/user, params) - if(default_deconstruction_screwdriver(user, "fab-o", "fab-idle", W)) - return TRUE - - if(default_deconstruction_crowbar(W)) - return TRUE - - return ..() - -/obj/machinery/mecha_part_fabricator_adv/proc/material2name(ID) - return copytext(ID,2) - -/obj/machinery/mecha_part_fabricator_adv/proc/is_insertion_ready(mob/user) - if(panel_open) - to_chat(user, "You can't load [src] while it's opened!") - return FALSE - if(being_built) - to_chat(user, "\The [src] is currently processing! Please wait until completion.") - return FALSE - - return TRUE - -/obj/machinery/mecha_part_fabricator_adv/maint - link_on_init = FALSE diff --git a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm index 3dd6a9ada6..ab97d07d54 100644 --- a/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/sandcode/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1,12 +1,3 @@ -/obj/item/circuitboard/machine/mechfab_adv - name = "advanced exosuit fabricator (Machine board)" - build_path = /obj/machinery/mecha_part_fabricator_adv - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1) - /obj/item/circuitboard/machine/pacman/mclunky name = "McLunky-type Generator (Machine Board)" build_path = /obj/machinery/power/port_gen/pacman/mclunky diff --git a/sandcode/code/modules/admin/verbs/fix_air.dm b/sandcode/code/modules/admin/verbs/fix_air.dm index 2798d5543f..4281491e39 100644 --- a/sandcode/code/modules/admin/verbs/fix_air.dm +++ b/sandcode/code/modules/admin/verbs/fix_air.dm @@ -1,7 +1,7 @@ // Proc taken from yogstation, credit to nichlas0010 for the original /client/proc/fix_air(turf/open/T in world) set name = "Fix Air" - set category = "Admin - Game" + set category = "Admin" set desc = "Fixes air in specified radius." if(!holder) diff --git a/sandcode/code/modules/research/designs/machine_designs.dm b/sandcode/code/modules/research/designs/machine_designs.dm index f073c4fd89..fa8cac12f7 100644 --- a/sandcode/code/modules/research/designs/machine_designs.dm +++ b/sandcode/code/modules/research/designs/machine_designs.dm @@ -14,14 +14,6 @@ category = list("Teleportation Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/mecha_part_fabricator_adv - name= "Machine Design (Advanced exosuit fabricator)" - desc = "An advanced version of the exosuit fabricator that can link to oresilos!" - id = "mech_fab_adv" - build_path = /obj/item/circuitboard/machine/mechfab_adv - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - /datum/design/mclunky_electronics name = "Machine Design (McLunky Circuit Board)" desc = "Now just give the parts to the botanist and they could perhaps be making power for you!" diff --git a/sandcode/code/modules/research/techweb/all_nodes.dm b/sandcode/code/modules/research/techweb/all_nodes.dm index f3a8a03924..890d423bcd 100644 --- a/sandcode/code/modules/research/techweb/all_nodes.dm +++ b/sandcode/code/modules/research/techweb/all_nodes.dm @@ -23,14 +23,6 @@ design_ids = list("telepad", "telesci_console") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) -/datum/techweb_node/adv_mechfab - id = "advanced_mechfab" - display_name = "Advanced Exosuit Fabricator" - description = "Studying more about devices you get to know how to make a linkable exosuit fabricator" - prereq_ids = list("datatheory") - design_ids = list("mech_fab_adv") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3000) - /datum/techweb_node/adv_toolset_implant id = "adv_toolset_implant" display_name = "Advanced Toolset Implant" diff --git a/sandcode/icons/obj/robotics.dmi b/sandcode/icons/obj/robotics.dmi deleted file mode 100644 index aa1c02010e6a96233c8936abae89fe21bed62dd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11376 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 diff --git a/tgstation.dme b/tgstation.dme index d6ea1a846e..0497784ce4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3584,7 +3584,6 @@ #include "sandcode\code\game\machinery\posialert.dm" #include "sandcode\code\game\machinery\computer\arcade\tetris.dm" #include "sandcode\code\game\machinery\pipe\construction.dm" -#include "sandcode\code\game\mecha\mech_fabricator.dm" #include "sandcode\code\game\mecha\mecha_construction_paths.dm" #include "sandcode\code\game\mecha\mecha_parts.dm" #include "sandcode\code\game\objects\effects\contraband.dm"