Skip to content

Commit

Permalink
Merge pull request #22458 from Kearel/importedCircuits
Browse files Browse the repository at this point in the history
Adds TG Circuits
  • Loading branch information
comma committed Aug 21, 2018
2 parents bb4a38a + 9b20844 commit 7711d7b
Show file tree
Hide file tree
Showing 94 changed files with 8,249 additions and 3,983 deletions.
58 changes: 40 additions & 18 deletions baystation12.dme
Expand Up @@ -36,6 +36,7 @@
#include "code\__defines\feedback.dm"
#include "code\__defines\flags.dm"
#include "code\__defines\gamemode.dm"
#include "code\__defines\integrated_circuits.dm"
#include "code\__defines\inventory_sizes.dm"
#include "code\__defines\items_clothing.dm"
#include "code\__defines\languages.dm"
Expand Down Expand Up @@ -183,6 +184,7 @@
#include "code\controllers\subsystems\xenoarch.dm"
#include "code\controllers\subsystems\initialization\materials.dm"
#include "code\controllers\subsystems\processing\airflow.dm"
#include "code\controllers\subsystems\processing\circuit.dm"
#include "code\controllers\subsystems\processing\fast_process.dm"
#include "code\controllers\subsystems\processing\icon_updates.dm"
#include "code\controllers\subsystems\processing\mobs.dm"
Expand Down Expand Up @@ -1543,24 +1545,44 @@
#include "code\modules\hydroponics\trays\tray_tools.dm"
#include "code\modules\hydroponics\trays\tray_update_icons.dm"
#include "code\modules\integrated_electronics\_defines.dm"
#include "code\modules\integrated_electronics\arithmetic.dm"
#include "code\modules\integrated_electronics\assemblies.dm"
#include "code\modules\integrated_electronics\converters.dm"
#include "code\modules\integrated_electronics\coordinate.dm"
#include "code\modules\integrated_electronics\data_transfer.dm"
#include "code\modules\integrated_electronics\filters.dm"
#include "code\modules\integrated_electronics\input_output.dm"
#include "code\modules\integrated_electronics\logic.dm"
#include "code\modules\integrated_electronics\machine_printer.dm"
#include "code\modules\integrated_electronics\manipulation.dm"
#include "code\modules\integrated_electronics\memory.dm"
#include "code\modules\integrated_electronics\sensors.dm"
#include "code\modules\integrated_electronics\shells.dm"
#include "code\modules\integrated_electronics\time.dm"
#include "code\modules\integrated_electronics\tools.dm"
#include "code\modules\integrated_electronics\~defines.dm"
#include "code\modules\integrated_electronics\prefab\prefab.dm"
#include "code\modules\integrated_electronics\prefab\prefabs.dm"
#include "code\modules\integrated_electronics\core\analyzer.dm"
#include "code\modules\integrated_electronics\core\assemblies.dm"
#include "code\modules\integrated_electronics\core\debugger.dm"
#include "code\modules\integrated_electronics\core\detailer.dm"
#include "code\modules\integrated_electronics\core\helpers.dm"
#include "code\modules\integrated_electronics\core\integrated_circuit.dm"
#include "code\modules\integrated_electronics\core\pins.dm"
#include "code\modules\integrated_electronics\core\printer.dm"
#include "code\modules\integrated_electronics\core\saved_circuits.dm"
#include "code\modules\integrated_electronics\core\wirer.dm"
#include "code\modules\integrated_electronics\core\prefab\prefab.dm"
#include "code\modules\integrated_electronics\core\prefab\prefabs.dm"
#include "code\modules\integrated_electronics\core\special_pins\boolean_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\char_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\color_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\dir_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\index_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\list_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\number_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\ref_pin.dm"
#include "code\modules\integrated_electronics\core\special_pins\string_pin.dm"
#include "code\modules\integrated_electronics\passive\passive.dm"
#include "code\modules\integrated_electronics\passive\power.dm"
#include "code\modules\integrated_electronics\subtypes\access.dm"
#include "code\modules\integrated_electronics\subtypes\arithmetic.dm"
#include "code\modules\integrated_electronics\subtypes\converters.dm"
#include "code\modules\integrated_electronics\subtypes\data_transfer.dm"
#include "code\modules\integrated_electronics\subtypes\input.dm"
#include "code\modules\integrated_electronics\subtypes\lists.dm"
#include "code\modules\integrated_electronics\subtypes\logic.dm"
#include "code\modules\integrated_electronics\subtypes\manipulation.dm"
#include "code\modules\integrated_electronics\subtypes\memory.dm"
#include "code\modules\integrated_electronics\subtypes\output.dm"
#include "code\modules\integrated_electronics\subtypes\power.dm"
#include "code\modules\integrated_electronics\subtypes\reagents.dm"
#include "code\modules\integrated_electronics\subtypes\smart.dm"
#include "code\modules\integrated_electronics\subtypes\time.dm"
#include "code\modules\integrated_electronics\subtypes\trig.dm"
#include "code\modules\item_worth\_helpers.dm"
#include "code\modules\item_worth\item_worth.dm"
#include "code\modules\item_worth\material_weapons.dm"
Expand Down
17 changes: 17 additions & 0 deletions code/__defines/colors.dm
Expand Up @@ -89,4 +89,21 @@

