Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New circuits, primitive exporting and MODcircuit enhancements #550

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
10 changes: 6 additions & 4 deletions code/__DEFINES/wiremod.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,12 @@
#define SHELL_FLAG_CIRCUIT_UNMODIFIABLE (1<<5)

// Shell capacities. These can be converted to configs very easily later
#define SHELL_CAPACITY_TINY 12
#define SHELL_CAPACITY_SMALL 25
#define SHELL_CAPACITY_MEDIUM 50
#define SHELL_CAPACITY_LARGE 100
// NON-MODULE CHANGE START
#define SHELL_CAPACITY_TINY 25
#define SHELL_CAPACITY_SMALL 50
#define SHELL_CAPACITY_MEDIUM 100
#define SHELL_CAPACITY_LARGE 250
// NON-MODULE CHANGE END
#define SHELL_CAPACITY_VERY_LARGE 500

/// The maximum range a USB cable can be apart from a source
Expand Down
134 changes: 127 additions & 7 deletions code/modules/wiremod/core/component_printer.dm
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@

update_static_data_for_all_viewers()

/obj/machinery/module_duplicator/ui_act(action, list/params)
/obj/machinery/module_duplicator/ui_act(action, list/params, datum/tgui/ui) // NON-MODULAR CHANGE
. = ..()
if (.)
return
Expand All @@ -365,10 +365,43 @@
if ("print")
var/design_id = text2num(params["designId"])

if (design_id < 1 || design_id > length(scanned_designs))
/// NON-MODULAR CHANGE START

var/list/all_designs = scanned_designs
if (!isnull(SSpersistence.circuit_designs[ui.user.client?.ckey]))
all_designs = scanned_designs | SSpersistence.circuit_designs[ui.user.client?.ckey]

if (design_id < 1 || design_id > length(all_designs))
return TRUE

var/list/design = all_designs[design_id]

if (design["author_ckey"] != ui.user.client?.ckey && !(design in scanned_designs)) // Get away from here, cheater
return TRUE

var/list/design = scanned_designs[design_id]
var/list/design_data = null
if (islist(design["dupe_data"]))
design_data = json_decode(design["dupe_data"]["integrated_circuit"])
else
design_data = json_decode(design["dupe_data"])

if(!design_data)
say("Invalid design data.")
return FALSE

var/list/circuit_data = design_data["components"]
for(var/identifier in circuit_data)
var/list/component_data = circuit_data[identifier]
var/comp_type = text2path(component_data["type"])
if (!ispath(comp_type, /obj/item/circuit_component))
say("[component_data["name"]] component in this circuit has been recalled, unable to proceed.")
return TRUE

if (isnull(current_unlocked_designs[comp_type]) && !isnull(all_circuit_designs[comp_type]))
say("[component_data["name"]] component has not been researched yet.")
return TRUE

/// NON-MODULAR CHANGE END

if (materials.on_hold())
say("Mineral access is on hold, please contact the quartermaster.")
Expand All @@ -387,6 +420,33 @@
// SAFETY: eject_sheets checks for valid mats
materials.eject_sheets(material, amount)

// NON-MODULAR CHANGE START

if ("delete")
var/design_id = text2num(params["designId"])

var/list/all_designs = scanned_designs
if (!isnull(SSpersistence.circuit_designs[ui.user.client?.ckey]))
all_designs = scanned_designs | SSpersistence.circuit_designs[ui.user.client?.ckey]

if (design_id < 1 || design_id > length(all_designs))
return TRUE

var/list/design = all_designs[design_id]

if (design["author_ckey"] != ui.user.client?.ckey)
return TRUE

if(tgui_alert(ui.user, "Are you sure you want to delete [design["name"]]?", "Module Duplicator", list("Yes","No")) != "Yes")
return TRUE

if (!isnull(SSpersistence.circuit_designs[design["author_ckey"]]))
SSpersistence.circuit_designs[design["author_ckey"]] -= list(design)
scanned_designs -= list(design)
update_static_data_for_all_viewers()

// NON-MODULAR CHANGE END

return TRUE

/obj/machinery/module_duplicator/proc/print_module(list/design)
Expand Down Expand Up @@ -421,7 +481,7 @@
data["dupe_data"] = list()
module.save_data_to_list(data["dupe_data"])

