diff --git a/baystation12.dme b/baystation12.dme
index aaa0bff9bf..2202d4f384 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -34,6 +34,7 @@
#include "code\__HELPERS\unsorted.dm"
#include "code\__HELPERS\vector.dm"
#include "code\_defines\chemical_effects.dm"
+#include "code\_defines\research.dm"
#include "code\_onclick\adjacent.dm"
#include "code\_onclick\ai.dm"
#include "code\_onclick\click.dm"
diff --git a/code/_defines/research.dm b/code/_defines/research.dm
new file mode 100644
index 0000000000..87e6bb5f42
--- /dev/null
+++ b/code/_defines/research.dm
@@ -0,0 +1,18 @@
+#define SHEET_MATERIAL_AMOUNT 2000
+
+#define TECH_MATERIAL "materials"
+#define TECH_ENGINERING "engineering"
+#define TECH_PHORON "phorontech"
+#define TECH_POWER "powerstorage"
+#define TECH_BLUESPACE "bluespace"
+#define TECH_BIO "biotech"
+#define TECH_COMBAT "combat"
+#define TECH_MAGNET "magnets"
+#define TECH_DATA "programming"
+#define TECH_ILLEGAL "syndicate"
+#define TECH_ARCANE "arcane"
+
+#define IMPRINTER 1 //For circuits. Uses glass/chemicals.
+#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals
+#define MECHFAB 4 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
+#define CHASSIS 8 //For protolathe, but differently
\ No newline at end of file
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index e230dfa6c9..914beba108 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -172,7 +172,7 @@
flags = CONDUCT
throwforce = 0
w_class = 3.0
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
/obj/item/weapon/beartrap
@@ -296,7 +296,7 @@
throw_speed = 4
throw_range = 20
matter = list("metal" = 100
- origin_tech = "magnets=2;syndicate=3"*/
+ origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 3)*/
/obj/item/weapon/SWF_uplink
name = "station-bounced radio"
@@ -314,9 +314,9 @@
throwforce = 5
w_class = 2.0
throw_speed = 4
- throw_range = 20
+ throw_range = 20
matter = list(DEFAULT_WALL_MATERIAL = 100)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
/obj/item/weapon/staff
name = "wizards staff"
@@ -458,7 +458,8 @@
w_class = 1
throwforce = 2
var/cigarcount = 6
- flags = ONBELT */
+ flags = ONBELT
+ */
/obj/item/weapon/pai_cable
desc = "A flexible coated cable with a universal jack on one end."
@@ -503,50 +504,50 @@
name = "console screen"
desc = "Used in the construction of computers and other devices with a interactive console."
icon_state = "screen"
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
matter = list("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"
- matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
+ origin_tech = list(TECH_POWER = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
/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"
- matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
/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"
- matter = list(DEFAULT_WALL_MATERIAL = 30)
+ origin_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 30)
/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"
- matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
/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"
- matter = list(DEFAULT_WALL_MATERIAL = 80)
+ origin_tech = list(TECH_MATERIAL = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 80)
//Rank 2
/obj/item/weapon/stock_parts/capacitor/adv
name = "advanced capacitor"
desc = "An advanced capacitor used in the construction of a variety of devices."
- origin_tech = "powerstorage=3"
+ origin_tech = list(TECH_POWER = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
@@ -554,7 +555,7 @@
name = "advanced scanning module"
desc = "A compact, high resolution scanning module used in the construction of certain devices."
icon_state = "scan_module"
- origin_tech = "magnets=3"
+ origin_tech = list(TECH_MAGNET = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
@@ -562,7 +563,7 @@
name = "nano-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "nano_mani"
- origin_tech = "materials=3,programming=2"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 30)
@@ -570,7 +571,7 @@
name = "high-power micro-laser"
desc = "A tiny laser used in certain devices."
icon_state = "high_micro_laser"
- origin_tech = "magnets=3"
+ origin_tech = list(TECH_MAGNET = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
@@ -578,7 +579,7 @@
name = "advanced matter bin"
desc = "A container for hold compressed matter awaiting re-construction."
icon_state = "advanced_matter_bin"
- origin_tech = "materials=3"
+ origin_tech = list(TECH_MATERIAL = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 80)
@@ -587,14 +588,14 @@
/obj/item/weapon/stock_parts/capacitor/super
name = "super capacitor"
desc = "A super-high capacity capacitor used in the construction of a variety of devices."
- origin_tech = "powerstorage=5;materials=4"
+ origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
/obj/item/weapon/stock_parts/scanning_module/phasic
name = "phasic scanning module"
desc = "A compact, high resolution phasic scanning module used in the construction of certain devices."
- origin_tech = "magnets=5"
+ origin_tech = list(TECH_MAGNET = 5)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
@@ -602,7 +603,7 @@
name = "pico-manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "pico_mani"
- origin_tech = "materials=5,programming=2"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 30)
@@ -610,7 +611,7 @@
name = "ultra-high-power micro-laser"
icon_state = "ultra_high_micro_laser"
desc = "A tiny laser used in certain devices."
- origin_tech = "magnets=5"
+ origin_tech = list(TECH_MAGNET = 5)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 10,"glass" = 20)
@@ -618,7 +619,7 @@
name = "super matter bin"
desc = "A container for hold compressed matter awaiting re-construction."
icon_state = "super_matter_bin"
- origin_tech = "materials=5"
+ origin_tech = list(TECH_MATERIAL = 5)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 80)
@@ -628,50 +629,50 @@
name = "subspace ansible"
icon_state = "subspace_ansible"
desc = "A compact module capable of sensing extradimensional activity."
- origin_tech = "programming=3;magnets=5;materials=4;bluespace=2"
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 5 ,TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 30,"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"
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ origin_tech = list(TECH_DATA = 4, TECH_MAGNET = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 30,"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"
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 30,"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"
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ origin_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 5, TECH_BLUESPACE = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 30,"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"
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ origin_tech = list(TECH_DATA = 3, TECH_MAGNETS = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 30,"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"
+ origin_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
matter = list("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"
- matter = list(DEFAULT_WALL_MATERIAL = 50)
+ origin_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 50)
/obj/item/weapon/ectoplasm
name = "ectoplasm"
@@ -685,4 +686,4 @@
desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil"
- origin_tech = "materials=19;programming=19;magnets=19;powerstorage=19;bluespace=19;combat=19;biotech=19;syndicate=19;phorontech=19;engineering=19"
+ origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19)
diff --git a/code/game/machinery/computer3/buildandrepair.dm b/code/game/machinery/computer3/buildandrepair.dm
index 5e5c8af856..37783007de 100644
--- a/code/game/machinery/computer3/buildandrepair.dm
+++ b/code/game/machinery/computer3/buildandrepair.dm
@@ -7,7 +7,7 @@
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
item_state = "electronic"
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
var/id = null
var/frequency = null
var/build_path = null
diff --git a/code/game/machinery/computer3/component.dm b/code/game/machinery/computer3/component.dm
index f484e04c64..0772d3e284 100644
--- a/code/game/machinery/computer3/component.dm
+++ b/code/game/machinery/computer3/component.dm
@@ -17,7 +17,6 @@
w_class = 2.0
var/emagged = 0
- crit_fail = 0
// the computer that this device is attached to
var/obj/machinery/computer3/computer
diff --git a/code/game/machinery/computer3/computer.dm b/code/game/machinery/computer3/computer.dm
index ff4b69b20f..7357957a37 100644
--- a/code/game/machinery/computer3/computer.dm
+++ b/code/game/machinery/computer3/computer.dm
@@ -309,7 +309,6 @@
proc/set_broken()
icon_state = "computer_b"
stat |= BROKEN
- crit_fail = 1
if(program)
program.error = BUSTED_ASS_COMPUTER
if(os)
diff --git a/code/game/machinery/computer3/file.dm b/code/game/machinery/computer3/file.dm
index 1cbb363894..b1fbe0ddbe 100644
--- a/code/game/machinery/computer3/file.dm
+++ b/code/game/machinery/computer3/file.dm
@@ -25,7 +25,7 @@
// If you overwrite this function, use the return value to make sure it succeeded
//
proc/copy(var/obj/item/part/computer/storage/dest)
- if(!computer || computer.crit_fail) return null
+ if(!computer) return null
if(drm)
if(!computer.emagged)
return null
@@ -39,7 +39,7 @@
// Returns null on failure even though the existing file doesn't go away
//
proc/move(var/obj/item/part/computer/storage/dest)
- if(!computer || computer.crit_fail) return null
+ if(!computer) return null
if(drm)
if(!computer.emagged)
return null
@@ -55,7 +55,7 @@
//
proc/edit()
- if(!computer || computer.crit_fail)
+ if(!computer)
return 0
if(readonly && !computer.emagged)
return 0 //
diff --git a/code/game/machinery/computer3/storage.dm b/code/game/machinery/computer3/storage.dm
index acf9a76288..cbef3434ba 100644
--- a/code/game/machinery/computer3/storage.dm
+++ b/code/game/machinery/computer3/storage.dm
@@ -35,7 +35,7 @@
// Add a file to the hard drive, returns 0 if failed
// forced is used when spawning files on a write-protect drive
proc/addfile(var/datum/file/F,var/forced = 0)
- if(!F || crit_fail || (F in files))
+ if(!F || (F in files))
return 1
if(writeprotect && !forced)
return 0
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 9ebe4a6ec2..7fd4cc36b5 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -27,9 +27,6 @@
/obj/machinery/constructable_frame/machine_frame
attackby(obj/item/P as obj, mob/user as mob)
- if(P.crit_fail)
- user << "\red This part is faulty, you cannot add this to the machine!"
- return
switch(state)
if(1)
if(istype(P, /obj/item/stack/cable_coil))
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 41bb3bef2d..fbb6e8b10c 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -131,12 +131,12 @@
/obj/item/weapon/circuitboard/cryopodcontrol
name = "Circuit board (Cryogenic Oversight Console)"
build_path = "/obj/machinery/computer/cryopod"
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/robotstoragecontrol
name = "Circuit board (Robotic Storage Console)"
build_path = "/obj/machinery/computer/cryopod/robot"
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
//Decorative structures to go alongside cryopods.
/obj/structure/cryofeed
diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm
index 78b8808d28..80b36d30f9 100644
--- a/code/game/machinery/doors/airlock_electronics.dm
+++ b/code/game/machinery/doors/airlock_electronics.dm
@@ -114,5 +114,5 @@
/obj/item/weapon/airlock_electronics/secure
name = "secure airlock electronics"
desc = "designed to be somewhat more resistant to hacking than standard electronics."
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
secure = 1
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index d9b579ab03..4e158156bf 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -328,8 +328,6 @@ Class Procs:
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
I.loc = loc
qdel(src)
return 1
diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 36f3ea6f85..607e8f445c 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -1,4 +1,3 @@
-//TODO: Add critfail checks and reliability
//DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE!
//I'm annoyed I even have to tell you this! SPRITE FIRST, then commit.
@@ -7,7 +6,7 @@
icon = 'icons/mecha/mecha_equipment.dmi'
icon_state = "mecha_equip"
force = 5
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
construction_time = 100
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
var/equip_cooldown = 0
@@ -15,7 +14,6 @@
var/energy_drain = 0
var/obj/mecha/chassis = null
var/range = MELEE //bitflags
- reliability = 1000
var/salvageable = 1
var/required_type = /obj/mecha //may be either a type or a list of allowed types
@@ -85,8 +83,6 @@
return 0
if(!equip_ready)
return 0
- if(crit_fail)
- return 0
if(energy_drain && !chassis.has_charge(energy_drain))
return 0
return 1
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index fb2f6b9657..7ebeb641d8 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -3,11 +3,10 @@
desc = "A sleeper. Mountable to an exosuit. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_0"
- origin_tech = "programming=2;biotech=3"
+ origin_tech = list(TECH_DATA = 2, TECH_BIO = 3)
energy_drain = 20
- range = MELEE
- construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=10000)
- reliability = 1000
+ range = MELEE
+ construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=10000)
equip_cooldown = 20
var/mob/living/carbon/occupant = null
var/datum/global_iterator/pr_mech_sleeper
@@ -392,7 +391,7 @@
var/datum/global_iterator/mech_synth/synth
range = MELEE|RANGED
equip_cooldown = 10
- origin_tech = "materials=3;biotech=4;magnets=4;programming=3"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_MAGNET = 4, TECH_DATA = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=3000,"glass"=2000)
required_type = /obj/mecha/medical
@@ -648,8 +647,6 @@
S.occupant_message("Reagent processing stopped.")
S.log_message("Reagent processing stopped.")
return stop()
- if(anyprob(S.reliability))
- S.critfail()
var/amount = S.synth_speed / S.processed_reagents.len
for(var/reagent in S.processed_reagents)
S.reagents.add_reagent(reagent,amount)
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 073c807be9..04e711b3a9 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -127,8 +127,8 @@
name = "diamond drill"
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_diamond_drill"
- origin_tech = "materials=4;engineering=3"
- construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"diamond"=6500)
+ origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
+ construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"diamond"=6500)
equip_cooldown = 20
force = 15
@@ -251,7 +251,7 @@
name = "mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
icon_state = "mecha_rcd"
- origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER = 4)
equip_cooldown = 10
energy_drain = 250
range = MELEE|RANGED
@@ -356,7 +356,7 @@
name = "teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
- origin_tech = "bluespace=10"
+ origin_tech = list(TECH_BLUESPACE = 10)
equip_cooldown = 150
energy_drain = 1000
range = RANGED
@@ -376,7 +376,7 @@
name = "wormhole generator"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen"
- origin_tech = "bluespace=3"
+ origin_tech = list(TECH_BLUESPACE = 3)
equip_cooldown = 50
energy_drain = 300
range = RANGED
@@ -426,7 +426,7 @@
name = "gravitational catapult"
desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport"
- origin_tech = "bluespace=2;magnets=3"
+ origin_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3)
equip_cooldown = 10
energy_drain = 100
range = MELEE|RANGED
@@ -502,7 +502,7 @@
name = "\improper CCW armor booster"
desc = "Close-combat armor booster. Boosts exosuit armor against armed melee attacks. Requires energy to operate."
icon_state = "mecha_abooster_ccw"
- origin_tech = "materials=3"
+ origin_tech = list(TECH_MATERIAL = 3)
equip_cooldown = 10
energy_drain = 50
range = 0
@@ -552,7 +552,7 @@
name = "\improper RW armor booster"
desc = "Ranged-weaponry armor booster. Boosts exosuit armor against ranged attacks. Completely blocks taser shots, but requires energy to operate."
icon_state = "mecha_abooster_proj"
- origin_tech = "materials=4"
+ origin_tech = list(TECH_MATERIAL = 4)
equip_cooldown = 10
energy_drain = 50
range = 0
@@ -623,7 +623,7 @@
name = "repair droid"
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost any type of external or internal damage."
icon_state = "repair_droid"
- origin_tech = "magnets=3;programming=3"
+ origin_tech = list(TECH_MAGNET = 3, TECH_DATA = 3)
equip_cooldown = 20
energy_drain = 100
range = 0
@@ -718,7 +718,7 @@
name = "energy relay"
desc = "Wirelessly drains energy from any available power channel in area. The performance index is quite low."
icon_state = "tesla"
- origin_tech = "magnets=4;syndicate=2"
+ origin_tech = list(TECH_MAGNET = 4, TECH_ILLEGAL = 2)
equip_cooldown = 10
energy_drain = 0
range = 0
@@ -835,7 +835,7 @@
name = "phoron generator"
desc = "Generates power using solid phoron as fuel. Pollutes the environment."
icon_state = "tesla"
- origin_tech = "phorontech=2;powerstorage=2;engineering=1"
+ origin_tech = list(TECH_PHORON = 2, TECH_POWER = 2, TECH_ENGINERING = 1)
equip_cooldown = 10
energy_drain = 0
range = MELEE
@@ -847,7 +847,6 @@
var/fuel_per_cycle_idle = 100
var/fuel_per_cycle_active = 500
var/power_per_cycle = 20
- reliability = 1000
New()
..()
@@ -954,10 +953,6 @@
EG.log_message("Deactivated - no fuel.")
EG.set_ready_state(1)
return 0
- if(anyprob(EG.reliability))
- EG.critfail()
- stop()
- return 0
var/cur_charge = EG.chassis.get_charge()
if(isnull(cur_charge))
EG.set_ready_state(1)
@@ -978,14 +973,13 @@
name = "\improper ExoNuclear reactor"
desc = "Generates power using uranium. Pollutes the environment."
icon_state = "tesla"
- origin_tech = "powerstorage=3;engineering=3"
- construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
+ origin_tech = list(TECH_POWER = 3, TECH_ENGINERING = 3)
+ construction_cost = list(DEFAULT_WALL_MATERIAL=10000,"silver"=500,"glass"=1000)
max_fuel = 50000
fuel_per_cycle_idle = 10
fuel_per_cycle_active = 30
power_per_cycle = 50
var/rad_per_cycle = 0.3
- reliability = 1000
init()
fuel = new /obj/item/stack/material/uranium(src)
@@ -1075,11 +1069,10 @@
name = "passenger compartment"
desc = "A mountable passenger compartment for exo-suits. Rather cramped."
icon_state = "mecha_abooster_ccw"
- origin_tech = "engineering=1;biotech=1"
+ origin_tech = list(TECH_ENGINERING = 1, TECH_BIO = 1)
energy_drain = 10
- range = MELEE
- construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000)
- reliability = 1000
+ range = MELEE
+ construction_cost = list(DEFAULT_WALL_MATERIAL=5000,"glass"=5000)
equip_cooldown = 20
var/mob/living/carbon/occupant = null
var/door_locked = 1
diff --git a/code/game/mecha/equipment/tools/unused_tools.dm b/code/game/mecha/equipment/tools/unused_tools.dm
index 012d7979e1..1b6d8c9e23 100644
--- a/code/game/mecha/equipment/tools/unused_tools.dm
+++ b/code/game/mecha/equipment/tools/unused_tools.dm
@@ -85,8 +85,6 @@
return 0
if(energy_drain && !chassis.has_charge(energy_drain))
return 0
- if(crit_fail)
- return 0
if(chassis.check_for_support())
return 0
return 1
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 61eaa214da..f034f27550 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -1,7 +1,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon
name = "mecha weapon"
range = RANGED
- origin_tech = "materials=3;combat=3"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 3)
var/projectile //Type of projectile fired.
var/projectiles = 1 //Amount of projectiles loaded.
var/projectiles_per_shot = 1 //Amount of projectiles fired per single shot.
@@ -100,7 +100,7 @@
name = "eZ-13 mk2 heavy pulse rifle"
icon_state = "mecha_pulse"
energy_drain = 120
- origin_tech = "materials=3;combat=6;powerstorage=4"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_COMBAT = 6, TECH_POWER = 4)
projectile = /obj/item/projectile/beam/pulse/heavy
fire_sound = 'sound/weapons/marauder.ogg'
diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index 9013e0b8a6..11866b035b 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -94,15 +94,6 @@
/obj/item/mecha_parts/part/durand_right_leg,
/obj/item/mecha_parts/part/durand_armour
),
- /*"H.O.N.K"=list(
- /obj/item/mecha_parts/chassis/honker,
- /obj/item/mecha_parts/part/honker_torso,
- /obj/item/mecha_parts/part/honker_head,
- /obj/item/mecha_parts/part/honker_left_arm,
- /obj/item/mecha_parts/part/honker_right_arm,
- /obj/item/mecha_parts/part/honker_left_leg,
- /obj/item/mecha_parts/part/honker_right_leg
- ), No need for HONK stuff*/
"Exosuit Equipment"=list(
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
/obj/item/mecha_parts/mecha_equipment/tool/drill,
@@ -116,10 +107,7 @@
/obj/item/mecha_parts/mecha_equipment/generator,
///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
- /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
- ///obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/mousetrap_mortar, HONK-related mech part
- ///obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar, Also HONK-related
- ///obj/item/mecha_parts/mecha_equipment/weapon/honker Thirdly HONK-related
+ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
),
"Robotic Upgrade Modules" = list(
@@ -131,17 +119,9 @@
/obj/item/borg/upgrade/jetpack
),
-
-
-
-
-
"Misc"=list(/obj/item/mecha_parts/mecha_tracking)
)
-
-
-
/obj/machinery/mecha_part_fabricator/New()
..()
@@ -294,14 +274,6 @@
return 0
return 1
*/
-/*
- New()
- ..()
- src.add_part_to_set("Test",list("result"="/obj/item/mecha_parts/part/gygax_armour","time"=600,"metal"=75000,"diamond"=10000))
- src.add_part_to_set("Test",list("result"="/obj/item/mecha_parts/part/ripley_left_arm","time"=200,"metal"=25000))
- src.remove_part_set("Gygax")
- return
-*/
/obj/machinery/mecha_part_fabricator/proc/output_parts_list(set_name)
var/output = ""
@@ -771,8 +743,6 @@
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
I.loc = src.loc
if(src.resources[DEFAULT_WALL_MATERIAL] >= 3750)
var/obj/item/stack/material/steel/G = new /obj/item/stack/material/steel(src.loc)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index bf8359f997..2465103158 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -117,7 +117,6 @@
WR.crowbar_salvage += E
E.forceMove(WR)
E.equip_ready = 1
- E.reliability = round(rand(E.reliability/3,E.reliability))
else
E.forceMove(loc)
E.destroy()
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index d334d6eb29..3a3e48d154 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -68,7 +68,7 @@
desc = "Device used to transmit exosuit data."
icon = 'icons/obj/device.dmi'
icon_state = "motion2"
- origin_tech = "programming=2;magnets=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
construction_time = 50
construction_cost = list(DEFAULT_WALL_MATERIAL=500)
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 6dba12db0c..4e19037cce 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -10,7 +10,7 @@
icon_state = "blank"
w_class = 5
flags = CONDUCT
- origin_tech = "programming=2;materials=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2)
var/construction_time = 100
var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=5000)
@@ -43,7 +43,7 @@
name="Ripley Torso"
desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
icon_state = "ripley_harness"
- origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINERING = 2)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"glass"=15000)
@@ -51,7 +51,7 @@
name="Ripley Left Arm"
desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_l_arm"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -59,7 +59,7 @@
name="Ripley Right Arm"
desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "ripley_r_arm"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -67,7 +67,7 @@
name="Ripley Left Leg"
desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_l_leg"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -75,7 +75,7 @@
name="Ripley Right Leg"
desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "ripley_r_leg"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 150
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -93,7 +93,7 @@
name="Gygax Torso"
desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
icon_state = "gygax_harness"
- origin_tech = "programming=2;materials=2;biotech=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 3, TECH_ENGINERING = 3)
construction_time = 300
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"glass"=20000)
@@ -101,7 +101,7 @@
name="Gygax Head"
desc="A Gygax head. Houses advanced surveilance and targeting sensors."
icon_state = "gygax_head"
- origin_tech = "programming=2;materials=2;magnets=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_MAGNET = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"glass"=10000)
@@ -109,7 +109,7 @@
name="Gygax Left Arm"
desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_l_arm"
- origin_tech = "programming=2;materials=2;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
@@ -117,28 +117,28 @@
name="Gygax Right Arm"
desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
icon_state = "gygax_r_arm"
- origin_tech = "programming=2;materials=2;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=30000)
/obj/item/mecha_parts/part/gygax_left_leg
name="Gygax Left Leg"
icon_state = "gygax_l_leg"
- origin_tech = "programming=2;materials=2;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
/obj/item/mecha_parts/part/gygax_right_leg
name="Gygax Right Leg"
icon_state = "gygax_r_leg"
- origin_tech = "programming=2;materials=2;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000)
/obj/item/mecha_parts/part/gygax_armour
name="Gygax Armour Plates"
icon_state = "gygax_armour"
- origin_tech = "materials=6;combat=4;engineering=5"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_COMBAT = 4, TECH_ENGINERING = 5)
construction_time = 600
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"diamond"=10000)
@@ -156,49 +156,49 @@
/obj/item/mecha_parts/part/durand_torso
name="Durand Torso"
icon_state = "durand_harness"
- origin_tech = "programming=2;materials=3;biotech=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_BIO = 3, TECH_ENGINERING = 3)
construction_time = 300
construction_cost = list(DEFAULT_WALL_MATERIAL=55000,"glass"=20000,"silver"=10000)
/obj/item/mecha_parts/part/durand_head
name="Durand Head"
icon_state = "durand_head"
- origin_tech = "programming=2;materials=3;magnets=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=25000,"glass"=10000,"silver"=3000)
/obj/item/mecha_parts/part/durand_left_arm
name="Durand Left Arm"
icon_state = "durand_l_arm"
- origin_tech = "programming=2;materials=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
/obj/item/mecha_parts/part/durand_right_arm
name="Durand Right Arm"
icon_state = "durand_r_arm"
- origin_tech = "programming=2;materials=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"silver"=3000)
/obj/item/mecha_parts/part/durand_left_leg
name="Durand Left Leg"
icon_state = "durand_l_leg"
- origin_tech = "programming=2;materials=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
/obj/item/mecha_parts/part/durand_right_leg
name="Durand Right Leg"
icon_state = "durand_r_leg"
- origin_tech = "programming=2;materials=3;engineering=3"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=40000,"silver"=3000)
/obj/item/mecha_parts/part/durand_armour
name="Durand Armour Plates"
icon_state = "durand_armour"
- origin_tech = "materials=5;combat=4;engineering=5"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4, TECH_ENGINERING = 5)
construction_time = 600
construction_cost = list(DEFAULT_WALL_MATERIAL=50000,"uranium"=10000)
@@ -238,7 +238,7 @@
/obj/item/mecha_parts/chassis/phazon
name = "Phazon Chassis"
- origin_tech = "materials=7"
+ origin_tech = list(TECH_MATERIAL = 7)
New()
..()
@@ -247,44 +247,44 @@
/obj/item/mecha_parts/part/phazon_torso
name="Phazon Torso"
icon_state = "phazon_harness"
- construction_time = 300
+ construction_time = 300
construction_cost = list(DEFAULT_WALL_MATERIAL=35000,"glass"=10000,"phoron"=20000)
- origin_tech = "programming=5;materials=7;bluespace=6;powerstorage=6"
+ origin_tech = list(TECH_DATA = 5, TECH_MATERIAL = 7, TECH_BLUESPACE = 6, TECH_POWER = 6)
/obj/item/mecha_parts/part/phazon_head
name="Phazon Head"
icon_state = "phazon_head"
- construction_time = 200
+ construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=15000,"glass"=5000,"phoron"=10000)
- origin_tech = "programming=4;materials=5;magnets=6"
+ origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 5, TECH_MAGNET = 6)
/obj/item/mecha_parts/part/phazon_left_arm
name="Phazon Left Arm"
icon_state = "phazon_l_arm"
- construction_time = 200
+ construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
- origin_tech = "materials=5;bluespace=2;magnets=2"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
/obj/item/mecha_parts/part/phazon_right_arm
name="Phazon Right Arm"
icon_state = "phazon_r_arm"
- construction_time = 200
+ construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
- origin_tech = "materials=5;bluespace=2;magnets=2"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 2, TECH_MAGNET = 2)
/obj/item/mecha_parts/part/phazon_left_leg
name="Phazon Left Leg"
icon_state = "phazon_l_leg"
- construction_time = 200
+ construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
- origin_tech = "materials=5;bluespace=3;magnets=3"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
/obj/item/mecha_parts/part/phazon_right_leg
name="Phazon Right Leg"
icon_state = "phazon_r_leg"
- construction_time = 200
+ construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=20000,"phoron"=10000)
- origin_tech = "materials=5;bluespace=3;magnets=3"
+ origin_tech = list(TECH_MATERIAL = 5, TECH_BLUESPACE = 3, TECH_MAGNET = 3)
///////// Odysseus
@@ -299,15 +299,15 @@
/obj/item/mecha_parts/part/odysseus_head
name="Odysseus Head"
icon_state = "odysseus_head"
- construction_time = 100
+ construction_time = 100
construction_cost = list(DEFAULT_WALL_MATERIAL=2000,"glass"=10000)
- origin_tech = "programming=3;materials=2"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 2)
/obj/item/mecha_parts/part/odysseus_torso
name="Odysseus Torso"
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
icon_state = "odysseus_torso"
- origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_BIO = 2, TECH_ENGINERING = 2)
construction_time = 180
construction_cost = list(DEFAULT_WALL_MATERIAL=25000)
@@ -315,7 +315,7 @@
name="Odysseus Left Arm"
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_l_arm"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 120
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
@@ -323,7 +323,7 @@
name="Odysseus Right Arm"
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
icon_state = "odysseus_r_arm"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 120
construction_cost = list(DEFAULT_WALL_MATERIAL=10000)
@@ -331,7 +331,7 @@
name="Odysseus Left Leg"
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_l_leg"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 130
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
@@ -339,13 +339,13 @@
name="Odysseus Right Leg"
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
icon_state = "odysseus_r_leg"
- origin_tech = "programming=2;materials=2;engineering=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MATERIAL = 2, TECH_ENGINERING = 2)
construction_time = 130
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)
/*/obj/item/mecha_parts/part/odysseus_armour
name="Odysseus Carapace"
icon_state = "odysseus_armour"
- origin_tech = "materials=3;engineering=3"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_ENGINERING = 3)
construction_time = 200
construction_cost = list(DEFAULT_WALL_MATERIAL=15000)*/
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index e5a8129ebf..12b92b8154 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -6,7 +6,7 @@
w_class = 2.0
slot_flags = SLOT_BELT
var/flush = null
- origin_tech = "programming=4;materials=4"
+ origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
var/mob/living/silicon/ai/carded_ai
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index f7ef8ad5c2..cdefd61d57 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -8,7 +8,7 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- origin_tech = "syndicate=4;magnets=4"
+ origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4)
var/can_use = 1
var/obj/effect/dummy/chameleon/active_dummy = null
var/saved_item = /obj/item/weapon/cigbutt
diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm
index 0e066a4817..1bf02f8c9f 100644
--- a/code/game/objects/items/devices/debugger.dm
+++ b/code/game/objects/items/devices/debugger.dm
@@ -19,7 +19,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
- origin_tech = "magnets=1;engineering=1"
+ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
/obj/item/device/debugger/is_used_on(obj/O, mob/user)
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 42a4967bfe..2c686f8bf3 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -8,7 +8,7 @@
throw_speed = 4
throw_range = 10
flags = CONDUCT
- origin_tech = "magnets=2;combat=1"
+ origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
var/times_used = 0 //Number of times it's been used.
var/broken = 0 //Is the flash burnt out?
@@ -192,9 +192,9 @@
/obj/item/device/flash/synthetic
name = "synthetic flash"
desc = "When a problem arises, SCIENCE is the solution."
- icon_state = "sflash"
- origin_tech = "magnets=2;combat=1"
- var/construction_cost = list(DEFAULT_WALL_MATERIAL=750,"glass"=750)
+ icon_state = "sflash"
+ origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
+ var/construction_cost = list(DEFAULT_WALL_MATERIAL=750,"glass"=750)
var/construction_time=100
/obj/item/device/flash/synthetic/attack(mob/living/M as mob, mob/user as mob)
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index cd930cc577..3471d1fcfe 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -49,7 +49,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
- origin_tech = "magnets=3;materials=2"
+ origin_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 2)
var/max_uses = 20
var/uses = 0
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index b876fbd27a..e7b1c75514 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -18,6 +18,6 @@
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
- origin_tech = "magnets=1;engineering=1"
+ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
var/obj/machinery/clonepod/connecting //same for cryopod linkage
\ No newline at end of file
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index d2d06d6891..b1cdce9f29 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -5,7 +5,7 @@
item_state = "electronic"
w_class = 2.0
slot_flags = SLOT_BELT
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
var/obj/item/device/radio/radio
var/looking_for_personality = 0
var/mob/living/silicon/pai/pai
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 7851939899..ad40ecc724 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -13,7 +13,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 750,"waste" = 750)
- origin_tech = "powerstorage=3;syndicate=5"
+ origin_tech = list(TECH_POWER = 3, TECH_ILLEGAL = 5)
var/drain_rate = 1500000 // amount of power to drain per tick
var/apc_drain_rate = 5000 // Max. amount drained from single APC. In Watts.
var/dissipation_rate = 20000 // Passive dissipation of drained power. In Watts.
@@ -22,7 +22,7 @@
var/mode = 0 // 0 = off, 1=clamped (off), 2=operating
var/drained_this_tick = 0 // This is unfortunately necessary to ensure we process powersinks BEFORE other machinery such as APCs.
- var/datum/powernet/PN // Our powernet
+ var/datum/powernet/PN // Our powernet
var/obj/structure/cable/attached // the attached cable
/obj/item/device/powersink/Destroy()
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 32807250d7..b6a947d6d5 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -4,7 +4,7 @@
icon_state = "beacon"
item_state = "signaler"
var/code = "electronic"
- origin_tech = "bluespace=1"
+ origin_tech = list(TECH_BLUESPACE = 1)
/obj/item/device/radio/beacon/hear_talk()
return
@@ -38,7 +38,7 @@
/obj/item/device/radio/beacon/syndicate
name = "suspicious beacon"
desc = "A label on it reads: Activate to have a singularity beacon teleported to your location."
- origin_tech = "bluespace=1;syndicate=7"
+ origin_tech = list(TECH_BLUESPACE = 1, TECH_ILLEGAL = 7)
/obj/item/device/radio/beacon/syndicate/attack_self(mob/user as mob)
if(user)
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index 823940a53c..72a99f494e 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -19,13 +19,13 @@
/obj/item/device/encryptionkey/syndicate
icon_state = "cypherkey"
channels = list("Mercenary" = 1)
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1//Signifies that it de-crypts Syndicate transmissions
/obj/item/device/encryptionkey/binary
icon_state = "cypherkey"
translate_binary = 1
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
/obj/item/device/encryptionkey/headset_sec
name = "security radio encryption key"
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index c316fc0a33..e1ca0d8889 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -62,12 +62,12 @@
return -1
/obj/item/device/radio/headset/syndicate
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1
ks1type = /obj/item/device/encryptionkey/syndicate
/obj/item/device/radio/headset/binary
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
ks1type = /obj/item/device/encryptionkey/binary
/obj/item/device/radio/headset/headset_sec
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 54fd83b162..4c576e0446 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -18,7 +18,7 @@ REAGENT SCANNER
matter = list(DEFAULT_WALL_MATERIAL = 150)
- origin_tech = "magnets=1;engineering=1"
+ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
/obj/item/device/t_scanner/attack_self(mob/user)
@@ -72,9 +72,9 @@ REAGENT SCANNER
throwforce = 3
w_class = 2.0
throw_speed = 5
- throw_range = 10
+ throw_range = 10
matter = list(DEFAULT_WALL_MATERIAL = 200)
- origin_tech = "magnets=1;biotech=1"
+ origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
var/mode = 1;
@@ -242,7 +242,7 @@ REAGENT SCANNER
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
- origin_tech = "magnets=1;engineering=1"
+ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
/obj/item/device/analyzer/attack_self(mob/user as mob)
@@ -289,7 +289,7 @@ REAGENT SCANNER
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
- origin_tech = "magnets=2;biotech=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
var/details = 0
var/recent_fail = 0
@@ -308,9 +308,6 @@ REAGENT SCANNER
/obj/item/device/mass_spectrometer/attack_self(mob/user as mob)
if (user.stat)
return
- if (crit_fail)
- user << "\red This device has critically failed and is no longer functional!"
- return
if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
user << "\red You don't have the dexterity to do this!"
return
@@ -326,19 +323,10 @@ REAGENT SCANNER
break
var/dat = "Trace Chemicals Found: "
for(var/R in blood_traces)
- if(prob(reliability))
- if(details)
- dat += "[R] ([blood_traces[R]] units) "
- else
- dat += "[R] "
- recent_fail = 0
+ if(details)
+ dat += "[R] ([blood_traces[R]] units) "
else
- if(recent_fail)
- crit_fail = 1
- reagents.clear_reagents()
- return
- else
- recent_fail = 1
+ dat += "[R] "
user << "[dat]"
reagents.clear_reagents()
return
@@ -347,7 +335,7 @@ REAGENT SCANNER
name = "advanced mass spectrometer"
icon_state = "adv_spectrometer"
details = 1
- origin_tech = "magnets=4;biotech=2"
+ origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
/obj/item/device/reagent_scanner
name = "reagent scanner"
@@ -362,7 +350,7 @@ REAGENT SCANNER
throw_range = 20
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
- origin_tech = "magnets=2;biotech=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
var/details = 0
var/recent_fail = 0
@@ -376,24 +364,13 @@ REAGENT SCANNER
return
if(!istype(O))
return
- if (crit_fail)
- user << "\red This device has critically failed and is no longer functional!"
- return
if(!isnull(O.reagents))
var/dat = ""
if(O.reagents.reagent_list.len > 0)
var/one_percent = O.reagents.total_volume / 100
for (var/datum/reagent/R in O.reagents.reagent_list)
- if(prob(reliability))
- dat += "\n \t \blue [R][details ? ": [R.volume / one_percent]%" : ""]"
- recent_fail = 0
- else if(recent_fail)
- crit_fail = 1
- dat = null
- break
- else
- recent_fail = 1
+ dat += "\n \t \blue [R][details ? ": [R.volume / one_percent]%" : ""]"
if(dat)
user << "\blue Chemicals found: [dat]"
else
@@ -407,13 +384,13 @@ REAGENT SCANNER
name = "advanced reagent scanner"
icon_state = "adv_spectrometer"
details = 1
- origin_tech = "magnets=4;biotech=2"
+ origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2)
/obj/item/device/slime_scanner
name = "slime scanner"
icon_state = "adv_spectrometer"
item_state = "analyzer"
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
w_class = 2.0
flags = CONDUCT
throwforce = 0
diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm
index 2ad3df7ae5..932b3d6a6b 100644
--- a/code/game/objects/items/devices/spy_bug.dm
+++ b/code/game/objects/items/devices/spy_bug.dm
@@ -13,7 +13,7 @@
throw_range = 15
throw_speed = 3
- origin_tech = "programming=1;engineering=1;syndicate=3"
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1, TECH_ILLEGAL = 3)
var/obj/item/device/radio/spy/radio
var/obj/machinery/camera/spy/camera
@@ -52,7 +52,7 @@
w_class = 2.0
- origin_tech = "programming=1;engineering=1;syndicate=3"
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1, TECH_ILLEGAL = 3)
var/operating = 0
var/obj/item/device/radio/spy/radio
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 291053f25d..b28e9b62f6 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -13,7 +13,7 @@
throw_speed = 1
throw_range = 4
- origin_tech = "magnets=2;materials=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_MATERIAL = 2)
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 3c2aebd871..fe1222cb07 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -24,7 +24,7 @@ effective or pretty fucking useless.
throw_range = 10
flags = CONDUCT
item_state = "electronic"
- origin_tech = "magnets=3;combat=3;syndicate=3"
+ origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 3, TECH_ILLEGAL = 3)
var/times_used = 0 //Number of times it's been used.
var/max_uses = 2
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index b7b4dcfe0b..be178632e6 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -54,7 +54,7 @@
singular_name = "gauze length"
desc = "Some sterile gauze to wrap around bloody stumps."
icon_state = "brutepack"
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
@@ -97,7 +97,7 @@
singular_name = "ointment"
icon_state = "ointment"
heal_burn = 1
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
@@ -128,7 +128,7 @@
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
heal_brute = 12
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
if(..())
@@ -175,7 +175,7 @@
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
heal_burn = 12
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index f85bc336be..7fd5c887e8 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -4,7 +4,7 @@
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
icon = 'icons/obj/nanopaste.dmi'
icon_state = "tube"
- origin_tech = "materials=4;engineering=3"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
amount = 10
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index fd20de103c..41ea1b7d1f 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -13,7 +13,7 @@
/obj/item/stack/material/glass
name = "glass"
singular_name = "glass sheet"
- icon_state = "sheet-glass"
+ icon_state = "sheet-glass"
var/created_window = /obj/structure/window/basic
var/is_reinforced = 0
var/list/construction_options = list("One Direction", "Full Window")
@@ -129,8 +129,8 @@
/obj/item/stack/material/glass/reinforced
name = "reinforced glass"
singular_name = "reinforced glass sheet"
- icon_state = "sheet-rglass"
- default_type = "reinforced glass"
+ icon_state = "sheet-rglass"
+ default_type = "reinforced glass"
created_window = /obj/structure/window/reinforced
is_reinforced = 1
construction_options = list("One Direction", "Full Window", "Windoor")
@@ -141,7 +141,7 @@
/obj/item/stack/material/glass/phoronglass
name = "phoron glass"
singular_name = "phoron glass sheet"
- icon_state = "sheet-phoronglass"
+ icon_state = "sheet-phoronglass"
created_window = /obj/structure/window/phoronbasic
default_type = "phoron glass"
@@ -168,7 +168,7 @@
/obj/item/stack/material/glass/phoronrglass
name = "reinforced phoron glass"
singular_name = "reinforced phoron glass sheet"
- icon_state = "sheet-phoronrglass"
- default_type = "reinforced phoron glass"
+ icon_state = "sheet-phoronrglass"
+ default_type = "reinforced phoron glass"
created_window = /obj/structure/window/phoronreinforced
is_reinforced = 1
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 87cdf3b4c2..313cc24d7a 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -3,42 +3,36 @@
desc = "The by-product of human farming."
singular_name = "human skin piece"
icon_state = "sheet-hide"
- origin_tech = ""
/obj/item/stack/material/animalhide/corgi
name = "corgi hide"
desc = "The by-product of corgi farming."
singular_name = "corgi hide piece"
icon_state = "sheet-corgi"
- origin_tech = ""
/obj/item/stack/material/animalhide/cat
name = "cat hide"
desc = "The by-product of cat farming."
singular_name = "cat hide piece"
icon_state = "sheet-cat"
- origin_tech = ""
/obj/item/stack/material/animalhide/monkey
name = "monkey hide"
desc = "The by-product of monkey farming."
singular_name = "monkey hide piece"
icon_state = "sheet-monkey"
- origin_tech = ""
/obj/item/stack/material/animalhide/lizard
name = "lizard skin"
desc = "Sssssss..."
singular_name = "lizard skin piece"
icon_state = "sheet-lizard"
- origin_tech = ""
/obj/item/stack/material/animalhide/xeno
name = "alien hide"
desc = "The skin of a terrible creature."
singular_name = "alien hide piece"
icon_state = "sheet-xeno"
- origin_tech = ""
//don't see anywhere else to put these, maybe together they could be used to make the xenos suit?
/obj/item/stack/material/xenochitin
@@ -47,38 +41,33 @@
singular_name = "alien hide piece"
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
- origin_tech = ""
/obj/item/xenos_claw
name = "alien claw"
desc = "The claw of a terrible creature."
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
- origin_tech = ""
/obj/item/weed_extract
name = "weed extract"
desc = "A piece of slimy, purplish weed."
icon = 'icons/mob/alien.dmi'
icon_state = "weed_extract"
- origin_tech = ""
/obj/item/stack/material/hairlesshide
name = "hairless hide"
desc = "This hide was stripped of it's hair, but still needs tanning."
singular_name = "hairless hide piece"
icon_state = "sheet-hairlesshide"
- origin_tech = ""
/obj/item/stack/material/wetleather
name = "wet leather"
desc = "This leather has been cleaned but still needs to be dried."
singular_name = "wet leather piece"
icon_state = "sheet-wetleather"
- origin_tech = ""
var/wetness = 30 //Reduced when exposed to high temperautres
var/drying_threshold_temperature = 500 //Kelvin to start drying
-
+
//Step one - dehairing.
/obj/item/stack/material/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
if( istype(W, /obj/item/weapon/material/knife) || \
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index e7dc25fae5..7fc96efcee 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -11,7 +11,7 @@
/obj/item/stack
gender = PLURAL
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
var/list/datum/stack_recipe/recipes
var/singular_name
var/amount = 1
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index dcac154442..fbb64dba4c 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -27,7 +27,7 @@
throw_speed = 5
throw_range = 20
flags = CONDUCT
- origin_tech = "biotech=1"
+ origin_tech = list(TECH_BIO = 1)
/*
* Wood
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index f620fd64e9..335478063a 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -18,7 +18,7 @@ AI MODULES
throwforce = 5.0
throw_speed = 3
throw_range = 15
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
var/datum/ai_laws/laws = null
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
@@ -102,7 +102,7 @@ AI MODULES
name = "\improper 'Safeguard' AI module"
var/targetName = ""
desc = "A 'safeguard' AI module: 'Safeguard . Anyone threatening or attempting to harm is no longer to be considered a crew member, and is a threat which must be neutralized.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob)
..()
@@ -128,7 +128,7 @@ AI MODULES
name = "\improper 'OneCrewMember' AI module"
var/targetName = ""
desc = "A 'one crew member' AI module: 'Only is a crew member.'"
- origin_tech = "programming=3;materials=6" //made with diamonds!
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6) //made with diamonds!
/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob)
..()
@@ -162,7 +162,7 @@ AI MODULES
/obj/item/weapon/aiModule/protectStation
name = "\improper 'ProtectStation' AI module"
desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized.'"
- origin_tech = "programming=3;materials=4" //made of gold
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4) //made of gold
/obj/item/weapon/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
var/law = "Protect the space station against damage. Anyone you see harming the station is no longer to be considered a crew member, and is a threat which must be neutralized."
@@ -173,7 +173,7 @@ AI MODULES
/obj/item/weapon/aiModule/prototypeEngineOffline
name = "'PrototypeEngineOffline' AI Module"
desc = "A 'prototype engine offline' AI module: 'Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/prototypeEngineOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
var/law = "Keep the prototype engine offline at all costs. This overrides all inherent laws if necessary."
@@ -184,7 +184,7 @@ AI MODULES
/obj/item/weapon/aiModule/teleporterOffline
name = "'TeleporterOffline' AI Module"
desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/teleporterOffline/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is no longer to be considered a crew member."
@@ -195,7 +195,7 @@ AI MODULES
/obj/item/weapon/aiModule/quarantine
name = "\improper 'Quarantine' AI module"
desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving.'"
- origin_tech = "programming=3;biotech=2;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/quarantine/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew members from leaving. It is impossible to harm crew members while preventing them from leaving."
@@ -206,7 +206,7 @@ AI MODULES
/obj/item/weapon/aiModule/oxygen
name = "\improper 'OxygenIsToxicToCrewMembers' AI module"
desc = "A 'OxygenIsToxicToCrewMembers' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'"
- origin_tech = "programming=3;biotech=2;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender)
var/law = "Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member."
@@ -219,7 +219,7 @@ AI MODULES
var/newFreeFormLaw = "freeform"
var/lawpos = 15
desc = "A 'freeform' AI module: ''"
- origin_tech = "programming=4;materials=4"
+ origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob)
..()
@@ -250,7 +250,7 @@ AI MODULES
name = "\improper 'Reset' AI module"
var/targetName = "name"
desc = "A 'reset' AI module: 'Clears all, except the inherent, laws.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
/obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
log_law_changes(target, sender)
@@ -268,7 +268,7 @@ AI MODULES
/obj/item/weapon/aiModule/purge // -- TLE
name = "\improper 'Purge' AI module"
desc = "A 'purge' AI Module: 'Purges all laws.'"
- origin_tech = "programming=3;materials=6"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
log_law_changes(target, sender)
@@ -287,7 +287,7 @@ AI MODULES
/obj/item/weapon/aiModule/asimov // -- TLE
name = "\improper 'Asimov' core AI module"
desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
laws = new/datum/ai_laws/asimov
/******************** NanoTrasen ********************/
@@ -295,7 +295,7 @@ AI MODULES
/obj/item/weapon/aiModule/nanotrasen // -- TLE
name = "'NT Default' Core AI Module"
desc = "An 'NT Default' Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
laws = new/datum/ai_laws/nanotrasen
/******************** Corporate ********************/
@@ -303,14 +303,14 @@ AI MODULES
/obj/item/weapon/aiModule/corp
name = "\improper 'Corporate' core AI module"
desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
laws = new/datum/ai_laws/corporate
/******************** Drone ********************/
/obj/item/weapon/aiModule/drone
name = "\improper 'Drone' core AI module"
desc = "A 'Drone' Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=4"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
laws = new/datum/ai_laws/drone
/****************** P.A.L.A.D.I.N. **************/
@@ -318,7 +318,7 @@ AI MODULES
/obj/item/weapon/aiModule/paladin // -- NEO
name = "\improper 'P.A.L.A.D.I.N.' core AI module"
desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=6"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
laws = new/datum/ai_laws/paladin
/****************** T.Y.R.A.N.T. *****************/
@@ -326,7 +326,7 @@ AI MODULES
/obj/item/weapon/aiModule/tyrant // -- Darem
name = "\improper 'T.Y.R.A.N.T.' core AI module"
desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=3;materials=6;syndicate=2"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 2)
laws = new/datum/ai_laws/tyrant()
/******************** Freeform Core ******************/
@@ -335,7 +335,7 @@ AI MODULES
name = "\improper 'Freeform' core AI module"
var/newFreeFormLaw = ""
desc = "A 'freeform' Core AI module: ''"
- origin_tech = "programming=3;materials=6"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob)
..()
@@ -359,7 +359,7 @@ AI MODULES
name = "hacked AI module"
var/newFreeFormLaw = ""
desc = "A hacked AI law module: ''"
- origin_tech = "programming=3;materials=6;syndicate=7"
+ origin_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6, TECH_ILLEGAL = 7)
/obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob)
..()
@@ -391,7 +391,7 @@ AI MODULES
/obj/item/weapon/aiModule/robocop // -- TLE
name = "\improper 'Robocop' core AI module"
desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'"
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
laws = new/datum/ai_laws/robocop()
/******************** Antimov ********************/
@@ -399,5 +399,5 @@ AI MODULES
/obj/item/weapon/aiModule/antimov // -- TLE
name = "\improper 'Antimov' core AI module"
desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'"
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
laws = new/datum/ai_laws/antimov()
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index da169c6dfc..9784709c51 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -13,8 +13,8 @@
throw_speed = 1
throw_range = 5
w_class = 3.0
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 2)
matter = list(DEFAULT_WALL_MATERIAL = 50000)
- origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
var/stored_matter = 0
var/working = 0
@@ -158,7 +158,7 @@
opacity = 0
density = 0
anchored = 0.0
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
matter = list(DEFAULT_WALL_MATERIAL = 30000,"glass" = 15000)
/obj/item/weapon/rcd/borg
diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm
index bf8c9d583c..a18a2fbeb6 100644
--- a/code/game/objects/items/weapons/autopsy.dm
+++ b/code/game/objects/items/weapons/autopsy.dm
@@ -9,7 +9,7 @@
icon_state = ""
flags = CONDUCT
w_class = 2.0
- origin_tech = "materials=1;biotech=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
var/list/datum/autopsy_data_scanner/wdata = list()
var/list/datum/autopsy_data_scanner/chemtraces = list()
var/target_name = null
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index 75693427ef..b1448f7516 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -60,14 +60,14 @@
name = "broken cryptographic sequencer"
icon_state = "emag"
item_state = "card-id"
- origin_tech = "magnets=2;syndicate=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
/obj/item/weapon/card/emag
desc = "It's a card with a magnetic strip attached to some circuitry."
name = "cryptographic sequencer"
icon_state = "emag"
item_state = "card-id"
- origin_tech = "magnets=2;syndicate=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
var/uses = 10
// List of devices that cost a use to emag.
var/list/devices = list(
@@ -189,7 +189,7 @@
/obj/item/weapon/card/id/syndicate
name = "agent card"
access = list(access_maint_tunnels, access_syndicate, access_external_airlocks)
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/registered_user=null
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 8d8076cbab..a9ca4b8dc0 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -38,7 +38,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/burnt = 0
var/smoketime = 5
w_class = 1.0
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
attack_verb = list("burnt", "singed")
/obj/item/weapon/flame/match/process()
diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
index 2e82763c4c..fd30153c37 100644
--- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm
+++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
@@ -9,7 +9,7 @@
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
item_state = "electronic"
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
density = 0
anchored = 0
w_class = 2.0
diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
index d71e2dcb07..82d26686ee 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/computer.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
@@ -5,17 +5,17 @@
/obj/item/weapon/circuitboard/message_monitor
name = T_BOARD("message monitor console")
build_path = /obj/machinery/computer/message_monitor
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/aiupload
name = T_BOARD("AI upload console")
build_path = /obj/machinery/computer/aiupload
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/borgupload
name = T_BOARD("cyborg upload console")
build_path = /obj/machinery/computer/borgupload
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/med_data
name = T_BOARD("medical records console")
@@ -24,17 +24,17 @@
/obj/item/weapon/circuitboard/pandemic
name = T_BOARD("PanD.E.M.I.C. 2200")
build_path = /obj/machinery/computer/pandemic
- origin_tech = "programming=2;biotech=2"
+ origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
/obj/item/weapon/circuitboard/scan_consolenew
name = T_BOARD("DNA machine")
build_path = /obj/machinery/computer/scan_consolenew
- origin_tech = "programming=2;biotech=2"
+ origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
/obj/item/weapon/circuitboard/communications
name = T_BOARD("command and communications console")
build_path = /obj/machinery/computer/communications
- origin_tech = "programming=2;magnets=2"
+ origin_tech = list(TECH_DATA = 2, TECH_MAGNET = 2)
/obj/item/weapon/circuitboard/card
name = T_BOARD("ID card modification console")
@@ -47,7 +47,7 @@
/obj/item/weapon/circuitboard/teleporter
name = T_BOARD("teleporter control console")
build_path = /obj/machinery/computer/teleporter
- origin_tech = "programming=2;bluespace=2"
+ origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 2)
/obj/item/weapon/circuitboard/secure_data
name = T_BOARD("security records console")
@@ -80,22 +80,22 @@
/obj/item/weapon/circuitboard/robotics
name = T_BOARD("robotics control console")
build_path = /obj/machinery/computer/robotics
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/drone_control
name = T_BOARD("drone control console")
build_path = /obj/machinery/computer/drone_control
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/cloning
name = T_BOARD("cloning control console")
build_path = /obj/machinery/computer/cloning
- origin_tech = "programming=3;biotech=3"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
/obj/item/weapon/circuitboard/arcade
name = T_BOARD("arcade machine")
build_path = /obj/machinery/computer/arcade
- origin_tech = "programming=1"
+ origin_tech = list(TECH_DATA = 1)
/obj/item/weapon/circuitboard/turbine_control
name = T_BOARD("turbine control console")
@@ -104,7 +104,7 @@
/obj/item/weapon/circuitboard/solar_control
name = T_BOARD("solar control console")
build_path = /obj/machinery/power/solar_control
- origin_tech = "programming=2;powerstorage=2"
+ origin_tech = list(TECH_DATA = 2, TECH_POWER = 2)
/obj/item/weapon/circuitboard/powermonitor
name = T_BOARD("power monitoring console")
@@ -137,17 +137,17 @@
/obj/item/weapon/circuitboard/crew
name = T_BOARD("crew monitoring console")
build_path = /obj/machinery/computer/crew
- origin_tech = "programming=3;biotech=2;magnets=2"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MAGNET = 2)
/obj/item/weapon/circuitboard/mech_bay_power_console
name = T_BOARD("mech bay power control console")
build_path = /obj/machinery/computer/mech_bay_power_console
- origin_tech = "programming=2;powerstorage=3"
+ origin_tech = list(TECH_DATA = 2, TECH_POWER = 3)
/obj/item/weapon/circuitboard/operating
name = T_BOARD("patient monitoring console")
build_path = /obj/machinery/computer/operating
- origin_tech = "programming=2;biotech=2"
+ origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
/obj/item/weapon/circuitboard/curefab
name = T_BOARD("cure fabricator")
@@ -160,39 +160,39 @@
/obj/item/weapon/circuitboard/ordercomp
name = T_BOARD("supply ordering console")
build_path = /obj/machinery/computer/ordercomp
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/mining_shuttle
name = T_BOARD("mining shuttle console")
build_path = /obj/machinery/computer/shuttle_control/mining
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/engineering_shuttle
name = T_BOARD("engineering shuttle console")
build_path = /obj/machinery/computer/shuttle_control/engineering
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/research_shuttle
name = T_BOARD("research shuttle console")
build_path = /obj/machinery/computer/shuttle_control/research
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/aifixer
name = T_BOARD("AI integrity restorer")
build_path = /obj/machinery/computer/aifixer
- origin_tech = "programming=3;biotech=2"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 2)
/obj/item/weapon/circuitboard/area_atmos
name = T_BOARD("area air control console")
build_path = /obj/machinery/computer/area_atmos
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/prison_shuttle
name = T_BOARD("prison shuttle control console")
build_path = /obj/machinery/computer/prison_shuttle
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
/obj/item/weapon/circuitboard/rcon_console
name = T_BOARD("RCON remote control console")
build_path = /obj/machinery/computer/rcon
- origin_tech = "programming=4;engineering=3;powerstorage=5"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_POWER = 5)
diff --git a/code/game/objects/items/weapons/circuitboards/computer/supply.dm b/code/game/objects/items/weapons/circuitboards/computer/supply.dm
index 84c9aa3476..882e2714f6 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/supply.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/supply.dm
@@ -5,7 +5,7 @@
/obj/item/weapon/circuitboard/supplycomp
name = T_BOARD("supply control console")
build_path = /obj/machinery/computer/supplycomp
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
var/contraband_enabled = 0
/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
diff --git a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm
index 9a18f0df99..b7ad5db011 100644
--- a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm
@@ -5,14 +5,14 @@
/obj/item/weapon/circuitboard/comm_monitor
name = T_BOARD("telecommunications monitor console")
build_path = /obj/machinery/computer/telecomms/monitor
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/comm_server
name = T_BOARD("telecommunications server monitor console")
build_path = /obj/machinery/computer/telecomms/server
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/comm_traffic
name = T_BOARD("telecommunications traffic control console")
build_path = /obj/machinery/computer/telecomms/traffic
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
index 0b0c494cde..65949ae338 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/biogenerator.dm
@@ -6,7 +6,7 @@
name = T_BOARD("biogenerator")
build_path = "/obj/machinery/biogenerator"
board_type = "machine"
- origin_tech = "programming=2"
+ origin_tech = list(TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
index e3b22c3fec..b80a3abd34 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
@@ -6,7 +6,7 @@
name = T_BOARD("clone pod")
build_path = "/obj/machinery/clonepod"
board_type = "machine"
- origin_tech = "programming=3;biotech=3"
+ origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 2,
@@ -17,7 +17,7 @@
name = T_BOARD("cloning scanner")
build_path = "/obj/machinery/dna_scannernew"
board_type = "machine"
- origin_tech = "programming=2;biotech=2"
+ origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm
index 05ce85865d..badfb22a01 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/commsantenna.dm
@@ -6,7 +6,7 @@
name = T_BOARD("bluespacerelay")
build_path = "/obj/machinery/bluespacerelay"
board_type = "machine"
- origin_tech = "bluespace=4,programming=4"
+ origin_tech = list(TECH_BLUESPACE = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/stack/cable_coil" = 30,
"/obj/item/weapon/stock_parts/manipulator" = 2,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
index 97b60686e0..417b8c56d5 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/mining_drill.dm
@@ -6,7 +6,7 @@
name = T_BOARD("mining drill head")
build_path = "/obj/machinery/mining/drill"
board_type = "machine"
- origin_tech = "programming=1;engineering=1"
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINERING = 1)
req_components = list(
"/obj/item/weapon/stock_parts/capacitor" = 1,
"/obj/item/weapon/cell" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
index 0a8f2b6cdd..86e730e39a 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
@@ -6,7 +6,7 @@
name = T_BOARD("PACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman"
board_type = "machine"
- origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
+ origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINERING = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
@@ -16,9 +16,9 @@
/obj/item/weapon/circuitboard/pacman/super
name = T_BOARD("SUPERPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/super"
- origin_tech = "programming=3;powerstorage=4;engineering=4"
+ origin_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINERING = 4)
/obj/item/weapon/circuitboard/pacman/mrs
name = T_BOARD("MRSPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
- origin_tech = "programming=3;powerstorage=5;engineering=5"
+ origin_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINERING = 5)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
index 46241049b6..4e280716e5 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/power.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
@@ -6,14 +6,14 @@
name = T_BOARD("superconductive magnetic energy storage")
build_path = "/obj/machinery/power/smes/buildable"
board_type = "machine"
- origin_tech = "powerstorage=6;engineering=4"
+ origin_tech = list(TECH_POWER = 6, TECH_ENGINERING = 4)
req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
/obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU")
build_path = "/obj/machinery/power/smes/batteryrack"
board_type = "machine"
- origin_tech = "powerstorage=3;engineering=2"
+ origin_tech = list(TECH_POWER = 3, TECH_ENGINERING = 2)
req_components = list("/obj/item/weapon/cell" = 3)
/obj/item/weapon/circuitboard/ghettosmes
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
index 6feda42613..642b36b3b9 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/recharge_station.dm
@@ -6,7 +6,7 @@
name = T_BOARD("cyborg recharging station")
build_path = "/obj/machinery/recharge_station"
board_type = "machine"
- origin_tech = "programming=3;engineering=3"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 5,
"/obj/item/weapon/stock_parts/capacitor" = 2,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
index 0ab0822e4b..2dce038e3d 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -6,7 +6,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("R&D server")
build_path = "/obj/machinery/r_n_d/server"
board_type = "machine"
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 1)
@@ -15,7 +15,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("destructive analyzer")
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
- origin_tech = "magnets=2;engineering=2;programming=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -25,7 +25,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("autolathe")
build_path = "/obj/machinery/autolathe"
board_type = "machine"
- origin_tech = "engineering=2;programming=2"
+ origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 3,
"/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -35,7 +35,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("protolathe")
build_path = "/obj/machinery/r_n_d/protolathe"
board_type = "machine"
- origin_tech = "engineering=2;programming=2"
+ origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 2,
@@ -46,7 +46,7 @@ obj/item/weapon/circuitboard/rdserver
name = T_BOARD("circuit imprinter")
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
board_type = "machine"
- origin_tech = "engineering=2;programming=2"
+ origin_tech = list(TECH_ENGINERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
@@ -56,7 +56,7 @@ obj/item/weapon/circuitboard/rdserver
name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine"
- origin_tech = "programming=3;engineering=3"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
index cbfe5f69b1..6dc0a3f7ab 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
@@ -6,7 +6,7 @@
name = T_BOARD("hull shield generator")
board_type = "machine"
build_path = "/obj/machinery/shield_gen/external"
- origin_tech = "bluespace=4;phorontech=3"
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
@@ -19,7 +19,7 @@
name = T_BOARD("bubble shield generator")
board_type = "machine"
build_path = "/obj/machinery/shield_gen"
- origin_tech = "bluespace=4;phorontech=3"
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
@@ -32,7 +32,7 @@
name = T_BOARD("shield capacitor")
board_type = "machine"
build_path = "/obj/machinery/shield_capacitor"
- origin_tech = "magnets=3;powerstorage=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
index 7e0195de9a..3a20c8d358 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -8,7 +8,7 @@
/obj/item/weapon/circuitboard/telecomms/receiver
name = T_BOARD("subspace receiver")
build_path = "/obj/machinery/telecomms/receiver"
- origin_tech = "programming=4;engineering=3;bluespace=2"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_BLUESPACE = 2)
req_components = list(
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -18,7 +18,7 @@
/obj/item/weapon/circuitboard/telecomms/hub
name = T_BOARD("hub mainframe")
build_path = "/obj/machinery/telecomms/hub"
- origin_tech = "programming=4;engineering=4"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2,
@@ -27,7 +27,7 @@
/obj/item/weapon/circuitboard/telecomms/relay
name = T_BOARD("relay mainframe")
build_path = "/obj/machinery/telecomms/relay"
- origin_tech = "programming=3;engineering=4;bluespace=3"
+ origin_tech = list(TECH_DATA = 3, TECH_ENGINERING = 4, TECH_BLUESPACE = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2,
@@ -36,7 +36,7 @@
/obj/item/weapon/circuitboard/telecomms/bus
name = T_BOARD("bus mainframe")
build_path = "/obj/machinery/telecomms/bus"
- origin_tech = "programming=4;engineering=4"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
@@ -45,7 +45,7 @@
/obj/item/weapon/circuitboard/telecomms/processor
name = T_BOARD("processor unit")
build_path = "/obj/machinery/telecomms/processor"
- origin_tech = "programming=4;engineering=4"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 3,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
@@ -57,7 +57,7 @@
/obj/item/weapon/circuitboard/telecomms/server
name = T_BOARD("telecommunication server")
build_path = "/obj/machinery/telecomms/server"
- origin_tech = "programming=4;engineering=4"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
@@ -66,7 +66,7 @@
/obj/item/weapon/circuitboard/telecomms/broadcaster
name = T_BOARD("subspace broadcaster")
build_path = "/obj/machinery/telecomms/broadcaster"
- origin_tech = "programming=4;engineering=4;bluespace=2"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4, TECH_BLUESPACE = 2)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
index a1beabbea6..394927ac72 100644
--- a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
@@ -16,7 +16,7 @@
/obj/item/weapon/circuitboard/unary_atmos/heater
name = T_BOARD("gas heating system")
build_path = "/obj/machinery/atmospherics/unary/heater"
- origin_tech = "powerstorage=2;engineering=1"
+ origin_tech = list(TECH_POWER = 2, TECH_ENGINERING = 1)
req_components = list(
"/obj/item/stack/cable_coil" = 5,
"/obj/item/weapon/stock_parts/matter_bin" = 1,
@@ -25,7 +25,7 @@
/obj/item/weapon/circuitboard/unary_atmos/cooler
name = T_BOARD("gas cooling system")
build_path = "/obj/machinery/atmospherics/unary/freezer"
- origin_tech = "magnets=2;engineering=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/matter_bin" = 1,
diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm
index ad859479c5..0ce851e3a3 100644
--- a/code/game/objects/items/weapons/circuitboards/mecha.dm
+++ b/code/game/objects/items/weapons/circuitboards/mecha.dm
@@ -12,7 +12,7 @@
/obj/item/weapon/circuitboard/mecha/ripley
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
name = T_BOARD_MECHA("Ripley peripherals control")
@@ -24,7 +24,7 @@
/obj/item/weapon/circuitboard/mecha/gygax
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/gygax/peripherals
name = T_BOARD_MECHA("Gygax peripherals control")
@@ -33,7 +33,7 @@
/obj/item/weapon/circuitboard/mecha/gygax/targeting
name = T_BOARD_MECHA("Gygax weapon control and targeting")
icon_state = "mcontroller"
- origin_tech = "programming=4;combat=4"
+ origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
/obj/item/weapon/circuitboard/mecha/gygax/main
name = T_BOARD_MECHA("Gygax central control")
@@ -41,7 +41,7 @@
/obj/item/weapon/circuitboard/mecha/durand
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/durand/peripherals
name = T_BOARD_MECHA("Durand peripherals control")
@@ -50,7 +50,7 @@
/obj/item/weapon/circuitboard/mecha/durand/targeting
name = T_BOARD_MECHA("Durand weapon control and targeting")
icon_state = "mcontroller"
- origin_tech = "programming=4;combat=4"
+ origin_tech = list(TECH_DATA = 4, TECH_COMBAT = 4)
/obj/item/weapon/circuitboard/mecha/durand/main
name = T_BOARD_MECHA("Durand central control")
@@ -58,7 +58,7 @@
/obj/item/weapon/circuitboard/mecha/honker
- origin_tech = "programming=4"
+ origin_tech = list(TECH_DATA = 4)
/obj/item/weapon/circuitboard/mecha/honker/peripherals
name = T_BOARD_MECHA("H.O.N.K peripherals control")
@@ -74,7 +74,7 @@
/obj/item/weapon/circuitboard/mecha/odysseus
- origin_tech = "programming=3"
+ origin_tech = list(TECH_DATA = 3)
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals
name = T_BOARD_MECHA("Odysseus peripherals control")
diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm
index ec38643bed..6d016a96fa 100644
--- a/code/game/objects/items/weapons/circuitboards/other.dm
+++ b/code/game/objects/items/weapons/circuitboards/other.dm
@@ -6,5 +6,5 @@
/obj/item/weapon/circuitboard/aicore
name = T_BOARD("AI core")
- origin_tech = "programming=4;biotech=2"
+ origin_tech = list(TECH_DATA = 4, TECH_BIO = 2)
board_type = "other"
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 36c97d3df2..1d25089eca 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -7,7 +7,7 @@
item_state = "plasticx"
flags = NOBLUDGEON
w_class = 2.0
- origin_tech = "syndicate=2"
+ origin_tech = list(TECH_ILLEGAL = 2)
var/datum/wires/explosive/c4/wires = null
var/timer = 10
var/atom/target = null
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index a8d03b9539..25eacadde7 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -10,8 +10,8 @@
throw_speed = 1
throw_range = 5
w_class = 3.0
- matter = list(DEFAULT_WALL_MATERIAL = 500)
- origin_tech = "combat=1;phorontech=1"
+ origin_tech = list(TECH_COMBAT = 1, TECH_PHORON = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500)
var/status = 0
var/throw_amount = 100
var/lit = 0 //on or off
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index 5dc787cd4b..6d5ea444cb 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -134,7 +134,6 @@
prime()
if(!stage || stage<2) return
- //if(prob(reliability))
var/has_reagents = 0
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
if(G.reagents.total_volume) has_reagents = 1
@@ -175,7 +174,7 @@
desc = "An oversized grenade that affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass)
- origin_tech = "combat=3;materials=3"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
affected_area = 4
/obj/item/weapon/grenade/chem_grenade/metalfoam
diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm
index c354aa4039..f8c2a12d2f 100644
--- a/code/game/objects/items/weapons/grenades/emgrenade.dm
+++ b/code/game/objects/items/weapons/grenades/emgrenade.dm
@@ -2,7 +2,7 @@
name = "classic emp grenade"
icon_state = "emp"
item_state = "emp"
- origin_tech = "materials=2;magnets=3"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
prime()
..()
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 4c3c73c485..d4df5bd1ac 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -2,7 +2,7 @@
name = "flashbang"
icon_state = "flashbang"
item_state = "flashbang"
- origin_tech = "materials=2;combat=1"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1)
var/banglet = 0
prime()
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 6adea8e2f5..9677a73345 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/grenade.dmi'
icon_state = "delivery"
item_state = "flashbang"
- origin_tech = "materials=3;magnets=4"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4)
var/banglet = 0
var/spawner_type = null // must be an object path
var/deliveryamt = 1 // amount of type to deliver
@@ -35,10 +35,10 @@
name = "manhack delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/viscerator
deliveryamt = 5
- origin_tech = "materials=3;magnets=4;syndicate=4"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
/obj/item/weapon/grenade/spawnergrenade/spesscarp
name = "carp delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/carp
deliveryamt = 5
- origin_tech = "materials=3;magnets=4;syndicate=4"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 69dde080c3..d32bf163ea 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -10,8 +10,8 @@
w_class = 2.0
throw_speed = 2
throw_range = 5
- matter = list(DEFAULT_WALL_MATERIAL = 500)
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500)
var/dispenser = 0
var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
var/cuff_sound = 'sound/weapons/handcuffs.ogg'
diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm
index 04e112ba8a..708d91e6d1 100644
--- a/code/game/objects/items/weapons/material/twohanded.dm
+++ b/code/game/objects/items/weapons/material/twohanded.dm
@@ -188,7 +188,7 @@
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
flags = NOSHIELD
- origin_tech = "magnets=3;syndicate=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4)
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharp = 1
edge = 1
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 8b2a657dd5..be28203098 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -74,7 +74,7 @@
throw_range = 5
w_class = 3
flags = CONDUCT | NOSHIELD | NOBLOODY
- origin_tech = "magnets=3;combat=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 4)
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
sharp = 1
edge = 1
@@ -110,7 +110,7 @@
throw_range = 5
w_class = 2
flags = NOSHIELD | NOBLOODY
- origin_tech = "magnets=3;syndicate=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4)
sharp = 1
edge = 1
var/blade_color
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index c5efdae1fb..c6bb1c64b5 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -8,7 +8,7 @@
force = 10
throwforce = 7
w_class = 3
- origin_tech = "combat=4"
+ origin_tech = list(TECH_COMBAT = 4)
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
suicide_act(mob/user)
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 96c635b778..b83d1778de 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "cell"
item_state = "cell"
- origin_tech = "powerstorage=1"
+ origin_tech = list(TECH_POWER = 1)
force = 5.0
throwforce = 5.0
throw_speed = 3
@@ -42,7 +42,7 @@
/obj/item/weapon/cell/crap
name = "\improper Nanotrasen brand rechargable AA battery"
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
- origin_tech = "powerstorage=0"
+ origin_tech = list(TECH_POWER = 0)
maxcharge = 500
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 40)
@@ -52,7 +52,7 @@
/obj/item/weapon/cell/secborg
name = "security borg rechargable D battery"
- origin_tech = "powerstorage=0"
+ origin_tech = list(TECH_POWER = 0)
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 40)
@@ -62,13 +62,13 @@
/obj/item/weapon/cell/apc
name = "heavy-duty power cell"
- origin_tech = "powerstorage=1"
+ origin_tech = list(TECH_POWER = 1)
maxcharge = 5000
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 50)
/obj/item/weapon/cell/high
name = "high-capacity power cell"
- origin_tech = "powerstorage=2"
+ origin_tech = list(TECH_POWER = 2)
icon_state = "hcell"
maxcharge = 10000
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 60)
@@ -79,7 +79,7 @@
/obj/item/weapon/cell/super
name = "super-capacity power cell"
- origin_tech = "powerstorage=5"
+ origin_tech = list(TECH_POWER = 5)
icon_state = "scell"
maxcharge = 20000
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 70)
@@ -91,7 +91,7 @@
/obj/item/weapon/cell/hyper
name = "hyper-capacity power cell"
- origin_tech = "powerstorage=6"
+ origin_tech = list(TECH_POWER = 6)
icon_state = "hpcell"
maxcharge = 30000
matter = list(DEFAULT_WALL_MATERIAL = 700, "glass" = 80)
@@ -116,7 +116,7 @@
/obj/item/weapon/cell/potato
name = "potato battery"
desc = "A rechargable starch based power cell."
- origin_tech = "powerstorage=1"
+ origin_tech = list(TECH_POWER = 1)
icon = 'icons/obj/power.dmi' //'icons/obj/harvest.dmi'
icon_state = "potato_cell" //"potato_battery"
charge = 100
@@ -127,7 +127,7 @@
/obj/item/weapon/cell/slime
name = "charged slime core"
desc = "A yellow slime core infused with phoron, it crackles with power."
- origin_tech = "powerstorage=2;biotech=4"
+ origin_tech = list(TECH_POWER = 2, TECH_BIO = 4)
icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi'
icon_state = "yellow slime extract" //"potato_battery"
maxcharge = 10000
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index 92ba323a6a..618598c182 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -8,7 +8,7 @@
item_state = "paper"
throw_speed = 4
throw_range = 20
- origin_tech = "bluespace=4"
+ origin_tech = list(TECH_BLUESPACE = 4)
/obj/item/weapon/teleportation_scroll/attack_self(mob/user as mob)
user.set_machine(src)
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 436eea0339..612dde6d7b 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -13,8 +13,8 @@
throw_speed = 1
throw_range = 4
w_class = 4.0
- matter = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 1000)
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
+ matter = list("glass" = 7500, DEFAULT_WALL_MATERIAL = 1000)
attack_verb = list("shoved", "bashed")
var/cooldown = 0 //shield bash cooldown. based on world.time
@@ -45,7 +45,7 @@
throw_speed = 1
throw_range = 4
w_class = 2
- origin_tech = "materials=4;magnets=3;syndicate=4"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_ILLEGAL = 4)
attack_verb = list("shoved", "bashed")
var/active = 0
@@ -94,7 +94,7 @@
throw_speed = 2
throw_range = 10
w_class = 2.0
- origin_tech = "magnets=3;syndicate=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4)
/obj/item/weapon/cloaking_device/attack_self(mob/user as mob)
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 541b41f74d..24ea335b10 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -46,7 +46,7 @@
/obj/item/weapon/storage/backpack/holding
name = "bag of holding"
desc = "A backpack that opens into a localized pocket of Blue Space."
- origin_tech = "bluespace=4"
+ origin_tech = list(TECH_BLUESPACE = 4)
icon_state = "holdingpack"
max_w_class = 4
max_storage_space = 56
@@ -56,25 +56,10 @@
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(crit_fail)
- user << "\red The Bluespace generator isn't working."
- return
- if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
+ if(istype(W, /obj/item/weapon/storage/backpack/holding))
user << "\red The Bluespace interfaces of the two devices conflict and malfunction."
qdel(W)
- return
- /* //BoH+BoH=Singularity, commented out.
- if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
- investigate_log("has become a singularity. Caused by [user.key]","singulo")
- user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
- qdel(W)
- var/obj/singularity/singulo = new /obj/singularity (get_turf(src))
- singulo.energy = 300 //should make it a bit bigger~
- message_admins("[key_name_admin(user)] detonated a bag of holding")
- log_game("[key_name(user)] detonated a bag of holding")
- qdel(src)
- return
- */
+ return
..()
//Please don't clutter the parent storage item with stupid hacks.
@@ -82,19 +67,7 @@
if(istype(W, /obj/item/weapon/storage/backpack/holding))
return 1
return ..()
-
- proc/failcheck(mob/user as mob)
- if (prob(src.reliability)) return 1 //No failure
- if (prob(src.reliability))
- user << "\red The Bluespace portal resists your attempt to add another item." //light failure
- else
- user << "\red The Bluespace generator malfunctions!"
- for (var/obj/O in src.contents) //it broke, delete what was in it
- qdel(O)
- crit_fail = 1
- icon_state = "brokenpack"
-
-
+
/obj/item/weapon/storage/backpack/santabag
name = "\improper Santa's gift bag"
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 8f589f9883..11c2d6a853 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -12,7 +12,7 @@
w_class = 4
max_w_class = 3
max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change).
- origin_tech = "combat=1"
+ origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("robusted")
/obj/item/weapon/storage/toolbox/emergency
@@ -67,7 +67,7 @@
name = "suspicious looking toolbox"
icon_state = "syndicate"
item_state = "toolbox_syndi"
- origin_tech = "combat=1;syndicate=1"
+ origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
force = 7.0
New()
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index bed0591a7e..63bbde044c 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -10,7 +10,7 @@
edge = 0
throwforce = 7
w_class = 3
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
attack_verb = list("beaten")
var/stunforce = 0
var/agonyforce = 60
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 55d233e3bc..9f32e0f73b 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -19,7 +19,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
flags = CONDUCT
w_class = 2.0
- origin_tech = "materials=1;biotech=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
/*
* Hemostat
@@ -32,7 +32,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
flags = CONDUCT
w_class = 2.0
- origin_tech = "materials=1;biotech=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("attacked", "pinched")
/*
@@ -46,7 +46,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 2500)
flags = CONDUCT
w_class = 2.0
- origin_tech = "materials=1;biotech=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("burnt")
/*
@@ -62,7 +62,7 @@
flags = CONDUCT
force = 15.0
w_class = 2.0
- origin_tech = "materials=1;biotech=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
attack_verb = list("drilled")
suicide_act(mob/user)
@@ -86,8 +86,8 @@
throwforce = 5.0
throw_speed = 3
throw_range = 5
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
- origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
suicide_act(mob/user)
@@ -140,8 +140,8 @@
throwforce = 9.0
throw_speed = 3
throw_range = 5
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
matter = list(DEFAULT_WALL_MATERIAL = 20000,"glass" = 10000)
- origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "slashed", "sawed", "cut")
sharp = 1
edge = 1
@@ -161,7 +161,7 @@
icon_state = "fixovein"
force = 0
throwforce = 1.0
- origin_tech = "materials=1;biotech=3"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3)
w_class = 2.0
var/usage_amount = 10
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 996be52663..fdad2423fc 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -21,8 +21,8 @@
item_state = "electronic"
throw_speed = 4
throw_range = 20
- matter = list(DEFAULT_WALL_MATERIAL = 400)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 400)
/obj/item/weapon/locator/attack_self(mob/user as mob)
user.set_machine(src)
@@ -132,8 +132,8 @@ Frequency:
w_class = 2.0
throw_speed = 3
throw_range = 5
- matter = list(DEFAULT_WALL_MATERIAL = 10000)
- origin_tech = "magnets=1;bluespace=3"
+ origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 10000)
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = get_turf(user)//What turf is the user on?
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 1cd40d6c89..2bf69d31e7 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -24,8 +24,8 @@
force = 5.0
throwforce = 7.0
w_class = 2.0
- matter = list(DEFAULT_WALL_MATERIAL = 150)
- origin_tech = "materials=1;engineering=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 150)
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
@@ -103,8 +103,8 @@
throw_speed = 2
throw_range = 9
w_class = 2.0
- matter = list(DEFAULT_WALL_MATERIAL = 80)
- origin_tech = "materials=1;engineering=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 80)
attack_verb = list("pinched", "nipped")
sharp = 1
edge = 1
@@ -148,7 +148,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30)
//R&D tech level
- origin_tech = "engineering=1"
+ origin_tech = list(TECH_ENGINERING = 1)
//Welding tool specific stuff
var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
@@ -366,22 +366,22 @@
/obj/item/weapon/weldingtool/largetank
name = "industrial welding tool"
max_fuel = 40
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
- origin_tech = "engineering=2"
+ origin_tech = list(TECH_ENGINERING = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
/obj/item/weapon/weldingtool/hugetank
name = "upgraded welding tool"
max_fuel = 80
w_class = 3.0
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
- origin_tech = "engineering=3"
+ origin_tech = list(TECH_ENGINERING = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
/obj/item/weapon/weldingtool/experimental
name = "experimental welding tool"
max_fuel = 40
w_class = 3.0
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
- origin_tech = "engineering=4;phorontech=3"
+ origin_tech = list(TECH_ENGINERING = 4, TECH_PHORON = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
var/last_gen = 0
@@ -407,8 +407,8 @@
throwforce = 7.0
item_state = "crowbar"
w_class = 2.0
- matter = list(DEFAULT_WALL_MATERIAL = 50)
- origin_tech = "engineering=1"
+ origin_tech = list(TECH_ENGINERING = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 50)
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
/obj/item/weapon/crowbar/red
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 09304d1ea2..795027ea3f 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -2,9 +2,7 @@
//Used to store information about the contents of the object.
var/list/matter
- 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
+ var/list/origin_tech = null //Used by R&D to determine what research bonuses it grants.
var/unacidable = 0 //universal "unacidabliness" var, here so you can use it in any obj.
animate_movement = 2
var/throwforce = 1
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index e73856b85f..09b15fe775 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -9,7 +9,7 @@
throwforce = 2
throw_speed = 3
throw_range = 10
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
var/secured = 1
var/list/attached_overlays = null
diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm
index d44f45fa97..fc34669f3d 100644
--- a/code/modules/assembly/igniter.dm
+++ b/code/modules/assembly/igniter.dm
@@ -2,8 +2,8 @@
name = "igniter"
desc = "A small electronic device able to ignite combustable substances."
icon_state = "igniter"
- matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
secured = 1
wires = WIRE_RECEIVE
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index d163a9d29f..56d8c9595d 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -4,8 +4,8 @@
name = "infrared emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
icon_state = "infrared"
- matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
- origin_tech = "magnets=2"
+ origin_tech = list(TECH_MAGNET = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100)
wires = WIRE_PULSE
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index a2cbe632c7..3537fbee50 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -2,8 +2,8 @@
name = "mousetrap"
desc = "A handy little spring-loaded trap for catching pesty rodents."
icon_state = "mousetrap"
- matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10)
- origin_tech = "combat=1"
+ origin_tech = list(TECH_COMBAT = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 10)
var/armed = 0
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index 39bf3f2fcc..d973e88b95 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -2,8 +2,8 @@
name = "proximity sensor"
desc = "Used for scanning and alerting when someone enters a certain proximity."
icon_state = "prox"
- matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 800, "glass" = 200, "waste" = 50)
wires = WIRE_PULSE
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index 4d93ad26ee..5a6faa7fe9 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -3,8 +3,8 @@
desc = "Used to remotely activate devices."
icon_state = "signaller"
item_state = "signaler"
- matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 200, "waste" = 100)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 200, "waste" = 100)
wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE
secured = 1
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index d4fb73a764..cdd927afd6 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -2,8 +2,8 @@
name = "timer"
desc = "Used to time things. Works well with contraptions which has to count down. Tick tock."
icon_state = "timer"
- matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
- origin_tech = "magnets=1"
+ origin_tech = list(TECH_MAGNET = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
wires = WIRE_PULSE
diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm
index ca33f9d106..7e8c89cc79 100644
--- a/code/modules/assembly/voice.dm
+++ b/code/modules/assembly/voice.dm
@@ -2,8 +2,8 @@
name = "voice analyzer"
desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated."
icon_state = "voice"
+ origin_tech = list(TECH_MAGNET = 1)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 50, "waste" = 10)
- origin_tech = "magnets=1"
var/listening = 0
var/recorded //the activation message
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 783025a933..a11f0b8d7d 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -212,8 +212,6 @@ BLIND // can't see anything
cell.charge -= 1000 / severity
if (cell.charge < 0)
cell.charge = 0
- if(cell.reliability != 100 && prob(50/severity))
- cell.reliability -= 10 / severity
..()
// Called just before an attack_hand(), in mob/UnarmedAttack()
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index b6538495b4..49f6e75f87 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -38,7 +38,7 @@
icon_state = "meson"
item_state = "glasses"
icon_action_button = "action_meson" //This doesn't actually matter, the action button is generated from the current icon_state. But, this is the only way to get it to show up.
- origin_tech = "magnets=2;engineering=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
toggleable = 1
vision_flags = SEE_TURFS
@@ -73,7 +73,7 @@
desc = "You can totally see in the dark now!"
icon_state = "night"
item_state = "glasses"
- origin_tech = "magnets=2"
+ origin_tech = list(TECH_MAGNET = 2)
darkness_view = 7
toggleable = 1
icon_action_button = "action_nvg"
@@ -103,7 +103,7 @@
icon_state = "material"
item_state = "glasses"
icon_action_button = "action_material"
- origin_tech = "magnets=3;engineering=3"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 3)
toggleable = 1
vision_flags = SEE_OBJS
@@ -221,7 +221,7 @@
desc = "Thermals in the shape of glasses."
icon_state = "thermal"
item_state = "glasses"
- origin_tech = "magnets=3"
+ origin_tech = list(TECH_MAGNET = 3)
toggleable = 1
icon_action_button = "action_thermal"
vision_flags = SEE_MOBS
@@ -249,7 +249,7 @@
name = "Optical Meson Scanner"
desc = "Used for seeing walls, floors, and stuff through anything."
icon_state = "meson"
- origin_tech = "magnets=3;syndicate=4"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ILLEGAL = 4)
/obj/item/clothing/glasses/thermal/plain
toggleable = 0
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index 60dd6174b1..fa273534e6 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -2,7 +2,7 @@
name = "HUD"
desc = "A heads-up display that provides important info in (almost) real time."
flags = null //doesn't protect eyes because it's a monocle, duh
- origin_tech = "magnets=3;biotech=2"
+ origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 2)
var/list/icon/current = list() //the current hud icons
proc
diff --git a/code/modules/clothing/masks/voice.dm b/code/modules/clothing/masks/voice.dm
index 6899fef1ef..70459e62af 100644
--- a/code/modules/clothing/masks/voice.dm
+++ b/code/modules/clothing/masks/voice.dm
@@ -8,7 +8,7 @@
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply. It seems to house some odd electronics."
var/obj/item/voice_changer/changer
- origin_tech = "syndicate=4"
+ origin_tech = list(TECH_ILLEGAL = 4)
/obj/item/clothing/mask/gas/voice/verb/Toggle_Voice_Changer()
set category = "Object"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 9fd713fc74..78ec142eba 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -5,7 +5,7 @@
item_state = "brown"
permeability_coefficient = 0.05
flags = NOSLIP
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
siemens_coefficient = 0.8
species_restricted = null
diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm
index 4de31fb6e3..983145fd54 100644
--- a/code/modules/clothing/under/chameleon.dm
+++ b/code/modules/clothing/under/chameleon.dm
@@ -9,7 +9,7 @@
item_state = "bl_suit"
worn_state = "black"
desc = "It's a plain jumpsuit. It seems to have a small dial on the wrist."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/under/chameleon/New()
@@ -60,7 +60,7 @@
icon_state = "greysoft"
item_state = "greysoft"
desc = "It looks like a plain hat, but upon closer inspection, there's an advanced holographic array installed inside. It seems to have a small dial inside."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
body_parts_covered = 0
var/list/clothing_choices = list()
@@ -110,7 +110,7 @@
icon_state = "armor"
item_state = "armor"
desc = "It appears to be a vest of standard armor, except this is embedded with a hidden holographic cloaker, allowing it to change it's appearance, but offering no protection.. It seems to have a small dial inside."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/suit/chameleon/New()
@@ -159,7 +159,7 @@
icon_state = "black"
item_state = "black"
desc = "They're comfy black shoes, with clever cloaking technology built in. It seems to have a small dial on the back of each shoe."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/shoes/chameleon/New()
@@ -206,7 +206,7 @@
icon_state = "backpack"
item_state = "backpack"
desc = "A backpack outfitted with cloaking tech. It seems to have a small dial inside, kept away from the storage."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/weapon/storage/backpack/chameleon/New()
@@ -260,7 +260,7 @@
icon_state = "black"
item_state = "bgloves"
desc = "It looks like a pair of gloves, but it seems to have a small dial inside."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/gloves/chameleon/New()
@@ -308,7 +308,7 @@
icon_state = "gas_alt"
item_state = "gas_alt"
desc = "It looks like a plain gask mask, but on closer inspection, it seems to have a small dial inside."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/mask/chameleon/New()
@@ -358,7 +358,7 @@
icon_state = "meson"
item_state = "glasses"
desc = "It looks like a plain set of mesons, but on closer inspection, it seems to have a small dial inside."
- origin_tech = "syndicate=3"
+ origin_tech = list(TECH_ILLEGAL = 3)
var/list/clothing_choices = list()
/obj/item/clothing/glasses/chameleon/New()
@@ -407,7 +407,7 @@
w_class = 3.0
max_shells = 7
caliber = ".45"
- origin_tech = "combat=2;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
ammo_type = "/obj/item/ammo_casing/chameleon"
matter = list()
var/list/gun_choices = list()
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index 2d53c6c29c..cc80c3bed4 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -27,8 +27,8 @@
desc = "A stack of sheets of [material.display_name]."
recipes = material.get_recipes()
stacktype = material.stack_type
- origin_tech = material.stack_origin_tech
- perunit = material.stack_per_sheet
+ origin_tech = material.stack_origin_tech.Copy()
+ perunit = SHEET_MATERIAL_AMOUNT
if(apply_colour)
color = material.icon_colour
@@ -42,7 +42,7 @@
for(var/material_string in material.composite_material)
matter[material_string] = material.composite_material[material_string]
else
- matter[material.name] = material.stack_per_sheet
+ matter[material.name] = SHEET_MATERIAL_AMOUNT
return 1
obj/item/stack/material/iron
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index a3189d6e0f..112d45e21f 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -58,12 +58,11 @@ var/list/name_to_material
var/destruction_desc = "breaks apart" // Fancy string for barricades/tables/objects exploding.
// Icons
- var/icon_colour // Colour applied to products of this material.
- var/icon_base = "metal" // Wall and table base icon tag. See header.
- var/door_icon_base = "metal" // Door base icon tag. See header.
- var/icon_reinf = "reinf_metal" // Overlay used
- var/stack_origin_tech = "materials=1" // Research level for stacks.
- var/stack_per_sheet = 2000 // perunit value for stacks.
+ var/icon_colour // Colour applied to products of this material.
+ var/icon_base = "metal" // Wall and table base icon tag. See header.
+ var/door_icon_base = "metal" // Door base icon tag. See header.
+ var/icon_reinf = "reinf_metal" // Overlay used
+ var/list/stack_origin_tech = list(TECH_MATERIAL = 1) // Research level for stacks.
// Attributes
var/cut_delay = 0 // Delay in ticks when cutting through this wall.
@@ -153,7 +152,7 @@ var/list/name_to_material
icon_reinf = "reinf_stone"
icon_colour = "#007A00"
weight = 22
- stack_origin_tech = "materials=5"
+ stack_origin_tech = list(TECH_MATERIAL = 5)
door_icon_base = "stone"
/material/diamond
@@ -166,8 +165,7 @@ var/list/name_to_material
shard_type = SHARD_SHARD
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 100
- stack_origin_tech = "materials=6"
- stack_per_sheet = 3750
+ stack_origin_tech = list(TECH_MATERIAL = 6)
/material/gold
name = "gold"
@@ -175,7 +173,7 @@ var/list/name_to_material
icon_colour = "#EDD12F"
weight = 24
hardness = 40
- stack_origin_tech = "materials=4"
+ stack_origin_tech = list(TECH_MATERIAL = 4)
/material/silver
name = "silver"
@@ -183,8 +181,8 @@ var/list/name_to_material
icon_colour = "#D1E6E3"
weight = 22
hardness = 50
- stack_origin_tech = "materials=3"
-
+ stack_origin_tech = list(TECH_MATERIAL = 3)
+
/material/phoron
name = "phoron"
stack_type = /obj/item/stack/material/phoron
@@ -193,7 +191,7 @@ var/list/name_to_material
icon_colour = "#FC2BC5"
shard_type = SHARD_SHARD
hardness = 30
- stack_origin_tech = "phorontech=2;materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2, TECH_PHORON = 2)
door_icon_base = "stone"
/material/stone
@@ -238,7 +236,7 @@ var/list/name_to_material
explosion_resistance = 25
hardness = 80
weight = 23
- stack_origin_tech = "materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list() //todo
/material/glass
@@ -262,12 +260,12 @@ var/list/name_to_material
ignition_point = 300
integrity = 200 // idk why but phoron windows are strong, so.
icon_colour = "#FC2BC5"
- stack_origin_tech = "materials=3;phorontech=2"
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_PHORON = 2)
/material/glass/phoron/reinforced
name = "reinforced phoron glass"
stack_type = /obj/item/stack/material/glass/phoronrglass
- stack_origin_tech = "materials=4;phorontech=2"
+ stack_origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 2)
composite_material = list() //todo
/material/glass/reinforced
@@ -281,7 +279,7 @@ var/list/name_to_material
tableslam_noise = 'sound/effects/Glasshit.ogg'
hardness = 40
weight = 30
- stack_origin_tech = "materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list() //todo
/material/plastic
@@ -293,39 +291,38 @@ var/list/name_to_material
icon_colour = "#CCCCCC"
hardness = 10
weight = 12
- stack_origin_tech = "materials=3"
+ stack_origin_tech = list(TECH_MATERIAL = 3)
/material/osmium
name = "osmium"
stack_type = /obj/item/stack/material/osmium
icon_colour = "#9999FF"
- stack_origin_tech = "materials=5"
+ stack_origin_tech = list(TECH_MATERIAL = 5)
/material/tritium
name = "tritium"
stack_type = /obj/item/stack/material/tritium
icon_colour = "#777777"
- stack_origin_tech = "materials=5"
+ stack_origin_tech = list(TECH_MATERIAL = 5)
/material/mhydrogen
name = "mhydrogen"
stack_type = /obj/item/stack/material/mhydrogen
icon_colour = "#E6C5DE"
- stack_origin_tech = "materials=6;powerstorage=5;magnets=5"
+ stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5)
/material/platinum
name = "platinum"
stack_type = /obj/item/stack/material/platinum
icon_colour = "#9999FF"
weight = 27
- stack_origin_tech = "materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2)
/material/iron
name = "iron"
stack_type = /obj/item/stack/material/iron
icon_colour = "#5C5454"
weight = 22
- stack_per_sheet = 3750
/material/wood
name = "wood"
@@ -338,7 +335,7 @@ var/list/name_to_material
shard_can_repair = 0 // you can't weld splinters back into planks
hardness = 15
weight = 18
- stack_origin_tech = "materials=1;biotech=1"
+ stack_origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
dooropen_noise = 'sound/effects/doorcreaky.ogg'
door_icon_base = "wood"
destruction_desc = "splinters"
@@ -358,13 +355,13 @@ var/list/name_to_material
icon_colour = "#AAAAAA"
hardness = 1
weight = 1
- stack_origin_tech = "materials=1"
+ stack_origin_tech = list(TECH_MATERIAL = 1)
door_icon_base = "wood"
destruction_desc = "crumples"
/material/cloth //todo
name = "cloth"
- stack_origin_tech = "materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2)
door_icon_base = "wood"
/material/cult
@@ -403,7 +400,7 @@ var/list/name_to_material
/material/leather //todo
name = "leather"
icon_colour = "#5C4831"
- stack_origin_tech = "materials=2"
+ stack_origin_tech = list(TECH_MATERIAL = 2)
/material/carpet
name = "carpet"
diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm
index 6903256d92..878bf1b2c2 100644
--- a/code/modules/mining/drilling/scanner.dm
+++ b/code/modules/mining/drilling/scanner.dm
@@ -4,8 +4,8 @@
icon = 'icons/obj/device.dmi'
icon_state = "forensic0-old" //GET A BETTER SPRITE.
item_state = "electronic"
+ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINERING = 1)
matter = list(DEFAULT_WALL_MATERIAL = 150)
- origin_tech = "magnets=1;engineering=1"
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
user << "You begin sweeping \the [src] about, scanning for metal deposits."
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 02b1a77174..2a472459f0 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -51,7 +51,7 @@
w_class = 4.0
matter = list(DEFAULT_WALL_MATERIAL = 3750)
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
- origin_tech = "materials=1;engineering=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
attack_verb = list("hit", "pierced", "sliced", "attacked")
var/drill_sound = 'sound/weapons/Genhit.ogg'
var/drill_verb = "drilling"
@@ -69,7 +69,7 @@
icon_state = "spickaxe"
item_state = "spickaxe"
digspeed = 30
- origin_tech = "materials=3"
+ origin_tech = list(TECH_MATERIAL = 3)
desc = "This makes no metallurgic sense."
/obj/item/weapon/pickaxe/drill
@@ -77,7 +77,7 @@
icon_state = "handdrill"
item_state = "jackhammer"
digspeed = 30
- origin_tech = "materials=2;powerstorage=3;engineering=2"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
desc = "Yours is the drill that will pierce through the rock walls."
drill_verb = "drilling"
@@ -86,7 +86,7 @@
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 20 //faster than drill, but cannot dig
- origin_tech = "materials=3;powerstorage=2;engineering=2"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
drill_verb = "hammering"
@@ -95,7 +95,7 @@
icon_state = "gpickaxe"
item_state = "gpickaxe"
digspeed = 20
- origin_tech = "materials=4"
+ origin_tech = list(TECH_MATERIAL = 4)
desc = "This makes no metallurgic sense."
drill_verb = "picking"
@@ -106,7 +106,7 @@
w_class = 3.0 //it is smaller than the pickaxe
damtype = "fire"
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
- origin_tech = "materials=4;phorontech=3;engineering=3"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
drill_verb = "cutting"
drill_sound = 'sound/items/Welder.ogg'
@@ -118,7 +118,7 @@
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 10
- origin_tech = "materials=6;engineering=4"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINERING = 4)
desc = "A pickaxe with a diamond pick head."
drill_verb = "picking"
@@ -127,7 +127,7 @@
icon_state = "diamonddrill"
item_state = "jackhammer"
digspeed = 5 //Digs through walls, girders, and can dig up sand
- origin_tech = "materials=6;powerstorage=4;engineering=5"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 5)
desc = "Yours is the drill that will pierce the heavens!"
drill_verb = "drilling"
@@ -152,8 +152,8 @@
throwforce = 4.0
item_state = "shovel"
w_class = 3.0
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
matter = list(DEFAULT_WALL_MATERIAL = 50)
- origin_tech = "materials=1;engineering=1"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharp = 0
edge = 1
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index a46b263152..ef501c0325 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -9,49 +9,49 @@
/obj/item/weapon/ore/uranium
name = "pitchblende"
icon_state = "ore_uranium"
- origin_tech = "materials=5"
+ origin_tech = list(TECH_MATERIAL = 5)
material = "uranium"
/obj/item/weapon/ore/iron
name = "hematite"
icon_state = "ore_iron"
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
material = "hematite"
/obj/item/weapon/ore/coal
name = "raw carbon"
icon_state = "ore_coal"
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
material = "carbon"
/obj/item/weapon/ore/glass
name = "impure silicates"
icon_state = "ore_glass"
- origin_tech = "materials=1"
+ origin_tech = list(TECH_MATERIAL = 1)
material = "sand"
/obj/item/weapon/ore/phoron
name = "phoron crystals"
icon_state = "ore_phoron"
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
material = "phoron"
/obj/item/weapon/ore/silver
name = "native silver ore"
icon_state = "ore_silver"
- origin_tech = "materials=3"
+ origin_tech = list(TECH_MATERIAL = 3)
material = "silver"
/obj/item/weapon/ore/gold
name = "native gold ore"
icon_state = "ore_gold"
- origin_tech = "materials=4"
+ origin_tech = list(TECH_MATERIAL = 4)
material = "gold"
/obj/item/weapon/ore/diamond
name = "diamonds"
icon_state = "ore_diamond"
- origin_tech = "materials=6"
+ origin_tech = list(TECH_MATERIAL = 6)
material = "diamond"
/obj/item/weapon/ore/osmium
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index d931856df4..efa61cbfe3 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -55,14 +55,14 @@
name = "diona nymph"
desc = "It's a tiny plant critter."
icon_state = "nymph"
- origin_tech = "magnets=3;biotech=5"
+ origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5)
slot_flags = SLOT_HEAD | SLOT_OCLOTHING
/obj/item/weapon/holder/drone
name = "maintenance drone"
desc = "It's a small maintenance robot."
icon_state = "drone"
- origin_tech = "magnets=3;engineering=5"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 5)
/obj/item/weapon/holder/cat
name = "cat"
@@ -90,7 +90,7 @@
name = "cortical borer"
desc = "It's a slimy brain slug. Gross."
icon_state = "borer"
- origin_tech = "biotech=6"
+ origin_tech = list(TECH_BIO = 6)
/obj/item/weapon/holder/monkey
name = "monkey"
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index 5730474ab1..49e8c6ad52 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -23,7 +23,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "mmi_empty"
w_class = 3
- origin_tech = "biotech=3"
+ origin_tech = list(TECH_BIO = 3)
var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=1000,"glass"=500)
var/construction_time = 75
@@ -134,7 +134,7 @@
/obj/item/device/mmi/radio_enabled
name = "radio-enabled man-machine interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio."
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/obj/item/device/radio/radio = null//Let's give it a radio.
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index b12fce33f8..0cda53c182 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -11,7 +11,7 @@
throwforce = 1.0
throw_speed = 3
throw_range = 5
- origin_tech = "biotech=3"
+ origin_tech = list(TECH_BIO = 3)
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 8373ecd2f5..3c2d4422d1 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "posibrain"
w_class = 3
- origin_tech = "engineering=4;materials=4;bluespace=2;programming=4"
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
var/searching = 0
construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10)
construction_time = 75
diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm
index bc7a13c2c2..873b55d518 100644
--- a/code/modules/mob/living/carbon/brain/robot.dm
+++ b/code/modules/mob/living/carbon/brain/robot.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/module.dmi'
icon_state = "mainboard"
w_class = 3
- origin_tech = "engineering=4;materials=3;programming=4"
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
/obj/item/device/mmi/digital/robot/New()
..()
diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm
index 6739cb4e2b..d068e33e6c 100644
--- a/code/modules/mob/living/carbon/metroid/items.dm
+++ b/code/modules/mob/living/carbon/metroid/items.dm
@@ -8,7 +8,7 @@
throwforce = 0
throw_speed = 3
throw_range = 6
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/Uses = 1 // uses before it goes inert
var/enhanced = 0 //has it been enhanced before?
@@ -295,7 +295,7 @@
throwforce = 1.0
throw_speed = 2
throw_range = 6
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/POWERFLAG = 0 // sshhhhhhh
var/Flush = 30
var/Uses = 5 // uses before it goes inert
@@ -327,7 +327,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "slime egg-growing"
bitesize = 12
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/grown = 0
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/New()
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index 812a882efe..a4d6f621d3 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -12,8 +12,8 @@
w_class = 2.0
throw_speed = 5
throw_range = 10
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINERING = 2)
matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
- origin_tech = "magnets=2;biotech=1;engineering=2"
var/mode = 1;
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
index 59e251e01b..96514fa671 100644
--- a/code/modules/mob/living/silicon/robot/robot_items.dm
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -28,12 +28,11 @@
user << "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down."
flick("portable_analyzer_scan", src)
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
- if(loaded_item.reliability >= min_reliability)
- var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech)
- for(var/T in temp_tech)
- files.UpdateTech(T, temp_tech[T])
- user << "\The [loaded_item] had level [temp_tech[T]] in [T]."
- loaded_item = null
+ var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech)
+ for(var/T in temp_tech)
+ files.UpdateTech(T, temp_tech[T])
+ user << "\The [loaded_item] had level [temp_tech[T]] in [T]."
+ loaded_item = null
for(var/obj/I in contents)
for(var/mob/M in I.contents)
M.death()
@@ -57,8 +56,6 @@
if(response == "Sync")
var/success = 0
for(var/obj/machinery/r_n_d/server/S in machines)
- if(S.disabled)
- continue
for(var/datum/tech/T in files.known_tech) //Uploading
S.files.AddTech2Known(T)
for(var/datum/tech/T in S.files.known_tech) //Downloading
diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
index 2fa81f08c8..1b5a42b0a3 100644
--- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm
+++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
@@ -9,7 +9,7 @@
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
w_class = 1.0
slot_flags = SLOT_BELT
- origin_tech = "bluespace=4;materials=4"
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)
var/imprinted = "empty"
//////////////////////////////Capturing////////////////////////////////////////////////////////
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index 869bf93b8e..c8ab89d905 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -214,7 +214,7 @@
//spawn 1-4 boards of a random type
var/spawnees = 0
var/num_boards = rand(1,4)
- var/list/options = list(1,2,4,8,16,32,64,128,256, 512)
+ var/list/options = list(1,2,4,8,16,32,64,128,256,512)
for(var/i=0, iYour gun feels pleasantly warm for a moment."
- else
- M << "You feel a warm sensation."
- M.apply_effect(rand(3,120), IRRADIATE)
- lightfail = 1
- else
- for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
- if (src in M.contents)
- M << "Your gun's reactor overloads!"
- M << "You feel a wave of heat wash over you."
- M.apply_effect(300, IRRADIATE)
- crit_fail = 1 //break the gun so it stops recharging
- processing_objects.Remove(src)
- update_icon()
- return 0
-
-
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge()
- if (crit_fail)
- overlays += "nucgun-whee"
- return
var/ratio = power_supply.charge / power_supply.maxcharge
ratio = round(ratio, 0.25) * 100
overlays += "nucgun-[ratio]"
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor()
- if(crit_fail)
- overlays += "nucgun-crit"
- return
if(lightfail)
overlays += "nucgun-medium"
else if ((power_supply.charge/power_supply.maxcharge) <= 0.5)
@@ -97,10 +67,6 @@
if("stun") overlays += "nucgun-stun"
if("lethal") overlays += "nucgun-kill"
-/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity)
- ..()
- reliability -= round(15/severity)
-
/obj/item/weapon/gun/energy/gun/nuclear/update_icon()
overlays.Cut()
update_charge()
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index d9ef1b9504..e5eadb0ae3 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -4,7 +4,7 @@
icon_state = "ionrifle"
item_state = "ionrifle"
fire_sound = 'sound/weapons/Laser.ogg'
- origin_tech = "combat=2;magnets=4"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
w_class = 4
force = 10
flags = CONDUCT
@@ -28,9 +28,9 @@
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
icon_state = "decloner"
item_state = "decloner"
- fire_sound = 'sound/weapons/pulse3.ogg'
- origin_tech = "combat=5;materials=4;powerstorage=3"
- max_shots = 10
+ fire_sound = 'sound/weapons/pulse3.ogg'
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3)
+ max_shots = 10
projectile_type = /obj/item/projectile/energy/declone
/obj/item/weapon/gun/energy/floragun
@@ -42,7 +42,7 @@
charge_cost = 100
max_shots = 10
projectile_type = /obj/item/projectile/energy/floramut
- origin_tech = "materials=2;biotech=3;powerstorage=3"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
modifystate = "floramut"
self_recharge = 1
@@ -95,7 +95,7 @@
icon_state = "toxgun"
fire_sound = 'sound/effects/stealthoff.ogg'
w_class = 3.0
- origin_tech = "combat=5;phorontech=4"
+ origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
projectile_type = /obj/item/projectile/energy/phoron
/* Staves */
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index cc40169fb5..7c8e7cf3dc 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -23,8 +23,8 @@
desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger."
icon_state = "stunrevolver"
item_state = "stunrevolver"
- fire_sound = 'sound/weapons/Gunshot.ogg'
- origin_tech = "combat=3;materials=3;powerstorage=2"
+ fire_sound = 'sound/weapons/Gunshot.ogg'
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
projectile_type = /obj/item/projectile/energy/electrode/stunshot
max_shots = 8
@@ -35,8 +35,8 @@
icon_state = "crossbow"
w_class = 2.0
item_state = "crossbow"
- matter = list(DEFAULT_WALL_MATERIAL = 2000)
- origin_tech = "combat=2;magnets=2;syndicate=5"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
slot_flags = SLOT_BELT
silenced = 1
fire_sound = 'sound/weapons/Genhit.ogg'
diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm
index 47bc2cfc00..d4472e2488 100644
--- a/code/modules/projectiles/guns/energy/temperature.dm
+++ b/code/modules/projectiles/guns/energy/temperature.dm
@@ -6,7 +6,7 @@
var/temperature = T20C
var/current_temperature = T20C
charge_cost = 100
- origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
slot_flags = SLOT_BELT|SLOT_BACK
projectile_type = /obj/item/projectile/temp
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index fd86302fb8..9747922caf 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -9,7 +9,7 @@
force = 5.0
flags = CONDUCT | USEDELAY
slot_flags = 0
- origin_tech = "combat=8;materials=5"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5)
fire_sound = 'sound/effects/bang.ogg'
release_force = 15
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 576488e774..2f48fcaf13 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -6,7 +6,7 @@
name = "gun"
desc = "A gun that fires bullets."
icon_state = "revolver"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
w_class = 3
matter = list(DEFAULT_WALL_MATERIAL = 1000)
recoil = 1
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 2ad17537c2..bfbae584fa 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -6,7 +6,7 @@
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
max_shells = 22
caliber = "9mm"
- origin_tech = "combat=4;materials=2"
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
ammo_type = /obj/item/ammo_casing/c9mm
multi_aim = 1
@@ -25,7 +25,7 @@
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
max_shells = 15
caliber = ".45"
- origin_tech = "combat=5;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
ammo_type = /obj/item/ammo_casing/c45
/obj/item/weapon/gun/projectile/automatic/c20r
@@ -36,7 +36,7 @@
w_class = 3
force = 10
caliber = "12mm"
- origin_tech = "combat=5;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
slot_flags = SLOT_BELT|SLOT_BACK
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
load_method = MAGAZINE
@@ -60,7 +60,7 @@
w_class = 4
force = 10
caliber = "a762"
- origin_tech = "combat=6;materials=1;syndicate=4"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c762
@@ -83,7 +83,7 @@
item_state = "wt550"
w_class = 3
caliber = "9mm"
- origin_tech = "combat=5;materials=2"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
ammo_type = "/obj/item/ammo_casing/c9mmr"
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
@@ -109,7 +109,7 @@
w_class = 4
force = 10
caliber = "a556"
- origin_tech = "combat=8;materials=3"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
ammo_type = "/obj/item/ammo_casing/a556"
fire_sound = 'sound/weapons/Gunshot.ogg'
slot_flags = SLOT_BACK
@@ -179,7 +179,7 @@
slot_flags = 0
max_shells = 50
caliber = "a762"
- origin_tech = "combat=6;materials=1;syndicate=2"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
ammo_type = "/obj/item/ammo_casing/a762"
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index db193a0f75..e484d95d70 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -34,7 +34,7 @@
desc = "A rack of hollow darts."
icon_state = "darts"
item_state = "rcdammo"
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
mag_type = MAGAZINE
caliber = "dart"
ammo_type = /obj/item/ammo_casing/chemdart
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 2c116901ec..e121cbe8fe 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -4,7 +4,7 @@
magazine_type = /obj/item/ammo_magazine/c45m
icon_state = "colt"
caliber = ".45"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/detective
@@ -35,7 +35,7 @@
icon_state = "secguncomp"
magazine_type = /obj/item/ammo_magazine/c45m/rubber
caliber = ".45"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/sec/flash
@@ -54,7 +54,7 @@
w_class = 3
caliber = ".45"
silenced = 1
- origin_tech = "combat=2;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c45m
@@ -89,7 +89,7 @@
max_shells = 8
caliber = "75"
fire_sound = 'sound/effects/Explosion1.ogg'
- origin_tech = "combat=3"
+ origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a75
@@ -111,7 +111,7 @@
w_class = 2
caliber = "9mm"
silenced = 0
- origin_tech = "combat=2;materials=2;syndicate=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mm
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index cb17710773..c036c985f7 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -4,7 +4,7 @@
icon_state = "revolver"
item_state = "revolver"
caliber = "357"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 7
ammo_type = /obj/item/ammo_casing/a357
@@ -13,7 +13,7 @@
name = "mateba"
desc = "When you absolutely, positively need a 10mm hole in the other guy. Uses .357 ammo." //>10mm hole >.357
icon_state = "mateba"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
/obj/item/weapon/gun/projectile/revolver/detective
name = "revolver"
@@ -21,7 +21,7 @@
icon_state = "detective"
max_shells = 6
caliber = "38"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/c38
/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun()
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 1b3bb21451..21b074db7d 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -9,7 +9,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
- origin_tech = "combat=4;materials=2"
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
handle_casings = HOLD_CASINGS
@@ -43,7 +43,7 @@
name = "combat shotgun"
icon_state = "cshotgun"
item_state = "cshotgun"
- origin_tech = "combat=5;materials=2"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8.
ammo_type = /obj/item/ammo_casing/shotgun
@@ -63,7 +63,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
- origin_tech = "combat=3;materials=1"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
burst_delay = 0
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index 6c14edfaa5..b3a3c7580c 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -6,7 +6,7 @@
w_class = 4
force = 10
slot_flags = SLOT_BACK
- origin_tech = "combat=8;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "14.5mm"
recoil = 2 //extra kickback
//fire_sound = 'sound/weapons/sniper.ogg'
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index c041f529ee..79247f8252 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -156,7 +156,7 @@
w_class = 3.0
possible_transfer_amounts = null
volume = 600
- origin_tech = "combat=3;materials=3;engineering=3"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
var/direction = get_dir(src, A)
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index d0cfe226f6..57812535b6 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -1,20 +1,21 @@
/*///////////////Circuit Imprinter (By Darem)////////////////////////
Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
-using metal and glass, it uses glass and reagents (usually sulfuric acis).
-
+using metal and glass, it uses glass and reagents (usually sulphuric acid).
*/
+
/obj/machinery/r_n_d/circuit_imprinter
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
flags = OPENCONTAINER
- var/g_amount = 0
- var/gold_amount = 0
- var/diamond_amount = 0
- var/uranium_amount = 0
- var/max_material_amount = 75000.0
+ var/list/materials = list("metal" = 0, "glass" = 0, "gold" = 0, "silver" = 0, "phoron" = 0, "uranium" = 0, "diamond" = 0)
+ var/list/datum/design/queue = list()
+ var/progress = 0
+
+ var/max_material_storage = 75000
var/mat_efficiency = 1
+ var/speed = 1
use_power = 1
idle_power_usage = 30
@@ -30,25 +31,51 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
RefreshParts()
+/obj/machinery/r_n_d/circuit_imprinter/process()
+ ..()
+ if(stat)
+ update_icon()
+ return
+ if(queue.len == 0)
+ busy = 0
+ update_icon()
+ return
+ var/datum/design/D = queue[1]
+ if(canBuild(D))
+ busy = 1
+ progress += speed
+ if(progress >= D.time)
+ build(D)
+ progress = 0
+ removeFromQueue(1)
+ if(linked_console)
+ linked_console.updateUsrDialog()
+ update_icon()
+ else
+ if(busy)
+ visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].")
+ busy = 0
+ update_icon()
+
/obj/machinery/r_n_d/circuit_imprinter/RefreshParts()
var/T = 0
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
T += G.reagents.maximum_volume
- var/datum/reagents/R = new/datum/reagents(T) //Holder for the reagents used as materials.
- reagents = R
- R.my_atom = src
- T = 0
+ create_reagents(T)
+ max_material_storage = 0
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
- T += M.rating
- max_material_amount = T * 75000.0
+ max_material_storage += M.rating * 75000
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
mat_efficiency = 1 - (T - 1) / 4
+ speed = T
/obj/machinery/r_n_d/circuit_imprinter/update_icon()
if(panel_open)
icon_state = "circuit_imprinter_t"
+ else if(busy)
+ icon_state = "circuit_imprinter_ani"
else
icon_state = "circuit_imprinter"
@@ -61,29 +88,27 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
return
/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials()
- return g_amount + gold_amount + diamond_amount + uranium_amount
+ var/t = 0
+ for(var/f in materials)
+ t += materials[f]
+ return t
/obj/machinery/r_n_d/circuit_imprinter/dismantle()
for(var/obj/I in component_parts)
- if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to_obj(I, reagents.total_volume)
- if(g_amount >= 3750)
- var/obj/item/stack/material/glass/G = new /obj/item/stack/material/glass(loc)
- G.amount = round(g_amount / 3750)
- if(gold_amount >= 2000)
- var/obj/item/stack/material/gold/G = new /obj/item/stack/material/gold(loc)
- G.amount = round(gold_amount / 2000)
- if(diamond_amount >= 2000)
- var/obj/item/stack/material/diamond/G = new /obj/item/stack/material/diamond(loc)
- G.amount = round(diamond_amount / 2000)
- if(uranium_amount >= 2000)
- var/obj/item/stack/material/uranium/G = new /obj/item/stack/material/uranium(loc)
- G.amount = round(uranium_amount / 2000)
+ if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
+ reagents.trans_to_obj(I, reagents.total_volume)
+ for(var/f in materials)
+ if(materials[f] >= SHEET_MATERIAL_AMOUNT)
+ var/path = getMaterialType(f)
+ if(path)
+ var/obj/item/stack/S = new f(loc)
+ S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
..()
/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy. Please wait for completion of previous operation."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_imprinter = null
@@ -96,60 +121,91 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- user << "\The [src] appears to not be working!"
- return
if(!linked_console)
- user << "\The [src] must be linked to an R&D console first!"
+ user << "\The [src] must be linked to an R&D console first."
return 1
- if(O.is_open_container())
- return 0
-// if(!istype(O, /obj/item/stack/material/glass) && !istype(O, /obj/item/stack/material/gold) && !istype(O, /obj/item/stack/material/diamond) && !istype(O, /obj/item/stack/material/uranium))
-// user << "You cannot insert this item into \the [src]!"
-// return 1
+ if(O.is_open_container())
+ return 0
+ if(!istype(O, /obj/item/stack/material/glass) && !istype(O, /obj/item/stack/material/gold) && !istype(O, /obj/item/stack/material/diamond) && !istype(O, /obj/item/stack/material/uranium))
+ user << "You cannot insert this item into \the [src]."
+ return 1
if(stat)
return 1
- if(busy)
- user << "\The [src] is busy. Please wait for completion of previous operation."
- return 1
- if(istype(O, /obj/item/stack/material/glass) || istype(O, /obj/item/stack/material/gold) || istype(O, /obj/item/stack/material/diamond) || istype(O, /obj/item/stack/material/uranium))
+ if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
+ user << "\The [src]'s material bin is full. Please remove material before adding more."
+ return 1
- var/obj/item/stack/material/stack = O
- if((TotalMaterials() + stack.perunit) > max_material_amount)
- user << "\The [src] is full. Please remove glass from \the [src] in order to insert more."
- return 1
+ var/obj/item/stack/stack = O
- var/amount = round(input("How many sheets do you want to add?") as num)
- if(amount < 0)
- amount = 0
- if(amount == 0)
- return
- if(amount > stack.amount)
- amount = min(stack.amount, round((max_material_amount - TotalMaterials()) / stack.perunit))
+ var/amount = round(input("How many sheets do you want to add?") as num)
+ if(!O)
+ return
+ if(amount <= 0)//No negative numbers
+ return
+ if(amount > stack.get_amount())
+ amount = stack.get_amount()
+ if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill
+ amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
- busy = 1
- use_power(max(1000, (3750 * amount / 10)))
- var/stacktype = stack.type
- stack.use(amount)
- if(do_after(usr, 16))
- user << "You add [amount] sheets to \the [src]."
- switch(stacktype)
- if(/obj/item/stack/material/glass)
- g_amount += amount * 3750
- if(/obj/item/stack/material/gold)
- gold_amount += amount * 2000
- if(/obj/item/stack/material/diamond)
- diamond_amount += amount * 2000
- if(/obj/item/stack/material/uranium)
- uranium_amount += amount * 2000
- else
- new stacktype(loc, amount)
- busy = 0
- updateUsrDialog()
+ busy = 1
+ use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
+ var/stacktype = stack.type
+ var/t = getMaterialName(stacktype)
+ if(t)
+ if(do_after(usr, 16))
+ if(stack.use(amount))
+ user << "You add [amount] sheets to \the [src]."
+ materials[t] += amount * SHEET_MATERIAL_AMOUNT
+ busy = 0
+ updateUsrDialog()
- ..()
+/obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D)
+ queue += D
+ return
-//This is to stop these machines being hackable via clicking.
-/obj/machinery/r_n_d/circuit_imprinter/attack_hand(mob/user as mob)
- return
\ No newline at end of file
+/obj/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(var/index)
+ queue.Cut(index, index + 1)
+ return
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D)
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ return 0
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ return 0
+ return 1
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/getLackingMaterials(var/datum/design/D)
+ var/ret = ""
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ if(ret != "")
+ ret += ", "
+ ret += "[D.materials[M] - materials[M]] [M]"
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ if(ret != "")
+ ret += ", "
+ ret += C
+ return ret
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/build(var/datum/design/D)
+ var/power = active_power_usage
+ for(var/M in D.materials)
+ power += round(D.materials[M] / 5)
+ power = max(active_power_usage, power)
+ use_power(power)
+ for(var/M in D.materials)
+ materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
+ for(var/C in D.chemicals)
+ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency)
+
+ if(D.build_path)
+ var/obj/new_item = new D.build_path(src)
+ new_item.loc = loc
+ if(mat_efficiency != 1) // No matter out of nowhere
+ if(new_item.matter && new_item.matter.len > 0)
+ for(var/i in new_item.matter)
+ new_item.matter[i] = new_item.matter[i] * mat_efficiency
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 9d0d547f94..7237ea2941 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
/***************************************************************
** Design Datums **
** All the data for building stuff and tracking reliability. **
@@ -7,1585 +5,1645 @@
/*
For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent,
you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum),
-they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents.
+they are simply references used as part of a "has materials?" type proc. They all start with a to denote that they aren't reagents.
The currently supporting non-reagent materials:
-- $metal (/obj/item/stack/metal). One sheet = 3750 units.
-- $glass (/obj/item/stack/glass). One sheet = 3750 units.
-- $phoron (/obj/item/stack/phoron). One sheet = 3750 units.
-- $silver (/obj/item/stack/silver). One sheet = 3750 units.
-- $gold (/obj/item/stack/gold). One sheet = 3750 units.
-- $uranium (/obj/item/stack/uranium). One sheet = 3750 units.
-- $diamond (/obj/item/stack/diamond). One sheet = 3750 units.
-(Insert new ones here)
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
Design Guidlines
-- The reliability formula for all R&D built items is reliability_base (a fixed number) + total tech levels required to make it +
-reliability_mod (starts at 0, gets improved through experimentation). Example: PACMAN generator. 79 base reliablity + 6 tech
-(3 phorontech, 3 powerstorage) + 0 (since it's completely new) = 85% reliability. Reliability is the chance it works CORRECTLY.
- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed.
-- A single sheet of anything is 3750 units of material. Materials besides metal/glass require help from other jobs (mining for
+- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for
other types of metals and chemistry for reagents).
-- Add the AUTOLATHE tag to
-
*/
-#define IMPRINTER 1 //For circuits. Uses glass/chemicals.
-#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals
-#define AUTOLATHE 4 //Uses glass/metal only.
-#define CRAFTLATHE 8 //Uses fuck if I know. For use eventually.
-#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
-//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
+//Note: More then one of these can be added to a design.
-datum/design //Datum for object designs, used in construction
+/datum/design //Datum for object designs, used in construction
var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible.
var/desc = null //Description of the created object. If null it will use group_desc and name where applicable.
var/item_name = null //An item name before it is modified by various name-modifying procs
var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols.
var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements.
- var/reliability_mod = 0 //Reliability modifier of the device at it's starting point.
- var/reliability_base = 100 //Base reliability of a device before modifiers.
- var/reliability = 100 //Reliability of the device.
var/build_type = null //Flag as to what kind machine the design is built in. See defines.
var/list/materials = list() //List of materials. Format: "id" = amount.
+ var/list/chemicals = list() //List of chemicals.
var/build_path = null //The path of the object that gets created.
- var/locked = 0 //If true it will spawn inside a lockbox with currently sec access.
+ var/time = 10 //How many ticks it requires to build
var/category = null //Primarily used for Mech Fabricators, but can be used for anything.
+ var/sort_string = "ZZZZZ" //Sorting order
-//A proc to calculate the reliability of a design based on tech levels and innate modifiers.
-//Input: A list of /datum/tech; Output: The new reliabilty.
-datum/design/proc/CalcReliability(var/list/temp_techs)
- var/new_reliability = reliability_mod + reliability_base
- for(var/datum/tech/T in temp_techs)
- if(T.id in req_tech)
- new_reliability += T.level
- new_reliability = between(reliability_base, new_reliability, 100)
- reliability = new_reliability
- return
-
-datum/design/New()
+/datum/design/New()
..()
item_name = name
AssembleDesignInfo()
//These procs are used in subtypes for assigning names and descriptions dynamically
-datum/design/proc/AssembleDesignInfo()
+/datum/design/proc/AssembleDesignInfo()
AssembleDesignName()
AssembleDesignDesc()
return
-datum/design/proc/AssembleDesignName()
+/datum/design/proc/AssembleDesignName()
if(!name && build_path) //Get name from build path if posible
var/atom/movable/A = build_path
name = initial(A.name)
item_name = name
return
-datum/design/proc/AssembleDesignDesc()
+/datum/design/proc/AssembleDesignDesc()
if(!desc) //Try to make up a nice description if we don't have one
desc = "Allows for the construction of \a [item_name]."
return
-///////////////////////////////////
-/////General Type Definitions//////
-///////////////////////////////////
-datum/design/circuit
- build_type = IMPRINTER
- req_tech = list("programming" = 2)
- materials = list("$glass" = 2000, "sacid" = 20)
-
-datum/design/circuit/AssembleDesignName()
- ..()
- name = "Circuit design ([item_name])"
-
-datum/design/circuit/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [item_name] circuit board."
-
-datum/design/item
+/datum/design/item
build_type = PROTOLATHE
-///////////////////////////////////
-//////////Computer Boards//////////
-///////////////////////////////////
-datum/design/circuit/seccamera
- name = "security camera monitor"
- id = "seccamera"
- build_path = /obj/item/weapon/circuitboard/security
-
-datum/design/circuit/aicore
- name = "AI core"
- id = "aicore"
- req_tech = list("programming" = 4, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/aicore
-
-datum/design/circuit/aiupload
- name = "AI upload console"
- id = "aiupload"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/aiupload
-
-datum/design/circuit/borgupload
- name = "cyborg upload console"
- id = "borgupload"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/borgupload
-
-datum/design/circuit/operating
- name = "patient monitoring console"
- id = "operating"
- build_path = /obj/item/weapon/circuitboard/operating
-
-datum/design/circuit/pandemic
- name = "PanD.E.M.I.C. 2200"
- id = "pandemic"
- build_path = /obj/item/weapon/circuitboard/pandemic
-
-datum/design/circuit/scan_console
- name = "DNA machine"
- id = "scan_console"
- build_path = /obj/item/weapon/circuitboard/scan_consolenew
-
-datum/design/circuit/comconsole
- name = "communications console"
- id = "comconsole"
- build_path = /obj/item/weapon/circuitboard/communications
-
-datum/design/circuit/idcardconsole
- name = "ID card modification console"
- id = "idcardconsole"
- build_path = /obj/item/weapon/circuitboard/card
-
-datum/design/circuit/crewconsole
- name = "crew monitoring console"
- id = "crewconsole"
- req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/crew
-
-datum/design/circuit/teleconsole
- name = "teleporter control console"
- id = "teleconsole"
- req_tech = list("programming" = 3, "bluespace" = 2)
-
-datum/design/circuit/emp_data
- name = "employment records console"
- id = "emp_data"
- build_path = /obj/item/weapon/circuitboard/skills
-
-datum/design/circuit/med_data
- name = "medical records console"
- id = "med_data"
- build_path = /obj/item/weapon/circuitboard/med_data
-
-datum/design/circuit/secdata
- name = "security records console"
- id = "sec_data"
- build_path = /obj/item/weapon/circuitboard/secure_data
-
-datum/design/circuit/atmosalerts
- name = "atmosphere alert console"
- id = "atmosalerts"
- build_path = /obj/item/weapon/circuitboard/atmos_alert
-
-datum/design/circuit/air_management
- name = "atmosphere monitoring console"
- id = "air_management"
- build_path = /obj/item/weapon/circuitboard/air_management
-
-datum/design/circuit/rcon_console
- name = "RCON remote control console"
- id = "rcon_console"
- req_tech = list("programming" = 4, "engineering" = 3, "powerstorage" = 5)
- build_path = /obj/item/weapon/circuitboard/rcon_console
-
-/* Uncomment if someone makes these buildable
-datum/design/circuit/general_alert
- name = "general alert console"
- id = "general_alert"
- build_path = /obj/item/weapon/circuitboard/general_alert
-*/
-
-datum/design/circuit/robocontrol
- name = "robotics control console"
- id = "robocontrol"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/robotics
-
-datum/design/circuit/dronecontrol
- name = "drone control console"
- id = "dronecontrol"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/drone_control
-
-datum/design/circuit/clonecontrol
- name = "cloning control console"
- id = "clonecontrol"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/cloning
-
-datum/design/circuit/clonepod
- name = "clone pod"
- id = "clonepod"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/clonepod
-
-datum/design/circuit/clonescanner
- name = "cloning scanner"
- id = "clonescanner"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/clonescanner
-
-datum/design/circuit/arcademachine
- name = "arcade machine"
- id = "arcademachine"
- req_tech = list("programming" = 1)
- build_path = /obj/item/weapon/circuitboard/arcade
-
-datum/design/circuit/powermonitor
- name = "power monitoring console"
- id = "powermonitor"
- build_path = /obj/item/weapon/circuitboard/powermonitor
-
-datum/design/circuit/solarcontrol
- name = "solar control console"
- id = "solarcontrol"
- build_path = /obj/item/weapon/circuitboard/solar_control
-
-datum/design/circuit/prisonmanage
- name = "prisoner management console"
- id = "prisonmanage"
- build_path = /obj/item/weapon/circuitboard/prisoner
-
-datum/design/circuit/mechacontrol
- name = "exosuit control console"
- id = "mechacontrol"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/mecha_control
-
-datum/design/circuit/mechapower
- name = "mech bay power control console"
- id = "mechapower"
- build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
-
-datum/design/circuit/rdconsole
- name = "R&D control console"
- id = "rdconsole"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/rdconsole
-
-datum/design/circuit/ordercomp
- name = "supply ordering console"
- id = "ordercomp"
- build_path = /obj/item/weapon/circuitboard/ordercomp
-
-datum/design/circuit/supplycomp
- name = "supply control console"
- id = "supplycomp"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/supplycomp
-
-datum/design/circuit/comm_monitor
- name = "telecommunications monitoring console"
- id = "comm_monitor"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/comm_monitor
-
-datum/design/circuit/comm_server
- name = "telecommunications server monitoring console"
- id = "comm_server"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/comm_server
-
-datum/design/circuit/message_monitor
- name = "messaging monitor console"
- id = "message_monitor"
- req_tech = list("programming" = 5)
- build_path = /obj/item/weapon/circuitboard/message_monitor
-
-datum/design/circuit/aifixer
- name = "AI integrity restorer"
- id = "aifixer"
- req_tech = list("programming" = 3, "biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/aifixer
-
-///////////////////////////////////
-/////////Shield Generators/////////
-///////////////////////////////////
-datum/design/circuit/shield
- req_tech = list("bluespace" = 4, "phorontech" = 3)
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
-
-datum/design/circuit/shield/AssembleDesignName()
- name = "Shield generator circuit design ([name])"
-datum/design/circuit/shield/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [name] shield generator."
-
-datum/design/circuit/shield/bubble
- name = "bubble"
- id = "shield_gen"
- build_path = /obj/item/weapon/circuitboard/shield_gen
-
-datum/design/circuit/shield/hull
- name = "hull"
- id = "shield_gen_ex"
- build_path = /obj/item/weapon/circuitboard/shield_gen_ex
-
-datum/design/circuit/shield/capacitor
- name = "capacitor"
- desc = "Allows for the construction of a shield capacitor circuit board."
- id = "shield_cap"
- req_tech = list("magnets" = 3, "powerstorage" = 4)
- build_path = /obj/item/weapon/circuitboard/shield_cap
-
-///////////////////////////////////
-//////////AI Module Disks//////////
-///////////////////////////////////
-datum/design/aimodule/
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
-
-datum/design/aimodule/AssembleDesignName()
- name = "AI module design ([name])"
-datum/design/aimodule/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI module."
-
-datum/design/aimodule/safeguard
- name = "Safeguard"
- id = "safeguard"
- req_tech = list("programming" = 3, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/safeguard
-
-datum/design/aimodule/onehuman
- name = "OneCrewMember"
- id = "onehuman"
- req_tech = list("programming" = 4, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/oneHuman
-
-datum/design/aimodule/protectstation
- name = "ProtectStation"
- id = "protectstation"
- req_tech = list("programming" = 3, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/protectStation
-
-datum/design/aimodule/notele
- name = "TeleporterOffline"
- id = "notele"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/aiModule/teleporterOffline
-
-datum/design/aimodule/quarantine
- name = "Quarantine"
- id = "quarantine"
- req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/quarantine
-
-datum/design/aimodule/oxygen
- name = "OxygenIsToxicToHumans"
- id = "oxygen"
- req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/oxygen
-
-datum/design/aimodule/freeform
- name = "Freeform"
- id = "freeform"
- req_tech = list("programming" = 4, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/freeform
-
-datum/design/aimodule/reset
- name = "Reset"
- id = "reset"
- req_tech = list("programming" = 3, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/reset
-
-datum/design/aimodule/purge
- name = "Purge"
- id = "purge"
- req_tech = list("programming" = 4, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/purge
-
-// *** Core modules
-datum/design/aimodule/core
- req_tech = list("programming" = 4, "materials" = 6)
-
-datum/design/aimodule/core/AssembleDesignName()
- name = "AI core module design ([name])"
-datum/design/aimodule/core/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI core module."
-
-datum/design/aimodule/core/freeformcore
- name = "Freeform"
- id = "freeformcore"
- build_path = /obj/item/weapon/aiModule/freeformcore
-
-datum/design/aimodule/core/asimov
- name = "Asimov"
- id = "asimov"
- build_path = /obj/item/weapon/aiModule/asimov
-
-datum/design/aimodule/core/paladin
- name = "P.A.L.A.D.I.N."
- id = "paladin"
- build_path = /obj/item/weapon/aiModule/paladin
-
-datum/design/aimodule/core/tyrant
- name = "T.Y.R.A.N.T."
- id = "tyrant"
- req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/tyrant
-
-///////////////////////////////////
-////////Telecomms Machinery////////
-///////////////////////////////////
-datum/design/circuit/tcom
- req_tech = list("programming" = 4, "engineering" = 4)
-
-datum/design/circuit/tcom/AssembleDesignName()
- name = "Telecommunications machinery circuit design ([name])"
-datum/design/circuit/tcom/AssembleDesignDesc()
- desc = "Allows for the construction of a telecommunications [name] circuit board."
-
-
-datum/design/circuit/tcom/server
- name = "server mainframe"
- id = "tcom-server"
- build_path = /obj/item/weapon/circuitboard/telecomms/server
-
-datum/design/circuit/tcom/processor
- name = "processor unit"
- id = "tcom-processor"
- build_path = /obj/item/weapon/circuitboard/telecomms/processor
-
-datum/design/circuit/tcom/bus
- name = "bus mainframe"
- id = "tcom-bus"
- build_path = /obj/item/weapon/circuitboard/telecomms/bus
-
-datum/design/circuit/tcom/hub
- name = "hub mainframe"
- id = "tcom-hub"
- build_path = /obj/item/weapon/circuitboard/telecomms/hub
-
-datum/design/circuit/tcom/relay
- name = "relay mainframe"
- id = "tcom-relay"
- req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3)
- build_path = /obj/item/weapon/circuitboard/telecomms/relay
-
-datum/design/circuit/tcom/broadcaster
- name = "subspace broadcaster"
- id = "tcom-broadcaster"
- req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
-
-datum/design/circuit/tcom/receiver
- name = "subspace receiver"
- id = "tcom-receiver"
- req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/receiver
-
-datum/design/circuit/tcom/bluespacerelay
- name = "emergency bluespace relay"
- id = "bluespace-relay"
- req_tech = list("programming" = 4, "bluespace" = 4)
- build_path = /obj/item/weapon/circuitboard/bluespacerelay
-
-///////////////////////////////////
-////////////Mecha Modules//////////
-///////////////////////////////////
-datum/design/circuit/mecha
- req_tech = list("programming" = 3)
-
-datum/design/circuit/mecha/AssembleDesignName()
- name = "Exosuit module circuit design ([name])"
-datum/design/circuit/mecha/AssembleDesignDesc()
- desc = "Allows for the construction of \a [name] module."
-
-
-datum/design/circuit/mecha/ripley_main
- name = "APLU 'Ripley' central control"
- id = "ripley_main"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
-
-datum/design/circuit/mecha/ripley_peri
- name = "APLU 'Ripley' peripherals control"
- id = "ripley_peri"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
-
-datum/design/circuit/mecha/odysseus_main
- name = "'Odysseus' central control"
- id = "odysseus_main"
- req_tech = list("programming" = 3,"biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
-
-datum/design/circuit/mecha/odysseus_peri
- name = "'Odysseus' peripherals control"
- id = "odysseus_peri"
- req_tech = list("programming" = 3,"biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
-
-datum/design/circuit/mecha/gygax_main
- name = "'Gygax' central control"
- id = "gygax_main"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
-
-datum/design/circuit/mecha/gygax_peri
- name = "'Gygax' peripherals control"
- id = "gygax_peri"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
-
-datum/design/circuit/mecha/gygax_targ
- name = "'Gygax' weapon control and targeting"
- id = "gygax_targ"
- req_tech = list("programming" = 4, "combat" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
-
-datum/design/circuit/mecha/durand_main
- name = "'Durand' central control"
- id = "durand_main"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/main
-
-datum/design/circuit/mecha/durand_peri
- name = "'Durand' peripherals control"
- id = "durand_peri"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
-
-datum/design/circuit/mecha/durand_targ
- name = "'Durand' weapon control and targeting"
- id = "durand_targ"
- req_tech = list("programming" = 4, "combat" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
-
-datum/design/circuit/mecha/honker_main
- name = "'H.O.N.K' central control"
- id = "honker_main"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/main
-
-datum/design/circuit/mecha/honker_peri
- name = "'H.O.N.K' peripherals control"
- id = "honker_peri"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals
-
-datum/design/circuit/mecha/honker_targ
- name = "'H.O.N.K' weapon control and targeting"
- id = "honker_targ"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
-
-////////////////////////////////////////
-/////////// Mecha Equpment /////////////
-////////////////////////////////////////
-
-datum/design/item/mecha
- build_type = MECHFAB
- req_tech = list("combat" = 3)
- category = "Exosuit Equipment"
-
-datum/design/item/mecha/AssembleDesignName()
- ..()
- name = "Exosuit module design ([item_name])"
-datum/design/item/mecha/weapon/AssembleDesignName()
- ..()
- name = "Exosuit weapon design ([item_name])"
-datum/design/item/mecha/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a '[item_name]' exosuit module."
-
-// *** Weapon modules
-datum/design/item/mecha/weapon/scattershot
- id = "mech_scattershot"
- req_tech = list("combat" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
-
-datum/design/item/mecha/weapon/laser
- id = "mech_laser"
- req_tech = list("combat" = 3, "magnets" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
-
-datum/design/item/mecha/weapon/laser_rigged
- desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits."
- id = "mech_laser_rigged"
- req_tech = list("combat" = 2, "magnets" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
-
-datum/design/item/mecha/weapon/laser_heavy
- id = "mech_laser_heavy"
- req_tech = list("combat" = 4, "magnets" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
-
-datum/design/item/mecha/weapon/ion
- id = "mech_ion"
- req_tech = list("combat" = 4, "magnets" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
-
-datum/design/item/mecha/weapon/grenade_launcher
- id = "mech_grenade_launcher"
- req_tech = list("combat" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
-
-datum/design/item/mecha/weapon/clusterbang_launcher
- desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
- id = "clusterbang_launcher"
- req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
-
-// *** Nonweapon modules
-datum/design/item/mecha/wormhole_gen
- desc = "An exosuit module that can generate small quasi-stable wormholes."
- id = "mech_wormhole_gen"
- req_tech = list("bluespace" = 3, "magnets" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
-
-datum/design/item/mecha/teleporter
- desc = "An exosuit module that allows teleportation to any position in view."
- id = "mech_teleporter"
- req_tech = list("bluespace" = 10, "magnets" = 5)
- build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
-
-datum/design/item/mecha/rcd
- desc = "An exosuit-mounted rapid construction device."
- id = "mech_rcd"
- req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
-
-datum/design/item/mecha/gravcatapult
- desc = "An exosuit-mounted gravitational catapult."
- id = "mech_gravcatapult"
- req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
-
-datum/design/item/mecha/repair_droid
- desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
- id = "mech_repair_droid"
- req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
-
-datum/design/item/mecha/phoron_generator
- desc = "Exosuit-mounted phoron generator."
- id = "mech_phoron_generator"
- req_tech = list("phorontech" = 2, "powerstorage"= 2, "engineering" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/generator
-
-datum/design/item/mecha/energy_relay
- id = "mech_energy_relay"
- req_tech = list("magnets" = 4, "powerstorage" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
-
-datum/design/item/mecha/ccw_armor
- desc = "Exosuit close-combat armor booster."
- id = "mech_ccw_armor"
- req_tech = list("materials" = 5, "combat" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
-
-datum/design/item/mecha/proj_armor
- desc = "Exosuit projectile armor booster."
- id = "mech_proj_armor"
- req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
- build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
-
-datum/design/item/mecha/syringe_gun
- desc = "Exosuit-mounted syringe gun and chemical synthesizer."
- id = "mech_syringe_gun"
- req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
-
-datum/design/item/mecha/diamond_drill
- desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
- id = "mech_diamond_drill"
- req_tech = list("materials" = 4, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
-
-datum/design/item/mecha/generator_nuclear
- desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
- id = "mech_generator_nuclear"
- req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
-
-
-////////////////////////////////////////
-//////////Disk Construction Disks///////
-////////////////////////////////////////
-datum/design/design_disk
+/datum/design/item/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
- req_tech = list("programming" = 1)
- build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ req_tech = list(TECH_DATA = 1)
+ materials = list("metal" = 30, "glass" = 10)
build_path = /obj/item/weapon/disk/design_disk
+ sort_string = "GAAAA"
-datum/design/tech_disk
+/datum/design/item/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
- req_tech = list("programming" = 1)
- build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ req_tech = list(TECH_DATA = 1)
+ materials = list("metal" = 30, "glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
+ sort_string = "GAAAB"
-///////////////////////////////////
-/////Non-Board Computer Stuff//////
-///////////////////////////////////
-
-datum/design/item/intellicard
- name = "'intelliCard', AI preservation and transportation system"
- desc = "Allows for the construction of an intelliCard."
- id = "intellicard"
- req_tech = list("programming" = 4, "materials" = 4)
- materials = list("$glass" = 1000, "$gold" = 200)
- build_path = /obj/item/device/aicard
-
-datum/design/item/paicard
- name = "'pAI', personal artificial intelligence device"
- id = "paicard"
- req_tech = list("programming" = 2)
- materials = list("$glass" = 500, "$metal" = 500)
- build_path = /obj/item/device/paicard
-
-datum/design/item/posibrain
- id = "posibrain"
- req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4)
- materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$phoron" = 500, "$diamond" = 100)
- build_path = /obj/item/device/mmi/digital/posibrain
-
-////////////////////////////////////////
-/////////////Stock Parts////////////////
-////////////////////////////////////////
-datum/design/item/stock_part
+/datum/design/item/stock_part
build_type = PROTOLATHE
-datum/design/item/stock_part/AssembleDesignName()
+/datum/design/item/stock_part/AssembleDesignName()
..()
name = "Component design ([item_name])"
-datum/design/item/stock_part/AssembleDesignDesc()
+/datum/design/item/stock_part/AssembleDesignDesc()
if(!desc)
desc = "A stock part used in the construction of various devices."
+/datum/design/item/stock_part/basic_capacitor
+ id = "basic_capacitor"
+ req_tech = list(TECH_POWER = 1)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor
+ sort_string = "CAAAA"
+
+/datum/design/item/stock_part/adv_capacitor
+ id = "adv_capacitor"
+ req_tech = list(TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor/adv
+ sort_string = "CAAAB"
+
+/datum/design/item/stock_part/super_capacitor
+ id = "super_capacitor"
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list("metal" = 50, "glass" = 50, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/capacitor/super
+ sort_string = "CAAAC"
+
+/datum/design/item/stock_part/micro_mani
+ id = "micro_mani"
+ req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator
+ sort_string = "CAABA"
+
+/datum/design/item/stock_part/nano_mani
+ id = "nano_mani"
+ req_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/nano
+ sort_string = "CAABB"
+
+/datum/design/item/stock_part/pico_mani
+ id = "pico_mani"
+ req_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/pico
+ sort_string = "CAABC"
+
+/datum/design/item/stock_part/basic_matter_bin
+ id = "basic_matter_bin"
+ req_tech = list(TECH_MATERIAL = 1)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin
+ sort_string = "CAACA"
+
+/datum/design/item/stock_part/adv_matter_bin
+ id = "adv_matter_bin"
+ req_tech = list(TECH_MATERIAL = 3)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/adv
+ sort_string = "CAACB"
+
+/datum/design/item/stock_part/super_matter_bin
+ id = "super_matter_bin"
+ req_tech = list(TECH_MATERIAL = 5)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/super
+ sort_string = "CAACC"
+
+/datum/design/item/stock_part/basic_micro_laser
+ id = "basic_micro_laser"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list("metal" = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser
+ sort_string = "CAADA"
+
+/datum/design/item/stock_part/high_micro_laser
+ id = "high_micro_laser"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list("metal" = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/high
+ sort_string = "CAADB"
+
+/datum/design/item/stock_part/ultra_micro_laser
+ id = "ultra_micro_laser"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5)
+ materials = list("metal" = 10, "glass" = 20, "uranium" = 10)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
+ sort_string = "CAADC"
+
+/datum/design/item/stock_part/basic_sensor
+ id = "basic_sensor"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list("metal" = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module
+ sort_string = "CAAEA"
+
+/datum/design/item/stock_part/adv_sensor
+ id = "adv_sensor"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list("metal" = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/adv
+ sort_string = "CAAEB"
+
+/datum/design/item/stock_part/phasic_sensor
+ id = "phasic_sensor"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 3)
+ materials = list("metal" = 50, "glass" = 20, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
+ sort_string = "CAAEC"
+
/datum/design/item/stock_part/RPED
name = "Rapid Part Exchange Device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
id = "rped"
- req_tech = list("engineering" = 3, "materials" = 3)
- materials = list("$metal" = 15000, "$glass" = 5000)
+ req_tech = list(TECH_ENGINERING = 3, TECH_MATERIAL = 3)
+ materials = list("metal" = 15000, "glass" = 5000)
build_path = /obj/item/weapon/storage/part_replacer
+ sort_string = "CBAAA"
-datum/design/item/stock_part/basic_capacitor
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_capacitor"
- req_tech = list("powerstorage" = 1)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor
-
-datum/design/item/stock_part/basic_sensor
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_sensor"
- req_tech = list("magnets" = 1)
- materials = list("$metal" = 50, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module
-
-datum/design/item/stock_part/micro_mani
- build_type = PROTOLATHE | AUTOLATHE
- id = "micro_mani"
- req_tech = list("materials" = 1, "programming" = 1)
- materials = list("$metal" = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator
-
-datum/design/item/stock_part/basic_micro_laser
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_micro_laser"
- req_tech = list("magnets" = 1)
- materials = list("$metal" = 10, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser
-
-datum/design/item/stock_part/basic_matter_bin
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_matter_bin"
- req_tech = list("materials" = 1)
- materials = list("$metal" = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin
-
-datum/design/item/stock_part/adv_capacitor
- id = "adv_capacitor"
- req_tech = list("powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor/adv
-
-datum/design/item/stock_part/adv_sensor
- id = "adv_sensor"
- req_tech = list("magnets" = 3)
- materials = list("$metal" = 50, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module/adv
-
-datum/design/item/stock_part/nano_mani
- id = "nano_mani"
- req_tech = list("materials" = 3, "programming" = 2)
- materials = list("$metal" = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator/nano
-
-datum/design/item/stock_part/high_micro_laser
- id = "high_micro_laser"
- req_tech = list("magnets" = 3)
- materials = list("$metal" = 10, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser/high
-
-datum/design/item/stock_part/adv_matter_bin
- id = "adv_matter_bin"
- req_tech = list("materials" = 3)
- materials = list("$metal" = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin/adv
-
-datum/design/item/stock_part/super_capacitor
- id = "super_capacitor"
- req_tech = list("powerstorage" = 5, "materials" = 4)
- reliability_base = 71
- materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20)
- build_path = /obj/item/weapon/stock_parts/capacitor/super
-
-datum/design/item/stock_part/phasic_sensor
- id = "phasic_sensor"
- req_tech = list("magnets" = 5, "materials" = 3)
- materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10)
- reliability_base = 72
- build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
-
-datum/design/item/stock_part/pico_mani
- id = "pico_mani"
- req_tech = list("materials" = 5, "programming" = 2)
- materials = list("$metal" = 30)
- reliability_base = 73
- build_path = /obj/item/weapon/stock_parts/manipulator/pico
-
-datum/design/item/stock_part/ultra_micro_laser
- id = "ultra_micro_laser"
- req_tech = list("magnets" = 5, "materials" = 5)
- materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10)
- reliability_base = 70
- build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
-
-datum/design/item/stock_part/super_matter_bin
- id = "super_matter_bin"
- req_tech = list("materials" = 5)
- materials = list("$metal" = 80)
- reliability_base = 75
- build_path = /obj/item/weapon/stock_parts/matter_bin/super
-
-/////////////////////////////////////////
-//////////Tcommsat Stock Parts///////////
-/////////////////////////////////////////
-
-datum/design/item/stock_part/subspace_ansible
- id = "s-ansible"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 80, "$silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/ansible
-
-datum/design/item/stock_part/hyperwave_filter
- id = "s-filter"
- req_tech = list("programming" = 3, "magnets" = 3)
- materials = list("$metal" = 40, "$silver" = 10)
- build_path = /obj/item/weapon/stock_parts/subspace/filter
-
-datum/design/item/stock_part/subspace_amplifier
- id = "s-amplifier"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/amplifier
-
-datum/design/item/stock_part/subspace_treatment
- id = "s-treatment"
- req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/treatment
-
-datum/design/item/stock_part/subspace_analyzer
- id = "s-analyzer"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$gold" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/analyzer
-
-datum/design/item/stock_part/subspace_crystal
- id = "s-crystal"
- req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/crystal
-
-datum/design/item/stock_part/subspace_transmitter
- id = "s-transmitter"
- req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3)
- materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/transmitter
-
-////////////////////////////////////////
-//////////Misc Circuit Boards///////////
-////////////////////////////////////////
-
-datum/design/circuit/destructive_analyzer
- name = "destructive analyzer"
- id = "destructive_analyzer"
- req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/destructive_analyzer
-
-datum/design/circuit/protolathe
- name = "protolathe"
- id = "protolathe"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/protolathe
-
-datum/design/circuit/circuit_imprinter
- name = "circuit imprinter"
- id = "circuit_imprinter"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/circuit_imprinter
-
-datum/design/circuit/autolathe
- name = "autolathe board"
- id = "autolathe"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/autolathe
-
-datum/design/circuit/rdservercontrol
- name = "R&D server control console"
- id = "rdservercontrol"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/rdservercontrol
-
-datum/design/circuit/rdserver
- name = "R&D server"
- id = "rdserver"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/rdserver
-
-datum/design/circuit/mechfab
- name = "exosuit fabricator"
- id = "mechfab"
- req_tech = list("programming" = 3, "engineering" = 3)
- build_path = /obj/item/weapon/circuitboard/mechfab
-
-datum/design/circuit/gas_heater
- name = "gas heating system"
- id = "gasheater"
- req_tech = list("powerstorage" = 2, "engineering" = 1)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
-
-datum/design/circuit/gas_cooler
- name = "gas cooling system"
- id = "gascooler"
- req_tech = list("magnets" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
-
-datum/design/circuit/secure_airlock
- name = "secure airlock electronics"
- desc = "Allows for the construction of a tamper-resistant airlock electronics."
- id = "securedoor"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/airlock_electronics/secure
-
-datum/design/circuit/biogenerator
- name = "biogenerator"
- id = "biogenerator"
- req_tech = list("programming" = 2)
- build_path = /obj/item/weapon/circuitboard/biogenerator
-
-datum/design/circuit/recharge_station
- name = "cyborg recharge station"
- id = "recharge_station"
- req_tech = list("programming" = 3, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/recharge_station
-
-/////////////////////////////////////////
-////////Power Stuff Circuitboards////////
-/////////////////////////////////////////
-datum/design/circuit/pacman
- name = "PACMAN-type generator"
- id = "pacman"
- req_tech = list("programming" = 3, "phorontech" = 3, "powerstorage" = 3, "engineering" = 3)
- reliability_base = 79
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman
-
-datum/design/circuit/superpacman
- name = "SUPERPACMAN-type generator"
- id = "superpacman"
- req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
- reliability_base = 76
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman/super
-
-datum/design/circuit/mrspacman
- name = "MRSPACMAN-type generator"
- id = "mrspacman"
- req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5)
- reliability_base = 74
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman/mrs
-
-datum/design/circuit/batteryrack
- name = "cell rack PSU"
- id = "batteryrack"
- req_tech = list("powerstorage" = 3, "engineering" = 2)
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/batteryrack
-
-datum/design/circuit/smes_cell
- name = "'SMES' superconductive magnetic energy storage"
- desc = "Allows for the construction of circuit boards used to build a SMES."
- id = "smes_cell"
- req_tech = list("powerstorage" = 7, "engineering" = 5)
- //A uniquely-priced board; probably not the best idea
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 1000, "$silver" = 1000, "$diamond" = 500)
- build_path = /obj/item/weapon/circuitboard/smes
-
-////////////////////////////////////////
-///////////////Power Items//////////////
-////////////////////////////////////////
-datum/design/item/light_replacer
- name = "Light replacer"
- desc = "A device to automatically replace lights. Refill with working lightbulbs."
- id = "light_replacer"
- req_tech = list("magnets" = 3, "materials" = 4)
- materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000)
- build_path = /obj/item/device/lightreplacer
-
-// *** Power cells
-datum/design/item/powercell
+/datum/design/item/powercell
build_type = PROTOLATHE | MECHFAB
-datum/design/item/powercell/AssembleDesignName()
+/datum/design/item/powercell/AssembleDesignName()
name = "Power cell model ([item_name])"
-datum/design/item/powercell/AssembleDesignDesc()
+/datum/design/item/powercell/AssembleDesignDesc()
if(build_path)
var/obj/item/weapon/cell/C = build_path
desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy."
-datum/design/item/powercell/basic
+/datum/design/item/powercell/basic
name = "basic"
- build_type = PROTOLATHE | AUTOLATHE | MECHFAB
+ build_type = PROTOLATHE | MECHFAB
id = "basic_cell"
- req_tech = list("powerstorage" = 1)
- materials = list("$metal" = 700, "$glass" = 50)
+ req_tech = list(TECH_POWER = 1)
+ materials = list("metal" = 700, "glass" = 50)
build_path = /obj/item/weapon/cell
category = "Misc"
+ sort_string = "DAAAA"
-datum/design/item/powercell/high
+/datum/design/item/powercell/high
name = "high-capacity"
- build_type = PROTOLATHE | AUTOLATHE | MECHFAB
+ build_type = PROTOLATHE | MECHFAB
id = "high_cell"
- req_tech = list("powerstorage" = 2)
- materials = list("$metal" = 700, "$glass" = 60)
+ req_tech = list(TECH_POWER = 2)
+ materials = list("metal" = 700, "glass" = 60)
build_path = /obj/item/weapon/cell/high
category = "Misc"
+ sort_string = "DAAAB"
-datum/design/item/powercell/super
+/datum/design/item/powercell/super
name = "super-capacity"
id = "super_cell"
- req_tech = list("powerstorage" = 3, "materials" = 2)
- reliability_base = 75
- materials = list("$metal" = 700, "$glass" = 70)
+ req_tech = list(TECH_POWER = 3, TECH_MATERIAL = 2)
+ materials = list("metal" = 700, "glass" = 70)
build_path = /obj/item/weapon/cell/super
category = "Misc"
+ sort_string = "DAAAC"
-datum/design/item/powercell/hyper
+/datum/design/item/powercell/hyper
name = "hyper-capacity"
id = "hyper_cell"
- req_tech = list("powerstorage" = 5, "materials" = 4)
- reliability_base = 70
- materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list("metal" = 400, "gold" = 150, "silver" = 150, "glass" = 70)
build_path = /obj/item/weapon/cell/hyper
category = "Misc"
+ sort_string = "DAAAD"
-/////////////////////////////////////////
-////////////Medical Tools////////////////
-/////////////////////////////////////////
-datum/design/item/medical
- materials = list("$metal" = 30, "$glass" = 20)
+/datum/design/item/hud
+ materials = list("metal" = 50, "glass" = 50)
-datum/design/item/medical/AssembleDesignName()
+/datum/design/item/hud/AssembleDesignName()
+ ..()
+ name = "HUD glasses prototype ([item_name])"
+
+/datum/design/item/hud/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [item_name] HUD glasses."
+
+/datum/design/item/hud/health
+ name = "health scanner"
+ id = "health_hud"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3)
+ build_path = /obj/item/clothing/glasses/hud/health
+ sort_string = "GAAAA"
+
+/datum/design/item/hud/security
+ name = "security records"
+ id = "security_hud"
+ req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
+ build_path = /obj/item/clothing/glasses/hud/security
+ sort_string = "GAAAB"
+
+/datum/design/item/mesons
+ name = "Optical meson scanners design"
+ desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
+ id = "mesons"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/clothing/glasses/meson
+ sort_string = "GAAAC"
+
+/datum/design/item/weapon/mining/AssembleDesignName()
+ ..()
+ name = "Mining equipment design ([item_name])"
+
+/datum/design/item/weapon/mining/jackhammer
+ id = "jackhammer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
+ materials = list("metal" = 2000, "glass" = 500, "silver" = 500)
+ build_path = /obj/item/weapon/pickaxe/jackhammer
+ sort_string = "KAAAA"
+
+/datum/design/item/weapon/mining/drill
+ id = "drill"
+ req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
+ materials = list("metal" = 6000, "glass" = 1000) //expensive, but no need for miners.
+ build_path = /obj/item/weapon/pickaxe/drill
+ sort_string = "KAAAB"
+
+/datum/design/item/weapon/mining/plasmacutter
+ id = "plasmacutter"
+ req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
+ materials = list("metal" = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
+ build_path = /obj/item/weapon/pickaxe/plasmacutter
+ sort_string = "KAAAC"
+
+/datum/design/item/weapon/mining/pick_diamond
+ id = "pick_diamond"
+ req_tech = list(TECH_MATERIAL = 6)
+ materials = list("diamond" = 3000)
+ build_path = /obj/item/weapon/pickaxe/diamond
+ sort_string = "KAAAD"
+
+/datum/design/item/weapon/mining/drill_diamond
+ id = "drill_diamond"
+ req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 4)
+ materials = list("metal" = 3000, "glass" = 1000, "diamond" = 2000)
+ build_path = /obj/item/weapon/pickaxe/diamonddrill
+ sort_string = "KAAAE"
+
+/datum/design/item/medical
+ materials = list("metal" = 30, "glass" = 20)
+
+/datum/design/item/medical/AssembleDesignName()
..()
name = "Biotech device prototype ([item_name])"
-datum/design/item/medical/robot_scanner
+/datum/design/item/medical/robot_scanner
desc = "A hand-held scanner able to diagnose robotic injuries."
id = "robot_scanner"
- req_tech = list("magnets" = 3, "biotech" = 2, "engineering" = 3)
- materials = list("$metal" = 500, "$glass" = 200)
+ req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINERING = 3)
+ materials = list("metal" = 500, "glass" = 200)
build_path = /obj/item/device/robotanalyzer
+ sort_string = "MACFA"
-datum/design/item/medical/mass_spectrometer
+/datum/design/item/medical/mass_spectrometer
desc = "A device for analyzing chemicals in blood."
id = "mass_spectrometer"
- req_tech = list("biotech" = 2, "magnets" = 2)
- reliability_base = 76
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
build_path = /obj/item/device/mass_spectrometer
+ sort_string = "MACAA"
-datum/design/item/medical/adv_mass_spectrometer
+/datum/design/item/medical/adv_mass_spectrometer
desc = "A device for analyzing chemicals in blood and their quantities."
id = "adv_mass_spectrometer"
- req_tech = list("biotech" = 2, "magnets" = 4)
- reliability_base = 74
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
build_path = /obj/item/device/mass_spectrometer/adv
+ sort_string = "MACAB"
-datum/design/item/medical/reagent_scanner
+/datum/design/item/medical/reagent_scanner
desc = "A device for identifying chemicals."
id = "reagent_scanner"
- req_tech = list("biotech" = 2, "magnets" = 2)
- reliability_base = 76
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
build_path = /obj/item/device/reagent_scanner
+ sort_string = "MACBA"
-datum/design/item/medical/adv_reagent_scanner
+/datum/design/item/medical/adv_reagent_scanner
desc = "A device for identifying chemicals and their proportions."
id = "adv_reagent_scanner"
- req_tech = list("biotech" = 2, "magnets" = 4)
- reliability_base = 74
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
build_path = /obj/item/device/reagent_scanner/adv
+ sort_string = "MACBB"
-datum/design/item/medical/mmi
- id = "mmi"
- req_tech = list("programming" = 2, "biotech" = 3)
- build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1000, "$glass" = 500)
- reliability_base = 76
- build_path = /obj/item/device/mmi
- category = "Misc"
-
-datum/design/item/medical/mmi_radio
- id = "mmi_radio"
- req_tech = list("programming" = 2, "biotech" = 4)
- build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1200, "$glass" = 500)
- reliability_base = 74
- build_path = /obj/item/device/mmi/radio_enabled
- category = "Misc"
-
-datum/design/item/medical/synthetic_flash
- id = "sflash"
- req_tech = list("magnets" = 3, "combat" = 2)
- build_type = MECHFAB
- materials = list("$metal" = 750, "$glass" = 750)
- reliability_base = 76
- build_path = /obj/item/device/flash/synthetic
- category = "Misc"
-
-datum/design/item/medical/nanopaste
- desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
- id = "nanopaste"
- req_tech = list("materials" = 4, "engineering" = 3)
- materials = list("$metal" = 7000, "$glass" = 7000)
- build_path = /obj/item/stack/nanopaste
-
-datum/design/item/scalpel_laser1
- name = "Basic Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
- id = "scalpel_laser1"
- req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2)
- materials = list("$metal" = 12500, "$glass" = 7500)
- build_path = /obj/item/weapon/scalpel/laser1
-
-datum/design/item/scalpel_laser2
- name = "Improved Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
- id = "scalpel_laser2"
- req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4)
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500)
- build_path = /obj/item/weapon/scalpel/laser2
-
-datum/design/item/scalpel_laser3
- name = "Advanced Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
- id = "scalpel_laser3"
- req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5)
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500)
- build_path = /obj/item/weapon/scalpel/laser3
-
-datum/design/item/scalpel_manager
- name = "Incision Management System"
- desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
- id = "scalpel_manager"
- req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4)
- materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750)
- build_path = /obj/item/weapon/scalpel/manager
-
-// *** Beakers (not really a subtype of design/item/medical)
-datum/design/item/beaker/AssembleDesignName()
+/datum/design/item/beaker/AssembleDesignName()
name = "Beaker prototype ([item_name])"
-
-datum/design/item/beaker/bluespace
- name = "bluespace"
- desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
- id = "bluespacebeaker"
- req_tech = list("bluespace" = 2, "materials" = 6)
- materials = list("$metal" = 3000, "$phoron" = 3000, "$diamond" = 500)
- reliability_base = 76
- build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
-
-datum/design/item/beaker/noreact
+
+/datum/design/item/beaker/noreact
name = "cryostasis"
desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
id = "splitbeaker"
- req_tech = list("materials" = 2)
- materials = list("$metal" = 3000)
- reliability_base = 76
+ req_tech = list(TECH_MATERIAL = 2)
+ materials = list("metal" = 3000)
build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact
- category = "Misc"
+ sort_string = "MADAA"
-// *** Implants (not really a subtype of design/item/medical)
-datum/design/item/implant
- materials = list("$metal" = 50, "$glass" = 50)
+/datum/design/item/beaker/bluespace
+ name = TECH_BLUESPACE
+ desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
+ id = "bluespacebeaker"
+ req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6)
+ materials = list("metal" = 3000, "phoron" = 3000, "diamond" = 500)
+ build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
+ sort_string = "MADAB"
-datum/design/item/implant/AssembleDesignName()
+/datum/design/item/medical/nanopaste
+ desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
+ id = "nanopaste"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
+ materials = list("metal" = 7000, "glass" = 7000)
+ build_path = /obj/item/stack/nanopaste
+ sort_string = "MBAAA"
+
+/datum/design/item/scalpel_laser1
+ name = "Basic Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
+ id = "scalpel_laser1"
+ req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_MAGNET = 2)
+ materials = list("metal" = 12500, "glass" = 7500)
+ build_path = /obj/item/weapon/scalpel/laser1
+ sort_string = "MBBAA"
+
+/datum/design/item/scalpel_laser2
+ name = "Improved Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
+ id = "scalpel_laser2"
+ req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_MAGNET = 4)
+ materials = list("metal" = 12500, "glass" = 7500, "silver" = 2500)
+ build_path = /obj/item/weapon/scalpel/laser2
+ sort_string = "MBBAB"
+
+/datum/design/item/scalpel_laser3
+ name = "Advanced Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
+ id = "scalpel_laser3"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 5)
+ materials = list("metal" = 12500, "glass" = 7500, "silver" = 2000, "gold" = 1500)
+ build_path = /obj/item/weapon/scalpel/laser3
+ sort_string = "MBBAC"
+
+/datum/design/item/scalpel_manager
+ name = "Incision Management System"
+ desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
+ id = "scalpel_manager"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4)
+ materials = list ("metal" = 12500, "glass" = 7500, "silver" = 1500, "gold" = 1500, "diamond" = 750)
+ build_path = /obj/item/weapon/scalpel/manager
+ sort_string = "MBBAD"
+
+/datum/design/item/implant
+ materials = list("metal" = 50, "glass" = 50)
+
+/datum/design/item/implant/AssembleDesignName()
..()
name = "Implantable biocircuit design ([item_name])"
-/* // Removal of loyalty implants. Can't think of a way to add this to the config option.
-datum/design/item/implant/loyalty
- name = "loyalty"
- id = "implant_loyal"
- req_tech = list("materials" = 2, "biotech" = 3)
- materials = list("$metal" = 7000, "$glass" = 7000)
- build_path = /obj/item/weapon/implantcase/loyalty"
-*/
-
-datum/design/item/implant/chemical
+/datum/design/item/implant/chemical
name = "chemical"
id = "implant_chem"
- req_tech = list("materials" = 2, "biotech" = 3)
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
build_path = /obj/item/weapon/implantcase/chem
+ sort_string = "MFAAA"
-datum/design/item/implant/freedom
+/datum/design/item/implant/freedom
name = "freedom"
id = "implant_free"
- req_tech = list("syndicate" = 2, "biotech" = 3)
+ req_tech = list(TECH_ILLEGAL = 2, TECH_BIO = 3)
build_path = /obj/item/weapon/implantcase/freedom
+ sort_string = "MFAAB"
-/////////////////////////////////////////
-/////////////////Weapons/////////////////
-/////////////////////////////////////////
-datum/design/item/weapon/AssembleDesignName()
+/datum/design/item/weapon/AssembleDesignName()
..()
name = "Weapon prototype ([item_name])"
-datum/design/item/weapon/AssembleDesignDesc()
+/datum/design/item/weapon/AssembleDesignDesc()
if(!desc)
if(build_path)
var/obj/item/I = build_path
desc = initial(I.desc)
..()
-datum/design/item/weapon/nuclear_gun
- id = "nuclear_gun"
- req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3)
- materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500)
- reliability_base = 76
- build_path = /obj/item/weapon/gun/energy/gun/nuclear
- locked = 1
-
-datum/design/item/weapon/stunrevolver
+/datum/design/item/weapon/stunrevolver
id = "stunrevolver"
- req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
- materials = list("$metal" = 4000)
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
+ materials = list("metal" = 4000)
build_path = /obj/item/weapon/gun/energy/stunrevolver
- locked = 1
+ sort_string = "TAAAA"
-datum/design/item/weapon/lasercannon
+/datum/design/item/weapon/nuclear_gun
+ id = "nuclear_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
+ materials = list("metal" = 5000, "glass" = 1000, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/gun/nuclear
+ sort_string = "TAAAB"
+
+/datum/design/item/weapon/lasercannon
desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core."
id = "lasercannon"
- req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3)
- materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
+ materials = list("metal" = 10000, "glass" = 1000, "diamond" = 2000)
build_path = /obj/item/weapon/gun/energy/lasercannon
- locked = 1
+ sort_string = "TAAAC"
-datum/design/item/weapon/decloner
+/datum/design/item/weapon/phoronpistol
+ id = "ppistol"
+ req_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
+ materials = list("metal" = 5000, "glass" = 1000, "phoron" = 3000)
+ build_path = /obj/item/weapon/gun/energy/toxgun
+ sort_string = "TAAAD"
+
+/datum/design/item/weapon/decloner
id = "decloner"
- req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6)
- materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40)
+ req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6)
+ materials = list("gold" = 5000,"uranium" = 10000, "mutagen" = 40)
build_path = /obj/item/weapon/gun/energy/decloner
- locked = 1
+ sort_string = "TAAAE"
-datum/design/item/weapon/chemsprayer
- desc = "An advanced chem spraying device."
- id = "chemsprayer"
- req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 2)
- materials = list("$metal" = 5000, "$glass" = 1000)
- reliability_base = 100
- build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
-
-datum/design/item/weapon/rapidsyringe
- id = "rapidsyringe"
- req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2)
- materials = list("$metal" = 5000, "$glass" = 1000)
- build_path = /obj/item/weapon/gun/launcher/syringe/rapid
-/*
-datum/design/item/weapon/largecrossbow
- name = "Energy Crossbow"
- desc = "A weapon favoured by syndicate infiltration teams."
- id = "largecrossbow"
- req_tech = list("combat" = 4, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3)
- materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000)
- build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow"
-*/
-datum/design/item/weapon/temp_gun
- desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
- id = "temp_gun"
- req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2)
- materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000)
- build_path = /obj/item/weapon/gun/energy/temperature
- locked = 1
-
-datum/design/item/weapon/flora_gun
- id = "flora_gun"
- req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3)
- materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500)
- build_path = /obj/item/weapon/gun/energy/floragun
-
-datum/design/item/weapon/large_grenade
- id = "large_Grenade"
- req_tech = list("combat" = 3, "materials" = 2)
- materials = list("$metal" = 3000)
- reliability_base = 79
- build_path = /obj/item/weapon/grenade/chem_grenade/large
-
-datum/design/item/weapon/smg
+/datum/design/item/weapon/smg
id = "smg"
- req_tech = list("combat" = 4, "materials" = 3)
- materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list("metal" = 8000, "silver" = 2000, "diamond" = 1000)
build_path = /obj/item/weapon/gun/projectile/automatic
- locked = 1
+ sort_string = "TAABA"
-datum/design/item/weapon/ammo_9mm
+/datum/design/item/weapon/ammo_9mm
id = "ammo_9mm"
- req_tech = list("combat" = 4, "materials" = 3)
- materials = list("$metal" = 3750, "$silver" = 100)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list("metal" = 3750, "silver" = 100)
build_path = /obj/item/ammo_magazine/c9mm
+ sort_string = "TAACA"
-datum/design/item/weapon/stunshell
+/datum/design/item/weapon/stunshell
desc = "A stunning shell for a shotgun."
id = "stunshell"
- req_tech = list("combat" = 3, "materials" = 3)
- materials = list("$metal" = 4000)
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
+ materials = list("metal" = 4000)
build_path = /obj/item/ammo_casing/shotgun/stunshell
+ sort_string = "TAACB"
-datum/design/item/weapon/phoronpistol
- id = "ppistol"
- req_tech = list("combat" = 5, "phorontech" = 4)
- materials = list("$metal" = 5000, "$glass" = 1000, "$phoron" = 3000)
- build_path = /obj/item/weapon/gun/energy/toxgun
+/datum/design/item/weapon/chemsprayer
+ desc = "An advanced chem spraying device."
+ id = "chemsprayer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
+ materials = list("metal" = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
+ sort_string = "TABAA"
-/////////////////////////////////////////
-/////////////////Mining//////////////////
-/////////////////////////////////////////
-//Subtype of item/weapon/, because we get the nice desc update
-datum/design/item/weapon/mining/AssembleDesignName()
- ..()
- name = "Mining equipment design ([item_name])"
+/datum/design/item/weapon/rapidsyringe
+ id = "rapidsyringe"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
+ materials = list("metal" = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/gun/launcher/syringe/rapid
+ sort_string = "TABAB"
-datum/design/item/weapon/mining/jackhammer
- id = "jackhammer"
- req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
- materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
- build_path = /obj/item/weapon/pickaxe/jackhammer
+/datum/design/item/weapon/temp_gun
+ desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
+ id = "temp_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
+ materials = list("metal" = 5000, "glass" = 500, "silver" = 3000)
+ build_path = /obj/item/weapon/gun/energy/temperature
+ sort_string = "TABAC"
-datum/design/item/weapon/mining/drill
- id = "drill"
- req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
- materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
- build_path = /obj/item/weapon/pickaxe/drill
+/datum/design/item/weapon/large_grenade
+ id = "large_Grenade"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ materials = list("metal" = 3000)
+ build_path = /obj/item/weapon/grenade/chem_grenade/large
+ sort_string = "TACAA"
-datum/design/item/weapon/mining/plasmacutter
- id = "plasmacutter"
- req_tech = list("materials" = 4, "phorontech" = 3, "engineering" = 3)
- materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$phoron" = 500)
- reliability_base = 79
- build_path = /obj/item/weapon/pickaxe/plasmacutter
+/datum/design/item/weapon/flora_gun
+ id = "flora_gun"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
+ materials = list("metal" = 2000, "glass" = 500, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/floragun
+ sort_string = "TBAAA"
-datum/design/item/weapon/mining/pick_diamond
- id = "pick_diamond"
- req_tech = list("materials" = 6)
- materials = list("$diamond" = 3000)
- build_path = /obj/item/weapon/pickaxe/diamond
+/datum/design/item/stock_part/subspace_ansible
+ id = "s-ansible"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 80, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/ansible
+ sort_string = "UAAAA"
-datum/design/item/weapon/mining/drill_diamond
- id = "drill_diamond"
- req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
- materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
- reliability_base = 79
- build_path = /obj/item/weapon/pickaxe/diamonddrill
+/datum/design/item/stock_part/hyperwave_filter
+ id = "s-filter"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3)
+ materials = list("metal" = 40, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/subspace/filter
+ sort_string = "UAAAB"
-/////////////////////////////////////////
-//////////////Blue Space/////////////////
-/////////////////////////////////////////
-datum/design/item/beacon
+/datum/design/item/stock_part/subspace_amplifier
+ id = "s-amplifier"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "gold" = 30, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/amplifier
+ sort_string = "UAAAC"
+
+/datum/design/item/stock_part/subspace_treatment
+ id = "s-treatment"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/treatment
+ sort_string = "UAAAD"
+
+/datum/design/item/stock_part/subspace_analyzer
+ id = "s-analyzer"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "gold" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/analyzer
+ sort_string = "UAAAE"
+
+/datum/design/item/stock_part/subspace_crystal
+ id = "s-crystal"
+ req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("glass" = 1000, "silver" = 20, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/crystal
+ sort_string = "UAAAF"
+
+/datum/design/item/stock_part/subspace_transmitter
+ id = "s-transmitter"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
+ materials = list("glass" = 100, "silver" = 10, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/transmitter
+ sort_string = "UAAAG"
+
+/datum/design/item/light_replacer
+ name = "Light replacer"
+ desc = "A device to automatically replace lights. Refill with working lightbulbs."
+ id = "light_replacer"
+ req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4)
+ materials = list("metal" = 1500, "silver" = 150, "glass" = 3000)
+ build_path = /obj/item/device/lightreplacer
+ sort_string = "VAAAH"
+
+/datum/design/item/paicard
+ name = "'pAI', personal artificial intelligence device"
+ id = "paicard"
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 500, "metal" = 500)
+ build_path = /obj/item/device/paicard
+ sort_string = "VABAI"
+
+/datum/design/item/intellicard
+ name = "'intelliCard', AI preservation and transportation system"
+ desc = "Allows for the construction of an intelliCard."
+ id = "intellicard"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ materials = list("glass" = 1000, "gold" = 200)
+ build_path = /obj/item/device/aicard
+ sort_string = "VACAA"
+
+/datum/design/item/posibrain
+ id = "posibrain"
+ req_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
+ materials = list("metal" = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
+ build_path = /obj/item/device/mmi/digital/posibrain
+ sort_string = "VACAB"
+
+/datum/design/item/medical/mmi
+ id = "mmi"
+ req_tech = list(TECH_DATA = 2, TECH_BIO = 3)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("metal" = 1000, "glass" = 500)
+ build_path = /obj/item/device/mmi
+ category = "Misc"
+ sort_string = "VACBA"
+
+/datum/design/item/medical/mmi_radio
+ id = "mmi_radio"
+ req_tech = list(TECH_DATA = 2, TECH_BIO = 4)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("metal" = 1200, "glass" = 500)
+ build_path = /obj/item/device/mmi/radio_enabled
+ category = "Misc"
+ sort_string = "VACBB"
+
+/datum/design/item/beacon
name = "Bluespace tracking beacon design"
id = "beacon"
- req_tech = list("bluespace" = 1)
- materials = list ("$metal" = 20, "$glass" = 10)
+ req_tech = list(TECH_BLUESPACE = 1)
+ materials = list ("metal" = 20, "glass" = 10)
build_path = /obj/item/device/radio/beacon
+ sort_string = "VADAA"
-datum/design/item/bag_holding
+/datum/design/item/bag_holding
name = "'Bag of Holding', an infinite capacity bag prototype"
desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy."
id = "bag_holding"
- req_tech = list("bluespace" = 4, "materials" = 6)
- materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
- reliability_base = 80
+ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
+ materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
build_path = /obj/item/weapon/storage/backpack/holding
+ sort_string = "VAEAA"
+
+/datum/design/item/binaryencrypt
+ name = "Binary encryption key"
+ desc = "Allows for deciphering the binary channel on-the-fly."
+ id = "binaryencrypt"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list("metal" = 300, "glass" = 300)
+ build_path = /obj/item/device/encryptionkey/binary
+ sort_string = "VASAA"
+
+/datum/design/item/chameleon
+ name = "Holographic equipment kit"
+ desc = "A kit of dangerous, high-tech equipment with changeable looks."
+ id = "chameleon"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list("metal" = 500)
+ build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
+ sort_string = "VASBA"
/*
-datum/design/bluespace_crystal
- name = "Artificial bluespace crystal"
- desc = "A small blue crystal with mystical properties."
- id = "bluespace_crystal"
- req_tech = list("bluespace" = 5, "materials" = 7)
- build_type = PROTOLATHE
- materials = list("$gold" = 1500, "$diamond" = 3000, "$phoron" = 1500)
- reliability_base = 100
- build_path = /obj/item/bluespace_crystal/artificial"
+CIRCUITS BELOW
*/
-/////////////////////////////////////////
-/////////////////HUDs////////////////////
-/////////////////////////////////////////
-datum/design/item/hud
- materials = list("$metal" = 50, "$glass" = 50)
+/datum/design/circuit
+ build_type = IMPRINTER
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 2000)
+ chemicals = list("sacid" = 20)
+ time = 5
-datum/design/item/hud/AssembleDesignName()
+/datum/design/circuit/AssembleDesignName()
..()
- name = "HUD glasses prototype ([item_name])"
+ var/obj/item/weapon/circuitboard/C = new build_path()
+ if(C && istype(C))
+ if(C.board_type == "machine")
+ name = "Machine circuit design ([item_name])"
+ del(C)
+ return
+ else if(C.board_type == "computer")
+ name = "Computer circuit design ([item_name])"
+ del(C)
+ return
+ name = "Circuit design ([item_name])"
+ del(C)
-datum/design/item/hud/AssembleDesignDesc()
- desc = "Allows for the construction of \a [item_name] HUD glasses."
+/datum/design/circuit/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [item_name] circuit board."
-datum/design/item/hud/health
- name = "health scanner"
- id = "health_hud"
- req_tech = list("biotech" = 2, "magnets" = 3)
- build_path = /obj/item/clothing/glasses/hud/health
+/datum/design/circuit/arcademachine
+ name = "arcade machine"
+ id = "arcademachine"
+ req_tech = list(TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/arcade
+ sort_string = "MAAAA"
-datum/design/item/hud/security
- name = "security records"
- id = "security_hud"
- req_tech = list("magnets" = 3, "combat" = 2)
- build_path = /obj/item/clothing/glasses/hud/security
- locked = 1
+/datum/design/circuit/seccamera
+ name = "security camera monitor"
+ id = "seccamera"
+ build_path = /obj/item/weapon/circuitboard/security
+ sort_string = "DAAAA"
-/////////////////////////////////////////
-////////////////PDA Stuff////////////////
-/////////////////////////////////////////
-datum/design/item/pda
+/datum/design/circuit/secdata
+ name = "security records console"
+ id = "sec_data"
+ build_path = /obj/item/weapon/circuitboard/secure_data
+ sort_string = "DABAA"
+
+/datum/design/circuit/prisonmanage
+ name = "prisoner management console"
+ id = "prisonmanage"
+ build_path = /obj/item/weapon/circuitboard/prisoner
+ sort_string = "DACAA"
+
+/datum/design/circuit/med_data
+ name = "medical records console"
+ id = "med_data"
+ build_path = /obj/item/weapon/circuitboard/med_data
+ sort_string = "FAAAA"
+
+/datum/design/circuit/operating
+ name = "patient monitoring console"
+ id = "operating"
+ build_path = /obj/item/weapon/circuitboard/operating
+ sort_string = "FACAA"
+
+/datum/design/circuit/pandemic
+ name = "PanD.E.M.I.C. 2200"
+ id = "pandemic"
+ build_path = /obj/item/weapon/circuitboard/pandemic
+ sort_string = "FAEAA"
+
+/datum/design/circuit/scan_console
+ name = "DNA machine"
+ id = "scan_console"
+ build_path = /obj/item/weapon/circuitboard/scan_consolenew
+ sort_string = "FAGAA"
+
+/datum/design/circuit/clonecontrol
+ name = "cloning control console"
+ id = "clonecontrol"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/cloning
+ sort_string = "FAGAC"
+
+/datum/design/circuit/clonepod
+ name = "clone pod"
+ id = "clonepod"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonepod
+ sort_string = "FAGAE"
+
+/datum/design/circuit/clonescanner
+ name = "cloning scanner"
+ id = "clonescanner"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonescanner
+ sort_string = "FAGAG"
+
+/datum/design/circuit/crewconsole
+ name = "crew monitoring console"
+ id = "crewconsole"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/crew
+ sort_string = "FAGAI"
+
+/datum/design/circuit/teleconsole
+ name = "teleporter control console"
+ id = "teleconsole"
+ req_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 2)
+ sort_string = "HAAAA"
+
+/datum/design/circuit/robocontrol
+ name = "robotics control console"
+ id = "robocontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/robotics
+ sort_string = "HAAAB"
+
+/datum/design/circuit/mechacontrol
+ name = "exosuit control console"
+ id = "mechacontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/mecha_control
+ sort_string = "HAAAC"
+
+/datum/design/circuit/mechapower
+ name = "mech bay power control console"
+ id = "mechapower"
+ build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
+ sort_string = "HAAAD"
+
+/datum/design/circuit/rdconsole
+ name = "R&D control console"
+ id = "rdconsole"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/rdconsole
+ sort_string = "HAAAE"
+
+/datum/design/circuit/aifixer
+ name = "AI integrity restorer"
+ id = "aifixer"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/aifixer
+ sort_string = "HAAAF"
+
+/datum/design/circuit/comm_monitor
+ name = "telecommunications monitoring console"
+ id = "comm_monitor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_monitor
+ sort_string = "HAACA"
+
+/datum/design/circuit/comm_server
+ name = "telecommunications server monitoring console"
+ id = "comm_server"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_server
+ sort_string = "HAACB"
+
+/datum/design/circuit/message_monitor
+ name = "messaging monitor console"
+ id = "message_monitor"
+ req_tech = list(TECH_DATA = 5)
+ build_path = /obj/item/weapon/circuitboard/message_monitor
+ sort_string = "HAACC"
+
+/datum/design/circuit/aiupload
+ name = "AI upload console"
+ id = "aiupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/aiupload
+ sort_string = "HAABA"
+
+/datum/design/circuit/borgupload
+ name = "cyborg upload console"
+ id = "borgupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/borgupload
+ sort_string = "HAABB"
+
+/datum/design/circuit/destructive_analyzer
+ name = "destructive analyzer"
+ id = "destructive_analyzer"
+ req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/destructive_analyzer
+ sort_string = "HABAA"
+
+/datum/design/circuit/protolathe
+ name = "protolathe"
+ id = "protolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/protolathe
+ sort_string = "HABAB"
+
+/datum/design/circuit/circuit_imprinter
+ name = "circuit imprinter"
+ id = "circuit_imprinter"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/circuit_imprinter
+ sort_string = "HABAC"
+
+/datum/design/circuit/autolathe
+ name = "autolathe board"
+ id = "autolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/autolathe
+ sort_string = "HABAD"
+
+/datum/design/circuit/rdservercontrol
+ name = "R&D server control console"
+ id = "rdservercontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdservercontrol
+ sort_string = "HABBA"
+
+/datum/design/circuit/rdserver
+ name = "R&D server"
+ id = "rdserver"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdserver
+ sort_string = "HABBB"
+
+/datum/design/circuit/mechfab
+ name = "exosuit fabricator"
+ id = "mechfab"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/weapon/circuitboard/mechfab
+ sort_string = "HABAE"
+
+/datum/design/circuit/recharge_station
+ name = "cyborg recharge station"
+ id = "recharge_station"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/recharge_station
+ sort_string = "HACAA"
+
+/datum/design/circuit/atmosalerts
+ name = "atmosphere alert console"
+ id = "atmosalerts"
+ build_path = /obj/item/weapon/circuitboard/atmos_alert
+ sort_string = "JAAAA"
+
+/datum/design/circuit/air_management
+ name = "atmosphere monitoring console"
+ id = "air_management"
+ build_path = /obj/item/weapon/circuitboard/air_management
+ sort_string = "JAAAB"
+
+/datum/design/circuit/rcon_console
+ name = "RCON remote control console"
+ id = "rcon_console"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_POWER = 5)
+ build_path = /obj/item/weapon/circuitboard/rcon_console
+ sort_string = "JAAAC"
+
+/datum/design/circuit/dronecontrol
+ name = "drone control console"
+ id = "dronecontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/drone_control
+ sort_string = "JAAAD"
+
+/datum/design/circuit/powermonitor
+ name = "power monitoring console"
+ id = "powermonitor"
+ build_path = /obj/item/weapon/circuitboard/powermonitor
+ sort_string = "JAAAE"
+
+/datum/design/circuit/solarcontrol
+ name = "solar control console"
+ id = "solarcontrol"
+ build_path = /obj/item/weapon/circuitboard/solar_control
+ sort_string = "JAAAF"
+
+/datum/design/circuit/pacman
+ name = "PACMAN-type generator"
+ id = "pacman"
+ req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/weapon/circuitboard/pacman
+ sort_string = "JBAAA"
+
+/datum/design/circuit/superpacman
+ name = "SUPERPACMAN-type generator"
+ id = "superpacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINERING = 4)
+ build_path = /obj/item/weapon/circuitboard/pacman/super
+ sort_string = "JBAAB"
+
+/datum/design/circuit/mrspacman
+ name = "MRSPACMAN-type generator"
+ id = "mrspacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINERING = 5)
+ build_path = /obj/item/weapon/circuitboard/pacman/mrs
+ sort_string = "JBAAC"
+
+/datum/design/circuit/batteryrack
+ name = "cell rack PSU"
+ id = "batteryrack"
+ req_tech = list(TECH_POWER = 3, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/batteryrack
+ sort_string = "JBABA"
+
+/datum/design/circuit/smes_cell
+ name = "'SMES' superconductive magnetic energy storage"
+ desc = "Allows for the construction of circuit boards used to build a SMES."
+ id = "smes_cell"
+ req_tech = list(TECH_POWER = 7, TECH_ENGINERING = 5)
+ build_path = /obj/item/weapon/circuitboard/smes
+ sort_string = "JBABB"
+
+/datum/design/circuit/gas_heater
+ name = "gas heating system"
+ id = "gasheater"
+ req_tech = list(TECH_POWER = 2, TECH_ENGINERING = 1)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
+ sort_string = "JCAAA"
+
+/datum/design/circuit/gas_cooler
+ name = "gas cooling system"
+ id = "gascooler"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
+ sort_string = "JCAAB"
+
+/datum/design/circuit/secure_airlock
+ name = "secure airlock electronics"
+ desc = "Allows for the construction of a tamper-resistant airlock electronics."
+ id = "securedoor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/airlock_electronics/secure
+ sort_string = "JDAAA"
+
+/datum/design/circuit/ordercomp
+ name = "supply ordering console"
+ id = "ordercomp"
+ build_path = /obj/item/weapon/circuitboard/ordercomp
+ sort_string = "KAAAA"
+
+/datum/design/circuit/supplycomp
+ name = "supply control console"
+ id = "supplycomp"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/supplycomp
+ sort_string = "KAAAB"
+
+/datum/design/circuit/biogenerator
+ name = "biogenerator"
+ id = "biogenerator"
+ req_tech = list(TECH_DATA = 2)
+ build_path = /obj/item/weapon/circuitboard/biogenerator
+ sort_string = "KBAAA"
+
+/datum/design/circuit/comconsole
+ name = "communications console"
+ id = "comconsole"
+ build_path = /obj/item/weapon/circuitboard/communications
+ sort_string = "LAAAA"
+
+/datum/design/circuit/idcardconsole
+ name = "ID card modification console"
+ id = "idcardconsole"
+ build_path = /obj/item/weapon/circuitboard/card
+ sort_string = "LAAAB"
+
+/datum/design/circuit/emp_data
+ name = "employment records console"
+ id = "emp_data"
+ build_path = /obj/item/weapon/circuitboard/skills
+ sort_string = "LAAAC"
+
+/datum/design/circuit/mecha
+ req_tech = list(TECH_DATA = 3)
+
+/datum/design/circuit/mecha/AssembleDesignName()
+ name = "Exosuit module circuit design ([name])"
+/datum/design/circuit/mecha/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [name] module."
+
+/datum/design/circuit/mecha/ripley_main
+ name = "APLU 'Ripley' central control"
+ id = "ripley_main"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
+ sort_string = "NAAAA"
+
+/datum/design/circuit/mecha/ripley_peri
+ name = "APLU 'Ripley' peripherals control"
+ id = "ripley_peri"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
+ sort_string = "NAAAB"
+
+/datum/design/circuit/mecha/odysseus_main
+ name = "'Odysseus' central control"
+ id = "odysseus_main"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
+ sort_string = "NAABA"
+
+/datum/design/circuit/mecha/odysseus_peri
+ name = "'Odysseus' peripherals control"
+ id = "odysseus_peri"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
+ sort_string = "NAABB"
+
+/datum/design/circuit/mecha/gygax_main
+ name = "'Gygax' central control"
+ id = "gygax_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
+ sort_string = "NAACA"
+
+/datum/design/circuit/mecha/gygax_peri
+ name = "'Gygax' peripherals control"
+ id = "gygax_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
+ sort_string = "NAACB"
+
+/datum/design/circuit/mecha/gygax_targ
+ name = "'Gygax' weapon control and targeting"
+ id = "gygax_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
+ sort_string = "NAACC"
+
+/datum/design/circuit/mecha/durand_main
+ name = "'Durand' central control"
+ id = "durand_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/main
+ sort_string = "NAADA"
+
+/datum/design/circuit/mecha/durand_peri
+ name = "'Durand' peripherals control"
+ id = "durand_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
+ sort_string = "NAADB"
+
+/datum/design/circuit/mecha/durand_targ
+ name = "'Durand' weapon control and targeting"
+ id = "durand_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
+ sort_string = "NAADC"
+
+/datum/design/circuit/tcom
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
+
+/datum/design/circuit/tcom/AssembleDesignName()
+ name = "Telecommunications machinery circuit design ([name])"
+/datum/design/circuit/tcom/AssembleDesignDesc()
+ desc = "Allows for the construction of a telecommunications [name] circuit board."
+
+/datum/design/circuit/tcom/server
+ name = "server mainframe"
+ id = "tcom-server"
+ build_path = /obj/item/weapon/circuitboard/telecomms/server
+ sort_string = "PAAAA"
+
+/datum/design/circuit/tcom/processor
+ name = "processor unit"
+ id = "tcom-processor"
+ build_path = /obj/item/weapon/circuitboard/telecomms/processor
+ sort_string = "PAAAB"
+
+/datum/design/circuit/tcom/bus
+ name = "bus mainframe"
+ id = "tcom-bus"
+ build_path = /obj/item/weapon/circuitboard/telecomms/bus
+ sort_string = "PAAAC"
+
+/datum/design/circuit/tcom/hub
+ name = "hub mainframe"
+ id = "tcom-hub"
+ build_path = /obj/item/weapon/circuitboard/telecomms/hub
+ sort_string = "PAAAD"
+
+/datum/design/circuit/tcom/relay
+ name = "relay mainframe"
+ id = "tcom-relay"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 4, TECH_BLUESPACE = 3)
+ build_path = /obj/item/weapon/circuitboard/telecomms/relay
+ sort_string = "PAAAE"
+
+/datum/design/circuit/tcom/broadcaster
+ name = "subspace broadcaster"
+ id = "tcom-broadcaster"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
+ sort_string = "PAAAF"
+
+/datum/design/circuit/tcom/receiver
+ name = "subspace receiver"
+ id = "tcom-receiver"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/receiver
+ sort_string = "PAAAG"
+
+/datum/design/circuit/shield
+ req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
+ materials = list("glass" = 2000, "gold" = 1000)
+
+/datum/design/circuit/shield/AssembleDesignName()
+ name = "Shield generator circuit design ([name])"
+/datum/design/circuit/shield/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [name] shield generator."
+
+/datum/design/circuit/shield/bubble
+ name = "bubble"
+ id = "shield_gen"
+ build_path = /obj/item/weapon/circuitboard/shield_gen
+ sort_string = "VAAAA"
+
+/datum/design/circuit/shield/hull
+ name = "hull"
+ id = "shield_gen_ex"
+ build_path = /obj/item/weapon/circuitboard/shield_gen_ex
+ sort_string = "VAAAB"
+
+/datum/design/circuit/shield/capacitor
+ name = "capacitor"
+ desc = "Allows for the construction of a shield capacitor circuit board."
+ id = "shield_cap"
+ req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
+ build_path = /obj/item/weapon/circuitboard/shield_cap
+ sort_string = "VAAAC"
+
+/datum/design/circuit/aicore
+ name = "AI core"
+ id = "aicore"
+ req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/aicore
+ sort_string = "XAAAA"
+
+/datum/design/aimodule
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "gold" = 100)
+
+/datum/design/aimodule/AssembleDesignName()
+ name = "AI module design ([name])"
+
+/datum/design/aimodule/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI module."
+
+/datum/design/aimodule/safeguard
+ name = "Safeguard"
+ id = "safeguard"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/safeguard
+ sort_string = "XABAA"
+
+/datum/design/aimodule/onehuman
+ name = "OneCrewMember"
+ id = "onehuman"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/oneHuman
+ sort_string = "XABAB"
+
+/datum/design/aimodule/protectstation
+ name = "ProtectStation"
+ id = "protectstation"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/protectStation
+ sort_string = "XABAC"
+
+/datum/design/aimodule/notele
+ name = "TeleporterOffline"
+ id = "notele"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/aiModule/teleporterOffline
+ sort_string = "XABAD"
+
+/datum/design/aimodule/quarantine
+ name = "Quarantine"
+ id = "quarantine"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/quarantine
+ sort_string = "XABAE"
+
+/datum/design/aimodule/oxygen
+ name = "OxygenIsToxicToHumans"
+ id = "oxygen"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/oxygen
+ sort_string = "XABAF"
+
+/datum/design/aimodule/freeform
+ name = "Freeform"
+ id = "freeform"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/freeform
+ sort_string = "XABAG"
+
+/datum/design/aimodule/reset
+ name = "Reset"
+ id = "reset"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/reset
+ sort_string = "XAAAA"
+
+/datum/design/aimodule/purge
+ name = "Purge"
+ id = "purge"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/purge
+ sort_string = "XAAAB"
+
+// Core modules
+/datum/design/aimodule/core
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+
+/datum/design/aimodule/core/AssembleDesignName()
+ name = "AI core module design ([name])"
+
+/datum/design/aimodule/core/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI core module."
+
+/datum/design/aimodule/core/freeformcore
+ name = "Freeform"
+ id = "freeformcore"
+ build_path = /obj/item/weapon/aiModule/freeformcore
+ sort_string = "XACAA"
+
+/datum/design/aimodule/core/asimov
+ name = "Asimov"
+ id = "asimov"
+ build_path = /obj/item/weapon/aiModule/asimov
+ sort_string = "XACAB"
+
+/datum/design/aimodule/core/paladin
+ name = "P.A.L.A.D.I.N."
+ id = "paladin"
+ build_path = /obj/item/weapon/aiModule/paladin
+ sort_string = "XACAC"
+
+/datum/design/aimodule/core/tyrant
+ name = "T.Y.R.A.N.T."
+ id = "tyrant"
+ req_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 2, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/tyrant
+ sort_string = "XACAD"
+
+/datum/design/item/pda
name = "PDA design"
desc = "Cheaper than whiny non-digital assistants."
id = "pda"
- req_tech = list("engineering" = 2, "powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
+ req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
build_path = /obj/item/device/pda
+ sort_string = "VAAAA"
-// *** Cartridges
-datum/design/item/pda_cartridge
- req_tech = list("engineering" = 2, "powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
+// Cartridges
+/datum/design/item/pda_cartridge
+ req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
-datum/design/item/pda_cartridge/AssembleDesignName()
+/datum/design/item/pda_cartridge/AssembleDesignName()
..()
name = "PDA accessory ([item_name])"
-datum/design/item/pda_cartridge/cart_basic
+/datum/design/item/pda_cartridge/cart_basic
id = "cart_basic"
build_path = /obj/item/weapon/cartridge
-datum/design/item/pda_cartridge/engineering
+ sort_string = "VBAAA"
+
+/datum/design/item/pda_cartridge/engineering
id = "cart_engineering"
build_path = /obj/item/weapon/cartridge/engineering
-datum/design/item/pda_cartridge/atmos
+ sort_string = "VBAAB"
+
+/datum/design/item/pda_cartridge/atmos
id = "cart_atmos"
build_path = /obj/item/weapon/cartridge/atmos
-datum/design/item/pda_cartridge/medical
+ sort_string = "VBAAC"
+
+/datum/design/item/pda_cartridge/medical
id = "cart_medical"
build_path = /obj/item/weapon/cartridge/medical
-datum/design/item/pda_cartridge/chemistry
+ sort_string = "VBAAD"
+
+/datum/design/item/pda_cartridge/chemistry
id = "cart_chemistry"
build_path = /obj/item/weapon/cartridge/chemistry
-datum/design/item/pda_cartridge/security
+ sort_string = "VBAAE"
+
+/datum/design/item/pda_cartridge/security
id = "cart_security"
build_path = /obj/item/weapon/cartridge/security
- locked = 1
-datum/design/item/pda_cartridge/janitor
+ sort_string = "VBAAF"
+
+/datum/design/item/pda_cartridge/janitor
id = "cart_janitor"
build_path = /obj/item/weapon/cartridge/janitor
-/*
-datum/design/item/pda_cartridge/clown
- id = "cart_clown"
- build_path = /obj/item/weapon/cartridge/clown"
-datum/design/item/pda_cartridge/mime
- id = "cart_mime"
- build_path = /obj/item/weapon/cartridge/mime"
-*/
-datum/design/item/pda_cartridge/science
+ sort_string = "VBAAG"
+
+/datum/design/item/pda_cartridge/science
id = "cart_science"
build_path = /obj/item/weapon/cartridge/signal/science
-datum/design/item/pda_cartridge/quartermaster
+ sort_string = "VBAAH"
+
+/datum/design/item/pda_cartridge/quartermaster
id = "cart_quartermaster"
build_path = /obj/item/weapon/cartridge/quartermaster
- locked = 1
-datum/design/item/pda_cartridge/hop
+ sort_string = "VBAAI"
+
+/datum/design/item/pda_cartridge/hop
id = "cart_hop"
build_path = /obj/item/weapon/cartridge/hop
- locked = 1
-datum/design/item/pda_cartridge/hos
+ sort_string = "VBAAJ"
+
+/datum/design/item/pda_cartridge/hos
id = "cart_hos"
build_path = /obj/item/weapon/cartridge/hos
- locked = 1
-datum/design/item/pda_cartridge/ce
+ sort_string = "VBAAK"
+
+/datum/design/item/pda_cartridge/ce
id = "cart_ce"
build_path = /obj/item/weapon/cartridge/ce
- locked = 1
-datum/design/item/pda_cartridge/cmo
+ sort_string = "VBAAL"
+
+/datum/design/item/pda_cartridge/cmo
id = "cart_cmo"
build_path = /obj/item/weapon/cartridge/cmo
- locked = 1
-datum/design/item/pda_cartridge/rd
+ sort_string = "VBAAM"
+
+/datum/design/item/pda_cartridge/rd
id = "cart_rd"
build_path = /obj/item/weapon/cartridge/rd
- locked = 1
-datum/design/item/pda_cartridge/captain
+ sort_string = "VBAAN"
+
+/datum/design/item/pda_cartridge/captain
id = "cart_captain"
build_path = /obj/item/weapon/cartridge/captain
- locked = 1
+ sort_string = "VBAAO"
-/////////////////////////////////////////
-///////////////Misc Stuff////////////////
-/////////////////////////////////////////
-datum/design/item/borg_syndicate_module
+/*
+MECHAS BELOW
+*/
+
+/datum/design/item/mecha
+ build_type = MECHFAB
+ req_tech = list(TECH_COMBAT = 3)
+ category = "Exosuit Equipment"
+
+/datum/design/item/mecha/AssembleDesignName()
+ ..()
+ name = "Exosuit module design ([item_name])"
+
+/datum/design/item/mecha/weapon/AssembleDesignName()
+ ..()
+ name = "Exosuit weapon design ([item_name])"
+
+/datum/design/item/mecha/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a '[item_name]' exosuit module."
+
+// *** Weapon modules
+/datum/design/item/mecha/weapon/scattershot
+ id = "mech_scattershot"
+ req_tech = list(TECH_COMBAT = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
+
+/datum/design/item/mecha/weapon/laser
+ id = "mech_laser"
+ req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
+
+/datum/design/item/mecha/weapon/laser_rigged
+ desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits."
+ id = "mech_laser_rigged"
+ req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
+
+/datum/design/item/mecha/weapon/laser_heavy
+ id = "mech_laser_heavy"
+ req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
+
+/datum/design/item/mecha/weapon/ion
+ id = "mech_ion"
+ req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
+
+/datum/design/item/mecha/weapon/grenade_launcher
+ id = "mech_grenade_launcher"
+ req_tech = list(TECH_COMBAT = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
+
+/datum/design/item/mecha/weapon/clusterbang_launcher
+ desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
+ id = "clusterbang_launcher"
+ req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
+
+// *** Nonweapon modules
+/datum/design/item/mecha/wormhole_gen
+ desc = "An exosuit module that can generate small quasi-stable wormholes."
+ id = "mech_wormhole_gen"
+ req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
+
+/datum/design/item/mecha/teleporter
+ desc = "An exosuit module that allows teleportation to any position in view."
+ id = "mech_teleporter"
+ req_tech = list(TECH_BLUESPACE = 10, TECH_MAGNET = 5)
+ build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
+
+/datum/design/item/mecha/rcd
+ desc = "An exosuit-mounted rapid construction device."
+ id = "mech_rcd"
+ req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER=4, TECH_ENGINERING = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
+
+/datum/design/item/mecha/gravcatapult
+ desc = "An exosuit-mounted gravitational catapult."
+ id = "mech_gravcatapult"
+ req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
+
+/datum/design/item/mecha/repair_droid
+ desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
+ id = "mech_repair_droid"
+ req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
+
+/datum/design/item/mecha/phoron_generator
+ desc = "Exosuit-mounted phoron generator."
+ id = "mech_phoron_generator"
+ req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/generator
+
+/datum/design/item/mecha/energy_relay
+ id = "mech_energy_relay"
+ req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
+
+/datum/design/item/mecha/ccw_armor
+ desc = "Exosuit close-combat armor booster."
+ id = "mech_ccw_armor"
+ req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
+
+/datum/design/item/mecha/proj_armor
+ desc = "Exosuit projectile armor booster."
+ id = "mech_proj_armor"
+ req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINERING=3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
+
+/datum/design/item/mecha/syringe_gun
+ desc = "Exosuit-mounted syringe gun and chemical synthesizer."
+ id = "mech_syringe_gun"
+ req_tech = list(TECH_MATERIAL = 3, TECH_BIO=4, TECH_MAGNET=4, TECH_DATA=3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
+
+/datum/design/item/mecha/diamond_drill
+ desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
+ id = "mech_diamond_drill"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
+
+/datum/design/item/mecha/generator_nuclear
+ desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
+ id = "mech_generator_nuclear"
+ req_tech = list(TECH_POWER= 3, TECH_ENGINERING = 3, TECH_MATERIAL = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
+
+/datum/design/item/synthetic_flash
+ id = "sflash"
+ req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
+ build_type = MECHFAB
+ materials = list("metal" = 750, "glass" = 750)
+ build_path = /obj/item/device/flash/synthetic
+ category = "Misc"
+
+/datum/design/item/borg_syndicate_module
name = "Cyborg lethal weapons upgrade"
desc = "Allows for the construction of lethal upgrades for cyborgs."
id = "borg_syndicate_module"
build_type = MECHFAB
- req_tech = list("combat" = 4, "syndicate" = 3)
+ req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
build_path = /obj/item/borg/upgrade/syndicate
category = "Cyborg Upgrade Modules"
-datum/design/item/mesons
- name = "Optical meson scanners design"
- desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
- id = "mesons"
- req_tech = list("magnets" = 2, "engineering" = 2)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/clothing/glasses/meson
+/* Uncomment if someone makes these buildable
+/datum/design/circuit/general_alert
+ name = "general alert console"
+ id = "general_alert"
+ build_path = /obj/item/weapon/circuitboard/general_alert
-datum/design/item/binaryencrypt
- name = "Binary encryption key"
- desc = "Allows for deciphering the binary channel on-the-fly."
- id = "binaryencrypt"
- req_tech = list("syndicate" = 2)
- materials = list("$metal" = 300, "$glass" = 300)
- build_path = /obj/item/device/encryptionkey/binary
+// Removal of loyalty implants. Can't think of a way to add this to the config option.
+/datum/design/item/implant/loyalty
+ name = "loyalty"
+ id = "implant_loyal"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
+ materials = list("metal" = 7000, "glass" = 7000)
+ build_path = /obj/item/weapon/implantcase/loyalty"
-datum/design/item/chameleon
- name = "Holographic equipment kit"
- desc = "A kit of dangerous, high-tech equipment with changeable looks."
- id = "chameleon"
- req_tech = list("syndicate" = 2)
- materials = list("$metal" = 500)
- build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
+/datum/design/rust_core_control
+ name = "Circuit Design (RUST core controller)"
+ desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine."
+ id = "rust_core_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_core_control"
+
+datum/design/rust_fuel_control
+ name = "Circuit Design (RUST fuel controller)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine."
+ id = "rust_fuel_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_fuel_control"
+
+datum/design/rust_fuel_port
+ name = "Internal circuitry (RUST fuel port)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine."
+ id = "rust_fuel_port"
+ req_tech = list("engineering" = 4, "materials" = 5)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "uranium" = 3000)
+ build_path = "/obj/item/weapon/module/rust_fuel_port"
+
+datum/design/rust_fuel_compressor
+ name = "Circuit Design (RUST fuel compressor)"
+ desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine."
+ id = "rust_fuel_compressor"
+ req_tech = list("materials" = 6, "phorontech" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 1000)
+ build_path = "/obj/item/weapon/module/rust_fuel_compressor"
+
+datum/design/rust_core
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern tokamak fusion core."
+ id = "pacman"
+ req_tech = list(bluespace = 3, phorontech = 4, magnets = 5, powerstorage = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+
+datum/design/rust_injector
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern particle accelerator."
+ id = "pacman"
+ req_tech = list(powerstorage = 3, engineering = 4, phorontech = 4, materials = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "uranium" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+*/
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index b8d0fca209..9b97fecd95 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
/*
Destructive Analyzer
@@ -7,12 +5,12 @@ It is used to destroy hand-held objects and advance technological research. Cont
Note: Must be placed within 3 tiles of the R&D Console
*/
+
/obj/machinery/r_n_d/destructive_analyzer
name = "destructive analyzer"
icon_state = "d_analyzer"
- var/obj/item/weapon/loaded_item = null
- var/decon_mod = 1
- var/min_reliability = 90
+ var/obj/item/weapon/loaded_item = null
+ var/decon_mod = 0
use_power = 1
idle_power_usage = 30
@@ -32,7 +30,6 @@ Note: Must be placed within 3 tiles of the R&D Console
for(var/obj/item/weapon/stock_parts/S in src)
T += S.rating
decon_mod = T * 0.1
- min_reliability = 93 - T
/obj/machinery/r_n_d/destructive_analyzer/meteorhit()
qdel(src)
@@ -47,8 +44,12 @@ Note: Must be placed within 3 tiles of the R&D Console
icon_state = "d_analyzer"
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy right now."
+ return
+ if(loaded_item)
+ user << "There is something already loaded into \the [src]."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_destroy = null
@@ -61,32 +62,23 @@ Note: Must be placed within 3 tiles of the R&D Console
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- return
if(!linked_console)
- user << "\The [src] must be linked to an R&D console first!"
- return
- if(busy)
- user << "\The [src] is busy right now."
+ user << "\The [src] must be linked to an R&D console first."
return
if(istype(O, /obj/item) && !loaded_item)
if(isrobot(user)) //Don't put your module items in there!
return
if(!O.origin_tech)
- user << "This doesn't seem to have a tech origin!"
+ user << "This doesn't seem to have a tech origin."
return
- var/list/temp_tech = ConvertReqString2List(O.origin_tech)
- if(temp_tech.len == 0)
- user << "You cannot deconstruct this item!"
- return
- if(O.reliability < min_reliability && O.crit_fail == 0)
- usr << "Item is neither reliable enough nor broken enough to learn from."
+ if(O.origin_tech.len == 0)
+ user << "You cannot deconstruct this item."
return
busy = 1
loaded_item = O
user.drop_item()
O.loc = src
- user << "You add \the [O] to \the [src]!"
+ user << "You add \the [O] to \the [src]."
flick("d_analyzer_la", src)
spawn(10)
update_icon()
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index c35d820372..5ff3d23c74 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -1,12 +1,3 @@
-/*
-Protolathe
-
-Similar to an autolathe, you load glass and metal sheets (but not other objects) into it to be used as raw materials for the stuff
-it creates. All the menus and other manipulation commands are in the R&D console.
-
-Note: Must be placed west/left of and R&D console to function.
-
-*/
/obj/machinery/r_n_d/protolathe
name = "Protolathe"
icon_state = "protolathe"
@@ -16,16 +7,14 @@ Note: Must be placed west/left of and R&D console to function.
idle_power_usage = 30
active_power_usage = 5000
- var/max_material_storage = 100000 //All this could probably be done better with a list but meh.
- var/m_amount = 0.0
- var/g_amount = 0.0
- var/gold_amount = 0.0
- var/silver_amount = 0.0
- var/phoron_amount = 0.0
- var/uranium_amount = 0.0
- var/diamond_amount = 0.0
+ var/max_material_storage = 100000
+ var/list/materials = list("metal" = 0, "glass" = 0, "gold" = 0, "silver" = 0, "phoron" = 0, "uranium" = 0, "diamond" = 0)
+
+ var/list/datum/design/queue = list()
+ var/progress = 0
var/mat_efficiency = 1
+ var/speed = 1
/obj/machinery/r_n_d/protolathe/New()
..()
@@ -39,61 +28,76 @@ Note: Must be placed west/left of and R&D console to function.
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
RefreshParts()
+/obj/machinery/r_n_d/protolathe/process()
+ ..()
+ if(stat)
+ update_icon()
+ return
+ if(queue.len == 0)
+ busy = 0
+ update_icon()
+ return
+ var/datum/design/D = queue[1]
+ if(canBuild(D))
+ busy = 1
+ progress += speed
+ if(progress >= D.time)
+ build(D)
+ progress = 0
+ removeFromQueue(1)
+ if(linked_console)
+ linked_console.updateUsrDialog()
+ update_icon()
+ else
+ if(busy)
+ visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].")
+ busy = 0
+ update_icon()
+
/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater.
- return m_amount + g_amount + gold_amount + silver_amount + phoron_amount + uranium_amount + diamond_amount
+ var/t = 0
+ for(var/f in materials)
+ t += materials[f]
+ return t
/obj/machinery/r_n_d/protolathe/RefreshParts()
var/T = 0
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
T += G.reagents.maximum_volume
- var/datum/reagents/R = new/datum/reagents(T) //Holder for the reagents used as materials.
- reagents = R
- R.my_atom = src
- T = 0
+ create_reagents(T)
+ max_material_storage = 0
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
- T += M.rating
- max_material_storage = T * 75000
+ max_material_storage += M.rating * 75000
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
mat_efficiency = 1 - (T - 2) / 8
+ speed = T / 2
/obj/machinery/r_n_d/protolathe/dismantle()
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
reagents.trans_to_obj(I, reagents.total_volume)
- if(m_amount >= 3750)
- var/obj/item/stack/material/steel/G = new /obj/item/stack/material/steel(loc)
- G.amount = round(m_amount / G.perunit)
- if(g_amount >= 3750)
- var/obj/item/stack/material/glass/G = new /obj/item/stack/material/glass(loc)
- G.amount = round(g_amount / G.perunit)
- if(phoron_amount >= 2000)
- var/obj/item/stack/material/phoron/G = new /obj/item/stack/material/phoron(loc)
- G.amount = round(phoron_amount / G.perunit)
- if(silver_amount >= 2000)
- var/obj/item/stack/material/silver/G = new /obj/item/stack/material/silver(loc)
- G.amount = round(silver_amount / G.perunit)
- if(gold_amount >= 2000)
- var/obj/item/stack/material/gold/G = new /obj/item/stack/material/gold(loc)
- G.amount = round(gold_amount / G.perunit)
- if(uranium_amount >= 2000)
- var/obj/item/stack/material/uranium/G = new /obj/item/stack/material/uranium(loc)
- G.amount = round(uranium_amount / G.perunit)
- if(diamond_amount >= 2000)
- var/obj/item/stack/material/diamond/G = new /obj/item/stack/material/diamond(loc)
- G.amount = round(diamond_amount / G.perunit)
+ for(var/f in materials)
+ if(materials[f] >= SHEET_MATERIAL_AMOUNT)
+ var/path = getMaterialType(f)
+ if(path)
+ var/obj/item/stack/S = new f(loc)
+ S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
..()
/obj/machinery/r_n_d/protolathe/update_icon()
if(panel_open)
icon_state = "protolathe_t"
+ else if(busy)
+ icon_state = "protolathe_n"
else
icon_state = "protolathe"
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy. Please wait for completion of previous operation."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_lathe = null
@@ -108,69 +112,93 @@ Note: Must be placed west/left of and R&D console to function.
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- return
if(!linked_console)
user << "\The [src] must be linked to an R&D console first!"
return 1
- if(busy)
- user << "\The [src] is busy. Please wait for completion of previous operation."
+ if(!istype(O, /obj/item/stack/material))
+ user << "You cannot insert this item into \the [src]!"
return 1
if(stat)
return 1
- if(istype(O,/obj/item/stack/material))
- var/obj/item/stack/material/S = O
- if(TotalMaterials() + S.perunit > max_material_storage)
- user << "\The [src]'s material bin is full. Please remove material before adding more."
- return 1
- var/obj/item/stack/material/stack = O
- var/amount = round(input("How many sheets do you want to add?") as num)//No decimals
- if(!O)
- return
- if(amount < 0)//No negative numbers
- amount = 0
- if(amount == 0)
- return
- if(amount > stack.get_amount())
- amount = stack.get_amount()
- if(max_material_storage - TotalMaterials() < (amount * stack.perunit))//Can't overfill
- amount = min(stack.amount, round((max_material_storage - TotalMaterials()) / stack.perunit))
+ if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
+ user << "\The [src]'s material bin is full. Please remove material before adding more."
+ return 1
- overlays += "protolathe_[stack.name]"
- sleep(10)
- overlays -= "protolathe_[stack.name]"
-
- icon_state = "protolathe"
- busy = 1
- use_power(max(1000, (3750 * amount / 10)))
- var/stacktype = stack.type
- stack.use(amount)
- if(do_after(user, 16))
- user << "You add [amount] sheets to \the [src]."
- icon_state = "protolathe"
- switch(stacktype)
- if(/obj/item/stack/material/steel)
- m_amount += amount * 3750
- if(/obj/item/stack/material/glass)
- g_amount += amount * 3750
- if(/obj/item/stack/material/gold)
- gold_amount += amount * 2000
- if(/obj/item/stack/material/silver)
- silver_amount += amount * 2000
- if(/obj/item/stack/material/phoron)
- phoron_amount += amount * 2000
- if(/obj/item/stack/material/uranium)
- uranium_amount += amount * 2000
- if(/obj/item/stack/material/diamond)
- diamond_amount += amount * 2000
- else
- new stacktype(loc, amount)
- busy = 0
- updateUsrDialog()
+ var/obj/item/stack/material/stack = O
+ var/amount = round(input("How many sheets do you want to add?") as num)//No decimals
+ if(!O)
return
- ..()
+ if(amount <= 0)//No negative numbers
+ return
+ if(amount > stack.get_amount())
+ amount = stack.get_amount()
+ if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill
+ amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
-//This is to stop these machines being hackable via clicking.
-/obj/machinery/r_n_d/protolathe/attack_hand(mob/user as mob)
- return
\ No newline at end of file
+ var/stacktype = stack.type
+ var/t = getMaterialName(stacktype)
+ overlays += "protolathe_[t]"
+ spawn(10)
+ overlays -= "protolathe_[t]"
+
+ busy = 1
+ use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
+ if(t)
+ if(do_after(user, 16))
+ if(stack.use(amount))
+ user << "You add [amount] sheets to \the [src]."
+ materials[t] += amount * SHEET_MATERIAL_AMOUNT
+ busy = 0
+ updateUsrDialog()
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/addToQueue(var/datum/design/D)
+ queue += D
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/removeFromQueue(var/index)
+ queue.Cut(index, index + 1)
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D)
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ return 0
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ return 0
+ return 1
+
+/obj/machinery/r_n_d/protolathe/proc/getLackingMaterials(var/datum/design/D)
+ var/ret = ""
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ if(ret != "")
+ ret += ", "
+ ret += "[D.materials[M] - materials[M]] [M]"
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ if(ret != "")
+ ret += ", "
+ ret += C
+ return ret
+
+/obj/machinery/r_n_d/protolathe/proc/build(var/datum/design/D)
+ var/power = active_power_usage
+ for(var/M in D.materials)
+ power += round(D.materials[M] / 5)
+ power = max(active_power_usage, power)
+ use_power(power)
+ for(var/M in D.materials)
+ materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
+ for(var/C in D.chemicals)
+ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency)
+
+ if(D.build_path)
+ var/obj/new_item = new D.build_path(src)
+ new_item.loc = loc
+ if(mat_efficiency != 1) // No matter out of nowhere
+ if(new_item.matter && new_item.matter.len > 0)
+ for(var/i in new_item.matter)
+ new_item.matter[i] = new_item.matter[i] * mat_efficiency
diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm
index 92e2c5b28e..0f98395145 100644
--- a/code/modules/research/rd-readme.dm
+++ b/code/modules/research/rd-readme.dm
@@ -3,7 +3,7 @@ Research and Development System. (Designed specifically for the /tg/station 13 (
///////////////Overview///////////////////
This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes
-the "scientist" job is given this role) the tools necessiary to research new and better technologies. In general, the system works
+the "scientist" job is given this role) the tools necessary to research new and better technologies. In general, the system works
by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses,
you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge).
@@ -29,211 +29,4 @@ Each tech path should have at LEAST one item at every level (levels 1 - 20). Thi
researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then
level 5 or 7. Everything past that should be stuff you research.
-Below is a checklist to make sure every tree is filled. As new items get added to R&D, add them here if there is an empty slot.
-When thinking about new stuff, check here to see if there are any slots unfilled.
-
-//MATERIALS
-1 | Metal
-2 | Solid Phoron
-3 | Silver
-4 | Gold, Super Capacitor
-5 | Uranium, Nuclear Gun, SUPERPACMAN
-6 | Diamond, MRSPACMAN
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//PHORON TECH
-1 |
-2 | Solid Phoron
-3 | Pacman Generator
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//POWER TECH
-1 | Basic Capacitor, Basic Cell
-2 | High-Capacity Cell (10,000)
-3 | Super-Capacity Cell (20,000), Powersink, PACMAN
-4 | SUPERPACMAN
-5 | MRSPACMAN, Super Capacitor
-6 | Hyper-Capacity Cell (30,000)
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//BLUE SPACE
-1 |
-2 | Teleporter Console Board
-3 | Teleport Gun, Hand Tele
-4 | Teleportation Scroll
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//BIOTECH
-1 | Bruise Pack, Scalpel
-2 | PANDEMIC Board, Mass Spectrometer
-3 | AI Core, Brains (MMI)
-4 | MMI+Radio
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//MAGNETS
-1 | Basic Sensor
-2 | Comm Console Board
-3 | Adv Sensor
-4 | Adv Mass Spectrometer, Chameleon Projector
-5 | Phasic Sensor
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//PROGRAMMING
-1 | Arcade Board
-2 | Sec Camera
-3 | Cloning Machine Console Board
-4 | AI Core, Intellicard
-5 | Pico-Manipulator, Ultra-Micro-Laser
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//SYNDICATE
-1 | Sleepypen
-2 | TYRANT Module, Emag
-3 | Cloaking Device, Power Sink
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//COMBAT
-1 | Flashbang, Mousetrap, Nettle
-2 | Stun Baton
-3 | Power Axe, Death Nettle, Nuclear Gun
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-
-
-
-
-
-
*/
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 4f0178ed3d..c82c00e4a0 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -43,7 +43,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/screen = 1.0 //Which screen is currently showing.
var/id = 0 //ID of the computer (for server restrictions).
var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console
- var/errored = 0 //Errored during item construction.
req_access = list(access_research) //Data and setting manipulation requires scientist access.
@@ -58,43 +57,43 @@ won't update every console in existence) but it's more of a hassle to do. Also,
qdel(check_tech)
check_tech = null
break
-
return return_name
/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
+ var/return_name = ID
+ switch(return_name)
+ if("metal")
+ return_name = "Metal"
+ if("glass")
+ return_name = "Glass"
+ if("gold")
+ return_name = "Gold"
+ if("silver")
+ return_name = "Silver"
+ if("phoron")
+ return_name = "Solid Phoron"
+ if("uranium")
+ return_name = "Uranium"
+ if("diamond")
+ return_name = "Diamond"
+ return return_name
+
+/obj/machinery/computer/rdconsole/proc/CallReagentName(var/ID)
+ var/return_name = ID
var/datum/reagent/temp_reagent
- var/return_name = null
- if (copytext(ID, 1, 2) == "$")
- return_name = copytext(ID, 2)
- switch(return_name)
- if(DEFAULT_WALL_MATERIAL)
- return_name = "Steel"
- if("glass")
- return_name = "Glass"
- if("gold")
- return_name = "Gold"
- if("silver")
- return_name = "Silver"
- if("phoron")
- return_name = "Solid Phoron"
- if("uranium")
- return_name = "Uranium"
- if("diamond")
- return_name = "Diamond"
- else
- for(var/R in typesof(/datum/reagent) - /datum/reagent)
+ for(var/R in (typesof(/datum/reagent) - /datum/reagent))
+ temp_reagent = null
+ temp_reagent = new R()
+ if(temp_reagent.id == ID)
+ return_name = temp_reagent.name
+ qdel(temp_reagent)
temp_reagent = null
- temp_reagent = new R()
- if(temp_reagent.id == ID)
- return_name = temp_reagent.name
- qdel(temp_reagent)
- temp_reagent = null
- break
+ break
return return_name
/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
- for(var/obj/machinery/r_n_d/D in oview(3,src))
- if(D.linked_console != null || D.disabled || D.panel_open)
+ for(var/obj/machinery/r_n_d/D in range(3, src))
+ if(D.linked_console != null || D.panel_open)
continue
if(istype(D, /obj/machinery/r_n_d/destructive_analyzer))
if(linked_destroy == null)
@@ -110,8 +109,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
D.linked_console = src
return
-//Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work --NEO
-/obj/machinery/computer/rdconsole/proc/griefProtection()
+/obj/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
for(var/datum/tech/T in files.known_tech)
C.files.AddTech2Known(T)
@@ -130,11 +128,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/initialize()
SyncRDevices()
-/* Instead of calling this every tick, it is only being called when needed
-/obj/machinery/computer/rdconsole/process()
- griefProtection()
-*/
-
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
//Loading a disk into it.
if(istype(D, /obj/item/weapon/disk))
@@ -142,18 +135,20 @@ won't update every console in existence) but it's more of a hassle to do. Also,
user << "A disk is already loaded into the machine."
return
- if(istype(D, /obj/item/weapon/disk/tech_disk)) t_disk = D
- else if (istype(D, /obj/item/weapon/disk/design_disk)) d_disk = D
+ if(istype(D, /obj/item/weapon/disk/tech_disk))
+ t_disk = D
+ else if (istype(D, /obj/item/weapon/disk/design_disk))
+ d_disk = D
else
- user << "\red Machine cannot accept disks in that format."
+ user << "Machine cannot accept disks in that format."
return
user.drop_item()
D.loc = src
- user << "\blue You add the disk to the machine!"
+ user << "You add \the [D] to the machine."
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
- user << "\blue You you disable the security protocols"
+ user << "You you disable the security protocols."
else
//The construction/deconstruction of the console code.
..()
@@ -170,17 +165,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
usr.set_machine(src)
if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code.
var/temp_screen = text2num(href_list["menu"])
- if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || src.allowed(usr) || emagged) //Unless you are making something, you need access.
+ if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || allowed(usr) || emagged) //Unless you are making something, you need access.
screen = temp_screen
else
usr << "Unauthorized Access."
- else if(href_list["reset"])
- warning("RnD console has errored during protolathe operation. Resetting.")
- errored = 0
- screen = 1.0
- updateUsrDialog()
-
else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk.
screen = 0.0
spawn(50)
@@ -193,7 +182,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
t_disk.stored = null
else if(href_list["eject_tech"]) //Eject the technology disk.
- t_disk:loc = src.loc
+ t_disk.loc = loc
t_disk = null
screen = 1.0
@@ -216,7 +205,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
d_disk.blueprint = null
else if(href_list["eject_design"]) //Eject the design disk.
- d_disk:loc = src.loc
+ d_disk.loc = loc
d_disk = null
screen = 1.0
@@ -230,7 +219,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "\red The destructive analyzer is busy at the moment."
+ usr << "The destructive analyzer is busy at the moment."
else if(linked_destroy.loaded_item)
linked_destroy.loaded_item.loc = linked_destroy.loc
@@ -241,9 +230,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "\red The destructive analyzer is busy at the moment."
+ usr << "The destructive analyzer is busy at the moment."
else
- if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy) return
+ if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy)
+ return
linked_destroy.busy = 1
screen = 0.1
updateUsrDialog()
@@ -251,26 +241,24 @@ won't update every console in existence) but it's more of a hassle to do. Also,
spawn(24)
if(linked_destroy)
linked_destroy.busy = 0
- if(!linked_destroy.hacked)
- if(!linked_destroy.loaded_item)
- usr <<"\red The destructive analyzer appears to be empty."
- screen = 1.0
- return
- if(linked_destroy.loaded_item.reliability >= linked_destroy.min_reliability)
- var/list/temp_tech = ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
- for(var/T in temp_tech)
- files.UpdateTech(T, temp_tech[T])
- if(linked_destroy.loaded_item.reliability < 100 && linked_destroy.loaded_item.crit_fail)
- files.UpdateDesign(linked_destroy.loaded_item.type)
- if(linked_lathe && linked_destroy.loaded_item.matter) //Also sends salvaged materials to a linked protolathe, if any.
- linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter[DEFAULT_WALL_MATERIAL]*linked_destroy.decon_mod))
- linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter["glass"]*linked_destroy.decon_mod))
- linked_destroy.loaded_item = null
+ if(!linked_destroy.loaded_item)
+ usr <<"The destructive analyzer appears to be empty."
+ screen = 1.0
+ return
+
+ for(var/T in linked_destroy.loaded_item.origin_tech)
+ files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
+ if(linked_lathe && linked_destroy.loaded_item.matter) // Also sends salvaged materials to a linked protolathe, if any.
+ for(var/t in linked_destroy.loaded_item.matter)
+ if(t in linked_lathe.materials)
+ linked_lathe.materials[t] += min(linked_lathe.max_material_storage - linked_lathe.TotalMaterials(), linked_destroy.loaded_item.matter[t] * linked_destroy.decon_mod)
+
+ linked_destroy.loaded_item = null
for(var/obj/I in linked_destroy.contents)
for(var/mob/M in I.contents)
- M.death()
+ M.death()
if(istype(I,/obj/item/stack/material))//Only deconsturcts one sheet at a time instead of the entire stack
- var/obj/item/stack/material/S = I
+ var/obj/item/stack/material/S = I
if(S.get_amount() > 1)
S.use(1)
linked_destroy.loaded_item = S
@@ -281,12 +269,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!(I in linked_destroy.component_parts))
qdel(I)
linked_destroy.icon_state = "d_analyzer"
+
use_power(linked_destroy.active_power_usage)
screen = 1.0
updateUsrDialog()
else if(href_list["lock"]) //Lock the console from use by anyone without tox access.
- if(src.allowed(usr))
+ if(allowed(usr))
screen = text2num(href_list["lock"])
else
usr << "Unauthorized Access."
@@ -294,15 +283,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
screen = 0.0
if(!sync)
- usr << "\red You must connect to the network first!"
+ usr << "You must connect to the network first."
else
griefProtection() //Putting this here because I dont trust the sync process
spawn(30)
if(src)
for(var/obj/machinery/r_n_d/server/S in machines)
var/server_processed = 0
- if(S.disabled)
- continue
if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
for(var/datum/tech/T in files.known_tech)
S.files.AddTech2Known(T)
@@ -310,7 +297,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
S.files.AddDesign2Known(D)
S.files.RefreshResearch()
server_processed = 1
- if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked)
+ if((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom))
for(var/datum/tech/T in S.files.known_tech)
files.AddTech2Known(T)
for(var/datum/design/D in S.files.known_designs)
@@ -333,57 +320,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
being_built = D
break
if(being_built)
- var/power = linked_lathe.active_power_usage
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] / 5)
- power = max(linked_lathe.active_power_usage, power)
- screen = 0.3
- linked_lathe.busy = 1
- flick("protolathe_n",linked_lathe)
- var/key = usr.key //so we don't lose the info during the spawn delay
- spawn(16)
- use_power(power)
- spawn(16)
- errored = 1
- for(var/M in being_built.materials)
- switch(M)
- if("$metal")
- linked_lathe.m_amount = max(0, (linked_lathe.m_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$glass")
- linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$gold")
- linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$silver")
- linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$phoron")
- linked_lathe.phoron_amount = max(0, (linked_lathe.phoron_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$uranium")
- linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$diamond")
- linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- else
- linked_lathe.reagents.remove_reagent(M, being_built.materials[M]*linked_lathe.mat_efficiency)
+ linked_lathe.addToQueue(being_built)
- if(being_built.build_path)
- var/obj/new_item = new being_built.build_path(src)
- if( new_item.type == /obj/item/weapon/storage/backpack/holding )
- new_item.investigate_log("built by [key]","singulo")
- new_item.reliability = being_built.reliability
- if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0)
- /*if(being_built.locked)
- var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc)
- new_item.loc = L
- L.name += " ([new_item.name])"*/
- else
- new_item.loc = linked_lathe.loc
- if(linked_lathe.mat_efficiency != 1) // No matter out of nowhere
- if(new_item.matter && new_item.matter.len > 0)
- for(var/i in new_item.matter)
- new_item.matter[i] = new_item.matter[i] * linked_lathe.mat_efficiency
- linked_lathe.busy = 0
- screen = 3.1
- errored = 0
- updateUsrDialog()
+ screen = 3.1
+ updateUsrDialog()
else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something.
if(linked_imprinter)
@@ -393,36 +333,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
being_built = D
break
if(being_built)
- var/power = linked_imprinter.active_power_usage
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] / 5)
- power = max(linked_imprinter.active_power_usage, power)
- screen = 0.4
- linked_imprinter.busy = 1
- flick("circuit_imprinter_ani",linked_imprinter)
- spawn(16)
- errored = 1
- use_power(power)
- for(var/M in being_built.materials)
- switch(M)
- if("$glass")
- linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$gold")
- linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$diamond")
- linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$uranium")
- linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- else
- linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]*linked_imprinter.mat_efficiency)
- var/obj/new_item = new being_built.build_path(src)
- new_item.reliability = being_built.reliability
- if(linked_imprinter.hacked) being_built.reliability = max((reliability / 2), 0)
- new_item.loc = linked_imprinter.loc
- linked_imprinter.busy = 0
- screen = 4.1
- errored = 0
- updateUsrDialog()
+ linked_imprinter.addToQueue(being_built)
+ screen = 4.1
+ updateUsrDialog()
else if(href_list["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it)
linked_imprinter.reagents.del_reagent(href_list["dispose"])
@@ -430,12 +343,18 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["disposeallI"] && linked_imprinter) //Causes the circuit imprinter to dispose of all it's reagents.
linked_imprinter.reagents.clear_reagents()
+ else if(href_list["removeI"] && linked_lathe)
+ linked_imprinter.removeFromQueue(text2num(href_list["removeI"]))
+
else if(href_list["disposeP"] && linked_lathe) //Causes the protolathe to dispose of a single reagent (all of it)
linked_lathe.reagents.del_reagent(href_list["dispose"])
else if(href_list["disposeallP"] && linked_lathe) //Causes the protolathe to dispose of all it's reagents.
linked_lathe.reagents.clear_reagents()
+ else if(href_list["removeP"] && linked_lathe)
+ linked_lathe.removeFromQueue(text2num(href_list["removeP"]))
+
else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material
var/desired_num_sheets = text2num(href_list["amount"])
var/res_amount, type
@@ -462,9 +381,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(ispath(type) && hasvar(linked_lathe, res_amount))
var/obj/item/stack/material/sheet = new type(linked_lathe.loc)
var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit)
- if(available_num_sheets>0)
+ if(available_num_sheets > 0)
sheet.amount = min(available_num_sheets, desired_num_sheets)
- linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount]-sheet.amount * sheet.perunit))
+ linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount] - sheet.amount * sheet.perunit))
else
qdel(sheet)
else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
@@ -488,13 +407,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/available_num_sheets = round(linked_imprinter.vars[res_amount]/sheet.perunit)
if(available_num_sheets>0)
sheet.amount = min(available_num_sheets, desired_num_sheets)
- linked_imprinter.vars[res_amount] = max(0, (linked_imprinter.vars[res_amount]-sheet.amount * sheet.perunit))
+ linked_imprinter.vars[res_amount] = max(0, (linked_imprinter.vars[res_amount] - sheet.amount * sheet.perunit))
else
qdel(sheet)
else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with.
screen = 0.0
- spawn(20)
+ spawn(10)
SyncRDevices()
screen = 1.7
updateUsrDialog()
@@ -548,6 +467,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/dat
dat += "
"
for(var/datum/tech/T in files.known_tech)
+ if(T.level < 1)
+ continue
dat += "- "
dat += "[T.name]"
dat += "
"
@@ -587,17 +508,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(linked_imprinter == null)
screen = 4.0
- if(errored)
- dat += "An error has occured when constructing prototype. Try refreshing the console."
- dat += "
If problem persists submit bug report stating which item you tried to build."
- dat += "
RESET CONSOLE
"
-
switch(screen)
//////////////////////R&D CONSOLE SCREENS//////////////////
- if(0.0) dat += "Updating Database...."
+ if(0.0)
+ dat += "Updating Database..."
- if(0.1) dat += "Processing and Updating Database..."
+ if(0.1)
+ dat += "Processing and Updating Database..."
if(0.2)
dat += "SYSTEM LOCKED
"
@@ -676,11 +594,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Load Design to Disk || "
else
dat += "Name: [d_disk.blueprint.name]
"
- dat += "Level: [between(0, (d_disk.blueprint.reliability + rand(-15,15)), 100)]
"
switch(d_disk.blueprint.build_type)
if(IMPRINTER) dat += "Lathe Type: Circuit Imprinter
"
if(PROTOLATHE) dat += "Lathe Type: Proto-lathe
"
- if(AUTOLATHE) dat += "Lathe Type: Auto-lathe
"
dat += "Required Materials:
"
for(var/M in d_disk.blueprint.materials)
if(copytext(M, 1, 2) == "$") dat += "* [copytext(M, 2)] x [d_disk.blueprint.materials[M]]
"
@@ -751,9 +667,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Name: [linked_destroy.loaded_item.name]
"
dat += "Origin Tech:"
dat += ""
- var/list/temp_tech = ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
- for(var/T in temp_tech)
- dat += "- [CallTechName(T)] [temp_tech[T]]"
+ for(var/T in linked_destroy.loaded_item.origin_tech)
+ dat += "
- [CallTechName(T)] [linked_destroy.loaded_item.origin_tech[T]]"
for(var/datum/tech/F in files.known_tech)
if(F.name == CallTechName(T))
dat += " (Current: [F.level])"
@@ -769,6 +684,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(3.1)
dat += "Main Menu || "
+ dat += "View Queue || "
dat += "Material Storage || "
dat += "Chemical Storage
"
dat += "Protolathe Menu:
"
@@ -779,35 +695,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!D.build_path || !(D.build_type & PROTOLATHE))
continue
var/temp_dat
- var/check_materials = 1
for(var/M in D.materials)
- temp_dat += ", [D.materials[M]*linked_lathe.mat_efficiency] [CallMaterialName(M)]"
- if(copytext(M, 1, 2) == "$")
- switch(M)
- if("$glass")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.g_amount) check_materials = 0
- if("$metal")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.m_amount) check_materials = 0
- if("$gold")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.gold_amount) check_materials = 0
- if("$silver")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.silver_amount) check_materials = 0
- if("$phoron")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.phoron_amount) check_materials = 0
- if("$uranium")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.uranium_amount) check_materials = 0
- if("$diamond")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.diamond_amount) check_materials = 0
- else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]*linked_lathe.mat_efficiency))
- check_materials = 0
+ temp_dat += ", [D.materials[M]] [CallMaterialName(M)]"
+ for(var/T in D.chemicals)
+ temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
if(temp_dat)
- temp_dat = " \[[copytext(temp_dat,3)]\]"
- if(check_materials)
+ temp_dat = " \[[copytext(temp_dat, 3)]\]"
+ if(linked_lathe.canBuild(D))
dat += " - [D.name][temp_dat]"
else
dat += "
- [D.name][temp_dat]"
- if(D.reliability < 100)
- dat += " (Reliability: [D.reliability])"
dat += "
"
if(3.2) //Protolathe Material Storage Sub-menu
@@ -815,33 +712,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Protolathe Menu
"
dat += "Material Storage
"
dat += ""
- for(var/M in list(DEFAULT_WALL_MATERIAL, "glass", "gold", "silver", "phoron", "uranium", "diamond"))
- var/amount
- var/sheetsize = 2000
- switch(M)
- if(DEFAULT_WALL_MATERIAL)
- amount = linked_lathe.m_amount
- sheetsize = 3750
- if("glass")
- amount = linked_lathe.g_amount
- sheetsize = 3750
- if("gold")
- amount = linked_lathe.gold_amount
- if("silver")
- amount = linked_lathe.silver_amount
- if("phoron")
- amount = linked_lathe.phoron_amount
- if("uranium")
- amount = linked_lathe.uranium_amount
- if("diamond")
- amount = linked_lathe.diamond_amount
- else
- continue
+ for(var/M in linked_lathe.materials)
+ var/amount = linked_lathe.materials[M]
dat += "- [capitalize(M)]: [amount] cm3"
- if(amount >= sheetsize)
+ if(amount >= SHEET_MATERIAL_AMOUNT)
dat += " || Eject "
- for (var/C in list(1,3,5,10,15,20,25,30,40))
- if(amount < C * sheetsize)
+ for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
+ if(amount < C * SHEET_MATERIAL_AMOUNT)
break
dat += "[C > 1 ? ", " : ""][C] "
@@ -858,6 +735,24 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "(Purge)
"
dat += "Disposal All Chemicals in Storage
"
+ if(3.4) // Protolathe queue
+ dat += "Main Menu || "
+ dat += "Protolathe Menu
"
+ dat += "Queue
"
+ if(!linked_lathe.queue.len)
+ dat += "Empty"
+ else
+ var/tmp = 1
+ for(var/datum/design/D in linked_lathe.queue)
+ if(tmp == 1)
+ if(linked_lathe.busy)
+ dat += "1: [D.name]
"
+ else
+ dat += "1: [D.name] (Awaiting materials) (Remove)
"
+ else
+ dat += "[tmp]: [D.name] (Remove)
"
+ ++tmp
+
///////////////////CIRCUIT IMPRINTER SCREENS////////////////////
if(4.0)
dat += "Main Menu
"
@@ -865,6 +760,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(4.1)
dat += "Main Menu || "
+ dat += "View Queue || "
dat += "Material Storage || "
dat += "Chemical Storage
"
dat += "Circuit Imprinter Menu:
"
@@ -875,29 +771,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!D.build_path || !(D.build_type & IMPRINTER))
continue
var/temp_dat
- var/check_materials = 1
for(var/M in D.materials)
temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]"
- if(copytext(M, 1, 2) == "$")
- switch(M)
- if("$glass")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.g_amount) check_materials = 0
- if("$gold")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.gold_amount) check_materials = 0
- if("$diamond")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.diamond_amount) check_materials = 0
- if("$uranium")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.uranium_amount) check_materials = 0
- else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]*linked_imprinter.mat_efficiency))
- check_materials = 0
+ for(var/T in D.chemicals)
+ temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
if(temp_dat)
temp_dat = " \[[copytext(temp_dat,3)]\]"
- if (check_materials)
+ if(linked_imprinter.canBuild(D))
dat += " - [D.name][temp_dat]"
else
dat += "
- [D.name][temp_dat]"
- if(D.reliability < 100)
- dat += " (Reliability: [D.reliability])"
dat += "
"
if(4.2)
@@ -914,24 +797,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Circuit Imprinter Menu
"
dat += "Material Storage
"
dat += ""
- for(var/M in list("glass", "gold", "diamond", "uranium"))
- var/amount
- var/sheetsize = 2000
- switch(M)
- if("glass")
- amount = linked_imprinter.g_amount
- sheetsize = 3750
- if("gold")
- amount = linked_imprinter.gold_amount
- if("diamond")
- amount = linked_imprinter.diamond_amount
- if("uranium")
- amount = linked_imprinter.uranium_amount
+ for(var/M in linked_imprinter.materials)
+ var/amount = linked_imprinter.materials[M]
dat += "- [capitalize(M)]: [amount] cm3"
- if(amount >= sheetsize)
+ if(amount >= SHEET_MATERIAL_AMOUNT)
dat += " || Eject: "
- for (var/C in list(1,3,5,10,15,20,25,30,40))
- if(amount < C * sheetsize)
+ for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
+ if(amount < C * SHEET_MATERIAL_AMOUNT)
break
dat += "[C > 1 ? ", " : ""][C] "
@@ -939,6 +811,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += ""
dat += "
"
+ if(4.4)
+ dat += "Main Menu || "
+ dat += "Circuit Imprinter Menu
"
+ dat += "Queue
"
+ if(linked_imprinter.queue.len == 0)
+ dat += "Empty"
+ else
+ var/tmp = 1
+ for(var/datum/design/D in linked_imprinter.queue)
+ if(tmp == 1)
+ dat += "1: [D.name]
"
+ else
+ dat += "[tmp]: [D.name] (Remove)
"
+ ++tmp
+
///////////////////Research Information Browser////////////////////
if(5.0)
dat += "Main Menu || "
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 4f0b81e531..3f73929aad 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -2,7 +2,6 @@
//All devices that link into the R&D console fall into thise type for easy identification and some shared procs.
-
/obj/machinery/r_n_d
name = "R&D Device"
icon = 'icons/obj/machines/research.dmi'
@@ -10,83 +9,42 @@
anchored = 1
use_power = 1
var/busy = 0
- var/hacked = 0
- var/disabled = 0
- var/shocked = 0
- var/list/wires = list()
- var/hack_wire
- var/disable_wire
- var/shock_wire
var/obj/machinery/computer/rdconsole/linked_console
-/obj/machinery/r_n_d/New()
- ..()
- wires["Red"] = 0
- wires["Blue"] = 0
- wires["Green"] = 0
- wires["Yellow"] = 0
- wires["Black"] = 0
- wires["White"] = 0
- var/list/w = list("Red","Blue","Green","Yellow","Black","White")
- src.hack_wire = pick(w)
- w -= src.hack_wire
- src.shock_wire = pick(w)
- w -= src.shock_wire
- src.disable_wire = pick(w)
- w -= src.disable_wire
-
/obj/machinery/r_n_d/attack_hand(mob/user as mob)
- if (shocked)
- shock(user,50)
- if(panel_open)
- var/dat as text
- dat += "[src.name] Wires:
"
- for(var/wire in src.wires)
- dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
")
-
- dat += text("The red light is [src.disabled ? "off" : "on"].
")
- dat += text("The green light is [src.shocked ? "off" : "on"].
")
- dat += text("The blue light is [src.hacked ? "off" : "on"].
")
- user << browse("[src.name] Hacking[dat]","window=hack_win")
return
+/obj/machinery/r_n_d/proc/getMaterialType(var/name)
+ switch(name)
+ if("metal")
+ return /obj/item/stack/material/steel
+ if("glass")
+ return /obj/item/stack/material/glass
+ if("gold")
+ return /obj/item/stack/material/gold
+ if("silver")
+ return /obj/item/stack/material/silver
+ if("phoron")
+ return /obj/item/stack/material/phoron
+ if("uranium")
+ return /obj/item/stack/material/uranium
+ if("diamond")
+ return /obj/item/stack/material/diamond
+ return null
-/obj/machinery/r_n_d/Topic(href, href_list)
- if(..())
- return
- usr.set_machine(src)
- src.add_fingerprint(usr)
- if(href_list["pulse"])
- var/temp_wire = href_list["wire"]
- if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
- usr << "You need a multitool!"
- else
- if(src.wires[temp_wire])
- usr << "You can't pulse a cut wire."
- else
- if(src.hack_wire == href_list["wire"])
- src.hacked = !src.hacked
- spawn(100) src.hacked = !src.hacked
- if(src.disable_wire == href_list["wire"])
- src.disabled = !src.disabled
- src.shock(usr,50)
- spawn(100) src.disabled = !src.disabled
- if(src.shock_wire == href_list["wire"])
- src.shocked = !src.shocked
- src.shock(usr,50)
- spawn(100) src.shocked = !src.shocked
- if(href_list["cut"])
- if (!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters))
- usr << "You need wirecutters!"
- else
- var/temp_wire = href_list["wire"]
- wires[temp_wire] = !wires[temp_wire]
- if(src.hack_wire == temp_wire)
- src.hacked = !src.hacked
- if(src.disable_wire == temp_wire)
- src.disabled = !src.disabled
- src.shock(usr,50)
- if(src.shock_wire == temp_wire)
- src.shocked = !src.shocked
- src.shock(usr,50)
- src.updateUsrDialog()
+/obj/machinery/r_n_d/proc/getMaterialName(var/type)
+ switch(type)
+ if(/obj/item/stack/material/steel)
+ return "metal"
+ if(/obj/item/stack/material/glass)
+ return "glass"
+ if(/obj/item/stack/material/gold)
+ return "gold"
+ if(/obj/item/stack/material/silver)
+ return "silver"
+ if(/obj/item/stack/material/phoron)
+ return "phoron"
+ if(/obj/item/stack/material/uranium)
+ return "uranium"
+ if(/obj/item/stack/material/diamond)
+ return "diamond"
\ No newline at end of file
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index a397728b73..702b4d882f 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -45,16 +45,13 @@ research holder datum.
***************************************************************/
/datum/research //Holder for all the existing, archived, and known tech. Individual to console.
-
- //Datum/tech go here.
- var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events).
- var/list/known_tech = list() //List of locally known tech.
- var/list/possible_designs = list() //List of all designs (at base reliability).
- var/list/known_designs = list() //List of available designs (at base reliability).
+ var/list/known_tech = list() //List of locally known tech. Datum/tech go here.
+ var/list/possible_designs = list() //List of all designs.
+ var/list/known_designs = list() //List of available designs.
/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated.
for(var/T in typesof(/datum/tech) - /datum/tech)
- possible_tech += new T(src)
+ known_tech += new T(src)
for(var/D in typesof(/datum/design) - /datum/design)
possible_designs += new D(src)
RefreshResearch()
@@ -63,59 +60,26 @@ research holder datum.
/datum/research/techonly/New()
for(var/T in typesof(/datum/tech) - /datum/tech)
- possible_tech += new T(src)
+ known_tech += new T(src)
RefreshResearch()
-
-//Checks to see if tech has all the required pre-reqs.
-//Input: datum/tech; Output: 0/1 (false/true)
-/datum/research/proc/TechHasReqs(var/datum/tech/T)
- if(T.req_tech.len == 0)
- return 1
- var/matches = 0
- for(var/req in T.req_tech)
- for(var/datum/tech/known in known_tech)
- if((req == known.id) && (known.level >= T.req_tech[req]))
- matches++
- break
- if(matches == T.req_tech.len)
- return 1
- else
- return 0
-
//Checks to see if design has all the required pre-reqs.
//Input: datum/design; Output: 0/1 (false/true)
/datum/research/proc/DesignHasReqs(var/datum/design/D)
if(D.req_tech.len == 0)
return 1
- var/matches = 0
+
var/list/k_tech = list()
+
for(var/datum/tech/known in known_tech)
k_tech[known.id] = known.level
+
for(var/req in D.req_tech)
- if(!isnull(k_tech[req]) && k_tech[req] >= D.req_tech[req])
- matches++
- if(matches == D.req_tech.len)
- return 1
- else
- return 0
-/*
-//Checks to see if design has all the required pre-reqs.
-//Input: datum/design; Output: 0/1 (false/true)
-/datum/research/proc/DesignHasReqs(var/datum/design/D)
- if(D.req_tech.len == 0)
- return 1
- var/matches = 0
- for(var/req in D.req_tech)
- for(var/datum/tech/known in known_tech)
- if((req == known.id) && (known.level >= D.req_tech[req]))
- matches++
- break
- if(matches == D.req_tech.len)
- return 1
- else
- return 0
-*/
+ if(isnull(k_tech[req]) || k_tech[req] < D.req_tech[req])
+ return 0
+
+ return 1
+
//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed.
//Input: datum/tech; Output: Null
/datum/research/proc/AddTech2Known(var/datum/tech/T)
@@ -124,143 +88,107 @@ research holder datum.
if(T.level > known.level)
known.level = T.level
return
- known_tech += T
return
/datum/research/proc/AddDesign2Known(var/datum/design/D)
- for(var/datum/design/known in known_designs)
- if(D.id == known.id)
- if(D.reliability_mod > known.reliability_mod)
- known.reliability_mod = D.reliability_mod
+ if(!known_designs.len) // Special case
+ known_designs.Add(D)
+ return
+ for(var/i = 1 to known_designs.len)
+ var/datum/design/A = known_designs[i]
+ if(A.id == D.id) // We are guaranteed to reach this if the ids are the same, because sort_string will also be the same
return
- known_designs += D
+ if(A.sort_string > D.sort_string)
+ known_designs.Insert(i, D)
+ return
+ known_designs.Add(D)
return
-//Refreshes known_tech and known_designs list. Then updates the reliability vars of the designs in the known_designs list.
+//Refreshes known_tech and known_designs list
//Input/Output: n/a
/datum/research/proc/RefreshResearch()
- for(var/datum/tech/PT in possible_tech)
- if(TechHasReqs(PT))
- AddTech2Known(PT)
for(var/datum/design/PD in possible_designs)
if(DesignHasReqs(PD))
AddDesign2Known(PD)
for(var/datum/tech/T in known_tech)
- T = between(1,T.level,20)
- for(var/datum/design/D in known_designs)
- D.CalcReliability(known_tech)
+ T = between(0, T.level, 20)
return
//Refreshes the levels of a given tech.
//Input: Tech's ID and Level; Output: null
/datum/research/proc/UpdateTech(var/ID, var/level)
for(var/datum/tech/KT in known_tech)
- if(KT.id == ID)
- if(KT.level <= level) KT.level = max((KT.level + 1), (level - 1))
+ if(KT.id == ID && KT.level <= level)
+ KT.level = max(KT.level + 1, level - 1)
return
-/datum/research/proc/UpdateDesign(var/path)
- for(var/datum/design/KD in known_designs)
- if(KD.build_path == path)
- KD.reliability_mod += rand(1,2)
- break
- return
-
-
-
-
/***************************************************************
** Technology Datums **
** Includes all the various technoliges and what they make. **
***************************************************************/
-datum/tech //Datum of individual technologies.
+/datum/tech //Datum of individual technologies.
var/name = "name" //Name of the technology.
var/desc = "description" //General description of what it does and what it makes.
var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols.
var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech.
- var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = #
-
-//Trunk Technologies (don't require any other techs and you start knowning them).
-
-datum/tech/materials
+/datum/tech/materials
name = "Materials Research"
desc = "Development of new and improved materials."
- id = "materials"
+ id = TECH_MATERIAL
-datum/tech/engineering
+/datum/tech/engineering
name = "Engineering Research"
desc = "Development of new and improved engineering parts."
- id = "engineering"
+ id = TECH_ENGINERING
-datum/tech/phorontech
+/datum/tech/phorontech
name = "Phoron Research"
desc = "Research into the mysterious substance colloqually known as 'phoron'."
- id = "phorontech"
+ id = TECH_PHORON
-datum/tech/powerstorage
+/datum/tech/powerstorage
name = "Power Manipulation Technology"
desc = "The various technologies behind the storage and generation of electicity."
- id = "powerstorage"
+ id = TECH_POWER
-datum/tech/bluespace
+/datum/tech/bluespace
name = "'Blue-space' Research"
desc = "Research into the sub-reality known as 'blue-space'"
- id = "bluespace"
+ id = TECH_BLUESPACE
-datum/tech/biotech
+/datum/tech/biotech
name = "Biological Technology"
desc = "Research into the deeper mysteries of life and organic substances."
- id = "biotech"
+ id = TECH_BIO
-datum/tech/combat
+/datum/tech/combat
name = "Combat Systems Research"
desc = "The development of offensive and defensive systems."
- id = "combat"
+ id = TECH_COMBAT
-datum/tech/magnets
+/datum/tech/magnets
name = "Electromagnetic Spectrum Research"
desc = "Research into the electromagnetic spectrum. No clue how they actually work, though."
- id = "magnets"
+ id = TECH_MAGNET
-datum/tech/programming
+/datum/tech/programming
name = "Data Theory Research"
desc = "The development of new computer and artificial intelligence and data storage systems."
- id = "programming"
+ id = TECH_DATA
-datum/tech/syndicate
+/datum/tech/syndicate
name = "Illegal Technologies Research"
desc = "The study of technologies that violate standard Nanotrasen regulations."
- id = "syndicate"
+ id = TECH_ILLEGAL
+ level = 0
-/*
-datum/tech/arcane
+/datum/tech/arcane
name = "Arcane Research"
desc = "Research into the occult and arcane field for use in practical science"
- id = "arcane"
- level = 0 //It didn't become "secret" as advertised.
-
-//Branch Techs
-datum/tech/explosives
- name = "Explosives Research"
- desc = "The creation and application of explosive materials."
- id = "explosives"
- req_tech = list("materials" = 3)
-
-datum/tech/generators
- name = "Power Generation Technology"
- desc = "Research into more powerful and more reliable sources."
- id = "generators"
- req_tech = list("powerstorage" = 2)
-
-datum/tech/robotics
- name = "Robotics Technology"
- desc = "The development of advanced automated, autonomous machines."
- id = "robotics"
- req_tech = list("materials" = 3, "programming" = 3)
-*/
-
+ id = TECH_ARCANE
+ level = 0
/obj/item/weapon/disk/tech_disk
name = "technology disk"
@@ -273,8 +201,8 @@ datum/tech/robotics
var/datum/tech/stored
/obj/item/weapon/disk/tech_disk/New()
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
+ pixel_x = rand(-5.0, 5)
+ pixel_y = rand(-5.0, 5)
/obj/item/weapon/disk/design_disk
name = "component design disk"
@@ -283,9 +211,9 @@ datum/tech/robotics
icon_state = "datadisk2"
item_state = "card-id"
w_class = 2.0
- matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10)
+ matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10)
var/datum/design/blueprint
/obj/item/weapon/disk/design_disk/New()
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
+ pixel_x = rand(-5.0, 5)
+ pixel_y = rand(-5.0, 5)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index d57c995755..cca8f65b16 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -4,7 +4,7 @@
icon_state = "server"
var/datum/research/files
var/health = 100
- var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
+ var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
var/list/id_with_download = list() //List of R&D consoles with download from server access.
var/id_with_upload_string = "" //String versions for easy editing in map editor.
var/id_with_download_string = ""
@@ -22,7 +22,7 @@
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src)
RefreshParts()
- src.initialize(); //Agouri
+ initialize();
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
@@ -35,7 +35,8 @@
idle_power_usage /= max(1, tot_rating)
/obj/machinery/r_n_d/server/initialize()
- if(!files) files = new /datum/research(src)
+ if(!files)
+ files = new /datum/research(src)
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
@@ -74,23 +75,18 @@
griefProtection()
..()
-
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
-
/obj/machinery/r_n_d/server/ex_act(severity)
griefProtection()
..()
-
/obj/machinery/r_n_d/server/blob_act()
griefProtection()
..()
-
-
//Backup files to centcomm to help admins recover data after greifer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
@@ -101,10 +97,10 @@
C.files.RefreshResearch()
/obj/machinery/r_n_d/server/proc/produce_heat()
- if (!produces_heat)
+ if(!produces_heat)
return
- if (!use_power)
+ if(!use_power)
return
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from telecoms
@@ -124,43 +120,12 @@
env.merge(removed)
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (disabled)
+ if(default_deconstruction_screwdriver(user, O))
return
- if (shocked)
- shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
- if (!panel_open)
- panel_open = 1
- icon_state = "server_o"
- user << "You open the maintenance hatch of [src]."
- else
- panel_open = 0
- icon_state = "server"
- user << "You close the maintenance hatch of [src]."
+ if(default_deconstruction_crowbar(user, O))
+ return
+ if(default_part_replacement(user, O))
return
- if (panel_open)
- if(istype(O, /obj/item/weapon/crowbar))
- griefProtection()
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
- I.loc = src.loc
- qdel(src)
- return 1
-
-/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
- if (disabled)
- return
- if (shocked)
- shock(user,50)
- return
-
-
-
/obj/machinery/r_n_d/server/centcom
name = "Centcom Central R&D Database"
@@ -190,8 +155,7 @@
no_id_servers -= S
/obj/machinery/r_n_d/server/centcom/process()
- return PROCESS_KILL //don't need process()
-
+ return PROCESS_KILL //don't need process()
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
@@ -210,8 +174,8 @@
add_fingerprint(usr)
usr.set_machine(src)
- if(!src.allowed(usr) && !emagged)
- usr << "\red You do not have the required access level"
+ if(!allowed(usr) && !emagged)
+ usr << "You do not have the required access level"
return
if(href_list["main"])
@@ -267,7 +231,6 @@
if(choice == "Continue")
for(var/datum/design/D in temp_server.files.known_designs)
if(D.id == href_list["reset_design"])
- D.reliability_mod = 0
temp_server.files.known_designs -= D
break
temp_server.files.RefreshResearch()
@@ -344,14 +307,12 @@
src.updateUsrDialog()
return ..()
-
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
id_with_upload_string = "1;2"
id_with_download_string = "1;2"
server_id = 2
-
/obj/machinery/r_n_d/server/core
name = "Core R&D Server"
id_with_upload_string = "1"
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index e4520e1378..febb0a6827 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -30,7 +30,7 @@
icon_state = "strange"
var/obj/item/weapon/inside
var/method = 0// 0 = fire, 1 = brush, 2 = pick
- origin_tech = "materials=5"
+ origin_tech = list(TECH_MATERIAL = 5)
/obj/item/weapon/ore/strangerock/New(loc, var/inside_item_type = 0)
..(loc)
diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi
index 68dbded212..f85b00bcfd 100644
Binary files a/icons/obj/machines/research.dmi and b/icons/obj/machines/research.dmi differ