#define COLOR_BLOOD_HUMAN "#a10808"

//Color defines used by the assembly detailer.
#define COLOR_ASSEMBLY_BLACK "#545454"
#define COLOR_ASSEMBLY_BGRAY "#9497ab"
#define COLOR_ASSEMBLY_WHITE "#e2e2e2"
#define COLOR_ASSEMBLY_RED "#cc4242"
#define COLOR_ASSEMBLY_ORANGE "#e39751"
#define COLOR_ASSEMBLY_BEIGE "#af9366"
#define COLOR_ASSEMBLY_BROWN "#97670e"
#define COLOR_ASSEMBLY_GOLD "#aa9100"
#define COLOR_ASSEMBLY_YELLOW "#ceca2b"
#define COLOR_ASSEMBLY_GURKHA "#999875"
#define COLOR_ASSEMBLY_LGREEN "#789876"
#define COLOR_ASSEMBLY_GREEN "#44843c"
#define COLOR_ASSEMBLY_LBLUE "#5d99be"
#define COLOR_ASSEMBLY_BLUE "#38559e"
#define COLOR_ASSEMBLY_PURPLE "#6f6192"

#define RANDOM_RGB rgb(rand(0,255), rand(0,255), rand(0,255))
48 changes: 48 additions & 0 deletions code/__defines/integrated_circuits.dm
@@ -0,0 +1,48 @@
#define IC_INPUT "I"
#define IC_OUTPUT "O"
#define IC_ACTIVATOR "A"

// Pin functionality.
#define DATA_CHANNEL "data channel"
#define PULSE_CHANNEL "pulse channel"

// Methods of obtaining a circuit.
#define IC_SPAWN_DEFAULT 1 // If the circuit comes in the default circuit box and able to be printed in the IC printer.
#define IC_SPAWN_RESEARCH 2 // If the circuit design will be available in the IC printer after upgrading it.

// Categories that help differentiate circuits that can do different tipes of actions
#define IC_ACTION_MOVEMENT (1<<0) // If the circuit can move the assembly
#define IC_ACTION_COMBAT (1<<1) // If the circuit can cause harm
#define IC_ACTION_LONG_RANGE (1<<2) // If the circuit communicate with something outside of the assembly

// Displayed along with the pin name to show what type of pin it is.
#define IC_FORMAT_ANY "\<ANY\>"
#define IC_FORMAT_STRING "\<TEXT\>"
#define IC_FORMAT_CHAR "\<CHAR\>"
#define IC_FORMAT_COLOR "\<COLOR\>"
#define IC_FORMAT_NUMBER "\<NUM\>"
#define IC_FORMAT_DIR "\<DIR\>"
#define IC_FORMAT_BOOLEAN "\<BOOL\>"
#define IC_FORMAT_REF "\<REF\>"
#define IC_FORMAT_LIST "\<LIST\>"
#define IC_FORMAT_INDEX "\<INDEX\>"

#define IC_FORMAT_PULSE "\<PULSE\>"

// Used inside input/output list to tell the constructor what pin to make.
#define IC_PINTYPE_ANY /datum/integrated_io
#define IC_PINTYPE_STRING /datum/integrated_io/string
#define IC_PINTYPE_CHAR /datum/integrated_io/char
#define IC_PINTYPE_COLOR /datum/integrated_io/color
#define IC_PINTYPE_NUMBER /datum/integrated_io/number
#define IC_PINTYPE_DIR /datum/integrated_io/dir
#define IC_PINTYPE_BOOLEAN /datum/integrated_io/boolean
#define IC_PINTYPE_REF /datum/integrated_io/ref
#define IC_PINTYPE_LIST /datum/integrated_io/lists
#define IC_PINTYPE_INDEX /datum/integrated_io/index