data["name"] = module.display_name
data["name"] = "[module.display_name]" // NON-MODULAR CHANGE
data["desc"] = "A module that has been loaded in by [user]."
data["materials"] = list(GET_MATERIAL_REF(/datum/material/glass) = module.circuit_size * cost_per_component)
else if(istype(weapon, /obj/item/integrated_circuit))
Expand All @@ -431,7 +491,7 @@
return ..()
data["dupe_data"] = integrated_circuit.convert_to_json()

data["name"] = integrated_circuit.display_name
data["name"] = "[integrated_circuit.display_name]" // NON-MODULAR CHANGE
data["desc"] = "An integrated circuit that has been loaded in by [user]."

var/datum/design/integrated_circuit/circuit_design = SSresearch.techweb_design_by_id("integrated_circuit")
Expand All @@ -449,17 +509,38 @@
balloon_alert(user, "it needs a name!")
return ..()

for(var/list/component_data as anything in scanned_designs)
// NON-MODULAR CHANGE START

data["author_ckey"] = user.client?.ckey

var/list/all_designs = scanned_designs
if (!isnull(user.client?.ckey))
if (isnull(SSpersistence.circuit_designs[user.client?.ckey]))
SSpersistence.load_circuits_by_ckey(user.client?.ckey)
all_designs = scanned_designs | SSpersistence.circuit_designs[user.client?.ckey]

for(var/list/component_data as anything in all_designs)
if (component_data["author_ckey"] != user.client?.ckey && !(component_data in scanned_designs))
continue
if(component_data["name"] == data["name"])
balloon_alert(user, "name already exists!")
return ..()

// NON-MODULAR CHANGE END

flick("module-fab-scan", src)
addtimer(CALLBACK(src, PROC_REF(finish_module_scan), user, data), 1.4 SECONDS)

/obj/machinery/module_duplicator/proc/finish_module_scan(mob/user, data)
scanned_designs += list(data)

// NON-MODULAR CHANGE START
if (!isnull(user.client?.ckey))
if (isnull(SSpersistence.circuit_designs[user.client?.ckey]))
SSpersistence.load_circuits_by_ckey(user.client?.ckey)
SSpersistence.circuit_designs[user.client?.ckey] += list(data)
// NON-MODULAR CHANGE END

balloon_alert(user, "module has been saved.")
playsound(src, 'sound/machines/ping.ogg', 50)

Expand All @@ -475,8 +556,16 @@

var/list/designs = list()

// NON-MODULAR CHANGE START

var/list/all_designs = scanned_designs
if (!isnull(user.client?.ckey))
if (isnull(SSpersistence.circuit_designs[user.client?.ckey]))
SSpersistence.load_circuits_by_ckey(user.client?.ckey)
all_designs = scanned_designs | SSpersistence.circuit_designs[user.client?.ckey]

var/index = 1
for (var/list/design as anything in scanned_designs)
for (var/list/design as anything in all_designs)

var/list/cost = list()
var/list/materials = design["materials"]
Expand All @@ -490,11 +579,42 @@
"id" = "[index]",
"icon" = "integrated_circuit",
"categories" = list("/Saved Circuits"),
"can_delete" = (design["author_ckey"] == user.client?.ckey),
"print_error" = null,
)

var/list/invalid_list = list()
var/list/unresearched_list = list()
var/list/design_data = null
if (islist(design["dupe_data"]))
design_data = json_decode(design["dupe_data"]["integrated_circuit"])
else
design_data = json_decode(design["dupe_data"])

if(!design_data)
index++
continue

var/list/circuit_data = design_data["components"]
for(var/identifier in circuit_data)
var/list/component_data = circuit_data[identifier]
var/comp_type = text2path(component_data["type"])
if (!ispath(comp_type, /obj/item/circuit_component))
invalid_list |= component_data["name"]
else if (isnull(current_unlocked_designs[comp_type]) && !isnull(all_circuit_designs[comp_type]))
unresearched_list |= component_data["name"]

if (invalid_list.len)
designs["[index]"]["print_error"] = "Following components have been recalled: [invalid_list.Join(", ")]"
if (unresearched_list.len)
designs["[index]"]["print_error"] = (designs["[index]"]["print_error"] || "") + "[designs["[index]"]["print_error"] ? "; " : ""]Following components are yet to be researched: [unresearched_list.Join(", ")]"

index++

data["designs"] = designs

// NON-MODULAR CHANGE END