#define IC_PINTYPE_PULSE_IN /datum/integrated_io/activate
#define IC_PINTYPE_PULSE_OUT /datum/integrated_io/activate/out

// Data limits.
#define IC_MAX_LIST_LENGTH 500
7 changes: 7 additions & 0 deletions code/__defines/mobs.dm
Expand Up @@ -294,3 +294,10 @@
#define AURA_TYPE_LIFE "Life"

#define SPECIES_BLOOD_DEFAULT 560

#define SLIME_EVOLUTION_THRESHOLD 10

//Used in mob/proc/get_input
#define MOB_INPUT_TEXT "text"
#define MOB_INPUT_MESSAGE "message"
#define MOB_INPUT_NUM "num"
1 change: 1 addition & 0 deletions code/__defines/subsystem-priority.dm
Expand Up @@ -15,6 +15,7 @@
#define SS_PRIORITY_ALARM 20 // Alarm processing.
#define SS_PRIORITY_EVENT 20 // Event processing and queue handling.
#define SS_PRIORITY_SHUTTLE 20 // Shuttle movement.
#define SS_PRIORITY_CIRCUIT 20 // Processing Circuit's ticks and all that.
#define SS_PRIORITY_RADIATION 20 // Radiation processing and cache updates.
#define SS_PRIORITY_AIRFLOW 15 // Object movement from ZAS airflow.
#define SS_PRIORITY_INACTIVITY 10 // Idle kicking.
Expand Down
11 changes: 6 additions & 5 deletions code/__defines/subsystems.dm
Expand Up @@ -43,11 +43,12 @@
// Subsystems shutdown in the reverse of the order they initialize in
// The numbers just define the ordering, they are meaningless otherwise.

#define SS_INIT_GARBAGE 8
#define SS_INIT_MATERIALS 7
#define SS_INIT_ANTAGS 6
#define SS_INIT_SKYBOX 5
#define SS_INIT_MAPPING 4
#define SS_INIT_GARBAGE 9
#define SS_INIT_MATERIALS 8
#define SS_INIT_ANTAGS 7
#define SS_INIT_SKYBOX 6
#define SS_INIT_MAPPING 5
#define SS_INIT_CIRCUIT 4
#define SS_INIT_ATOMS 3
#define SS_INIT_ICON_UPDATE 2
#define SS_INIT_MACHINES 1
Expand Down
4 changes: 0 additions & 4 deletions code/_helpers/global_access.dm
Expand Up @@ -487,8 +487,6 @@
return global.init;
if("initialization_stage")
return global.initialization_stage;
if("integrated_circuit_blacklist")
return global.integrated_circuit_blacklist;
if("intents")
return global.intents;
if("intercom_range_display_status")
Expand Down Expand Up @@ -1470,8 +1468,6 @@
global.init=newval;
if("initialization_stage")
global.initialization_stage=newval;
if("integrated_circuit_blacklist")
global.integrated_circuit_blacklist=newval;
if("intents")
global.intents=newval;
if("intercom_range_display_status")
Expand Down
24 changes: 24 additions & 0 deletions code/_helpers/type2type.dm
Expand Up @@ -235,3 +235,27 @@
//Splits the text of a file at seperator and returns them in a list.
/world/proc/file2list(filename, seperator="\n")
return splittext(file2text(filename), seperator)

/proc/str2hex(str)
if(!istext(str)||!str)
return
var/r
var/c
for(var/i = 1 to length(str))
c= text2ascii(str,i)
r+= num2hex(c)
return r

// Decodes hex to raw byte string.
// If safe=TRUE, returns null on incorrect input strings instead of CRASHing
/proc/hex2str(str, safe=FALSE)
if(!istext(str)||!str)
return
var/r
var/c
for(var/i = 1 to length(str)/2)
c = hex2num(copytext(str,i*2-1,i*2+1), safe)
if(isnull(c))
return null
r += ascii2text(c)
return r
5 changes: 5 additions & 0 deletions code/controllers/configuration.dm
Expand Up @@ -218,6 +218,8 @@ var/list/gamemode_cache = list()

var/max_gear_cost = 10 // Used in chargen for accessory loadout limit. 0 disables loadout, negative allows infinite points.

var/allow_ic_printing = TRUE //Whether players should be allowed to print IC circuits from scripts.