return data

/obj/machinery/module_duplicator/crowbar_act(mob/living/user, obj/item/tool)
Expand Down
1 change: 1 addition & 0 deletions code/modules/wiremod/core/duplicator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ GLOBAL_LIST_INIT(circuit_dupe_whitelisted_types, list(
var/list/component_data = list()

component_data["type"] = component.type
component_data["name"] = component.name // NON-MODULAR CHANGE

var/list/connections = list()
var/list/input_ports_stored_data = list()
Expand Down
12 changes: 11 additions & 1 deletion maplestation.dme
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// DM Environment file for tgstation.dme.

Check failure on line 1 in maplestation.dme

View workflow job for this annotation

GitHub Actions / Run Linters

Ticked File Enforcement

The include at line 6502 is out of order (#include "maplestation_modules\code\modules\wiremod\components\bci_click_intercept.dm", expected #include "maplestation_modules\code\modules\wiremod\shells.dm")
// All manual changes should be made outside the BEGIN_ and END_ blocks.
// New source code should be placed in .dm files: choose File/New --> Code File.
// BEGIN_INTERNALS
Expand Down Expand Up @@ -6498,7 +6498,17 @@
#include "maplestation_modules\code\modules\vending\_vending.dm"
#include "maplestation_modules\code\modules\vending\clothesmate.dm"
#include "maplestation_modules\code\modules\vending\wardrobes.dm"
#include "maplestation_modules\code\modules\wiremod\shells.dm"
#include "maplestation_modules\code\modules\wiremod\circuit_exporting.dm"
#include "maplestation_modules\code\modules\wiremod\components\bci_click_intercept.dm"
#include "maplestation_modules\code\modules\wiremod\components\camera.dm"
#include "maplestation_modules\code\modules\wiremod\components\cell_charge.dm"
#include "maplestation_modules\code\modules\wiremod\components\item_interaction.dm"
#include "maplestation_modules\code\modules\wiremod\components\mining.dm"
#include "maplestation_modules\code\modules\wiremod\components\mmi.dm"
#include "maplestation_modules\code\modules\wiremod\components\modsuit.dm"
#include "maplestation_modules\code\modules\wiremod\components\screen.dm"
#include "maplestation_modules\code\modules\wiremod\components\tile_scanner.dm"
#include "maplestation_modules\code\modules\wiremod\shells.dm"
#include "maplestation_modules\story_content\albert_equipment\code\albertclothing.dm"
#include "maplestation_modules\story_content\albert_equipment\code\albertitem.dm"
#include "maplestation_modules\story_content\armored_corps\code\clothing\aylie_cloak.dm"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,37 @@
// The module duplicate is also 1/4th the cost.
/obj/machinery/module_duplicator
cost_per_component = SHEET_MATERIAL_AMOUNT * 0.025

/datum/design/component/bci_click
name = "Click Interceptor Component"
id = "comp_bci_click"
build_path = /obj/item/circuit_component/click_interceptor

/datum/design/component/circuit_camera
name = "Camera Component"
id = "comp_circuit_camera"
build_path = /obj/item/circuit_component/circuit_camera

/datum/design/component/cell_charge
name = "Cell Charge Component"
id = "comp_cell_charge"
build_path = /obj/item/circuit_component/cell_charge

/datum/design/component/mining
name = "Mining Component"
id = "comp_mining"
build_path = /obj/item/circuit_component/mining

/datum/design/component/screen
name = "Screen Component"
id = "comp_screen"
build_path = /obj/item/circuit_component/screen

/datum/design/component/tile_scanner
name = "Tile Scanner Component"
id = "comp_tile_scanner"
build_path = /obj/item/circuit_component/tile_scanner

/datum/design/headset_shell
name = "Headset Shell"
desc = "A portable shell integrated with a radio headset."
Expand Down
14 changes: 14 additions & 0 deletions maplestation_modules/code/modules/research/techweb/all_nodes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,20 @@
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)

/datum/techweb_node/basic_circuitry
id_additions = list(
"comp_circuit_camera",
"comp_cell_charge",
"comp_mining",
"comp_screen",
"comp_tile_scanner",
)

/datum/techweb_node/bci_shells
id_additions = list(
"comp_bci_click",
)

/datum/techweb_node/adv_shells
id_additions = list(
"headset_shell",
Expand Down
Loading
Loading