/datum/configuration/New()
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
for (var/T in L)
Expand Down Expand Up @@ -642,6 +644,9 @@ var/list/gamemode_cache = list()
if("disable_welder_vision")
config.welder_vision = 0

if("disable_circuit_printing")
config.allow_ic_printing = FALSE

if("allow_extra_antags")
config.allow_extra_antags = 1

Expand Down
59 changes: 59 additions & 0 deletions code/controllers/subsystems/processing/circuit.dm
@@ -0,0 +1,59 @@
//Additional helper procs found in /code/modules/integrated_electgronics/core/saved_circuits.dm

PROCESSING_SUBSYSTEM_DEF(circuit)
name = "Circuit"
priority = SS_PRIORITY_CIRCUIT
init_order = SS_INIT_CIRCUIT
flags = SS_BACKGROUND

var/cipherkey

var/list/all_components = list() // Associative list of [component_name]:[component_path] pairs
var/list/cached_components = list() // Associative list of [component_path]:[component] pairs
var/list/all_assemblies = list() // Associative list of [assembly_name]:[assembly_path] pairs
var/list/cached_assemblies = list() // Associative list of [assembly_path]:[assembly] pairs
var/list/all_circuits = list() // Associative list of [circuit_name]:[circuit_path] pairs
var/list/circuit_fabricator_recipe_list = list() // Associative list of [category_name]:[list_of_circuit_paths] pairs
var/cost_multiplier = SHEET_MATERIAL_AMOUNT / 10 // Each circuit cost unit is 200cm3

/datum/controller/subsystem/processing/circuit/Initialize()
SScircuit.cipherkey = uppertext(generateRandomString(2000+rand(0,10)))
circuits_init()
. = ..()

/datum/controller/subsystem/processing/circuit/proc/circuits_init()
//Cached lists for free performance
var/atom/def = /obj/item/integrated_circuit
var/default_name = initial(def.name)
for(var/path in typesof(/obj/item/integrated_circuit))
var/obj/item/integrated_circuit/IC = path
var/name = initial(IC.name)
if(name == default_name)
continue
all_components[name] = path // Populating the component lists
cached_components[IC] = new path

if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH)))
continue

var/category = initial(IC.category_text)
if(!circuit_fabricator_recipe_list[category])
circuit_fabricator_recipe_list[category] = list()
var/list/category_list = circuit_fabricator_recipe_list[category]
category_list += IC // Populating the fabricator categories

for(var/path in typesof(/obj/item/device/electronic_assembly))
var/obj/item/device/electronic_assembly/A = path
var/name = initial(A.name)
all_assemblies[name] = path
cached_assemblies[A] = new path

circuit_fabricator_recipe_list["Assemblies"] = subtypesof(/obj/item/device/electronic_assembly) - list(/obj/item/device/electronic_assembly/medium, /obj/item/device/electronic_assembly/large, /obj/item/device/electronic_assembly/drone, /obj/item/device/electronic_assembly/wallmount)

circuit_fabricator_recipe_list["Tools"] = list(
/obj/item/device/integrated_electronics/wirer,
/obj/item/device/integrated_electronics/debugger,
/obj/item/device/integrated_electronics/analyzer,
/obj/item/device/integrated_electronics/detailer,
/obj/item/weapon/card/data
)
Expand Up @@ -69,14 +69,4 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_DATA = 4)
req_components = list(
/obj/item/stack/cable_coil = 15)

/obj/item/weapon/circuitboard/integrated_printer
name = "Circuit board (Integrated Circuit Printer)"
build_path = /obj/machinery/integrated_circuit_printer
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/stack/cable_coil = 15)
7 changes: 3 additions & 4 deletions code/modules/hydroponics/trays/tray.dm
Expand Up @@ -260,12 +260,12 @@

if(closed_system)
if(user) to_chat(user, "You can't harvest from the plant while the lid is shut.")
return FALSE
return

if(user)
seed.harvest(user,yield_mod)
. = seed.harvest(user,yield_mod)
else
seed.harvest(get_turf(src),yield_mod)
. = seed.harvest(get_turf(src),yield_mod)
// Reset values.
harvest = 0
lastproduce = age
Expand All @@ -279,7 +279,6 @@
mutation_mod = 0

check_health()
return TRUE

//Clears out a dead plant.
/obj/machinery/portable_atmospherics/hydroponics/proc/remove_dead(var/mob/user, var/silent)
Expand Down

0 comments on commit 7711d7b

Please sign in to comment.