diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index bf113e8deb4..a7dca1c088f 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -39,1482 +39,1480 @@ other types of metals and chemistry for reagents). #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. -datum - design //Datum for object designs, used in construction - var/name = "Name" //Name of the created object. - var/desc = "Desc" //Description of the created object. - 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/build_path = "" //The file path of the object that gets created - var/locked = 0 //If true it will spawn inside a lockbox with currently sec access +datum/design //Datum for object designs, used in construction + var/name = "Name" //Name of the created object. + var/desc = "Desc" //Description of the created object. + 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/build_path = "" //The file path of the object that gets created + var/locked = 0 //If true it will spawn inside a lockbox with currently sec access - proc - //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. - 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 + +//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 ///////////////////Computer Boards/////////////////////////////////// - seccamera - name = "Circuit Design (Security)" - desc = "Allows for the construction of circuit boards used to build security camera computers." - id = "seccamera" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/security" +datum/design/seccamera + name = "Circuit Design (Security)" + desc = "Allows for the construction of circuit boards used to build security camera computers." + id = "seccamera" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/security" - aicore - name = "Circuit Design (AI Core)" - desc = "Allows for the construction of circuit boards used to build new AI cores." - id = "aicore" - req_tech = list("programming" = 4, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/aicore" +datum/design/aicore + name = "Circuit Design (AI Core)" + desc = "Allows for the construction of circuit boards used to build new AI cores." + id = "aicore" + req_tech = list("programming" = 4, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/aicore" - aiupload - name = "Circuit Design (AI Upload)" - desc = "Allows for the construction of circuit boards used to build an AI Upload Console." - id = "aiupload" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/aiupload" +datum/design/aiupload + name = "Circuit Design (AI Upload)" + desc = "Allows for the construction of circuit boards used to build an AI Upload Console." + id = "aiupload" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/aiupload" - borgupload - name = "Circuit Design (Cyborg Upload)" - desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." - id = "borgupload" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/borgupload" +datum/design/borgupload + name = "Circuit Design (Cyborg Upload)" + desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console." + id = "borgupload" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/borgupload" - med_data - name = "Circuit Design (Medical Records)" - desc = "Allows for the construction of circuit boards used to build a medical records console." - id = "med_data" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/med_data" +datum/design/med_data + name = "Circuit Design (Medical Records)" + desc = "Allows for the construction of circuit boards used to build a medical records console." + id = "med_data" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/med_data" - operating - name = "Circuit Design (Operating Computer)" - desc = "Allows for the construction of circuit boards used to build an operating computer console." - id = "operating" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/operating" +datum/design/operating + name = "Circuit Design (Operating Computer)" + desc = "Allows for the construction of circuit boards used to build an operating computer console." + id = "operating" + req_tech = list("programming" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/operating" - pandemic - name = "Circuit Design (PanD.E.M.I.C. 2200)" - desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." - id = "pandemic" - req_tech = list("programming" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/pandemic" +datum/design/pandemic + name = "Circuit Design (PanD.E.M.I.C. 2200)" + desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console." + id = "pandemic" + req_tech = list("programming" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/pandemic" - scan_console - name = "Circuit Design (DNA Machine)" - desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." - id = "scan_console" - req_tech = list("programming" = 2, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/scan_consolenew" +datum/design/scan_console + name = "Circuit Design (DNA Machine)" + desc = "Allows for the construction of circuit boards used to build a new DNA scanning console." + id = "scan_console" + req_tech = list("programming" = 2, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/scan_consolenew" - comconsole - name = "Circuit Design (Communications)" - desc = "Allows for the construction of circuit boards used to build a communications console." - id = "comconsole" - req_tech = list("programming" = 2, "magnets" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/communications" +datum/design/comconsole + name = "Circuit Design (Communications)" + desc = "Allows for the construction of circuit boards used to build a communications console." + id = "comconsole" + req_tech = list("programming" = 2, "magnets" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/communications" - idcardconsole - name = "Circuit Design (ID Computer)" - desc = "Allows for the construction of circuit boards used to build an ID computer." - id = "idcardconsole" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/card" +datum/design/idcardconsole + name = "Circuit Design (ID Computer)" + desc = "Allows for the construction of circuit boards used to build an ID computer." + id = "idcardconsole" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/card" - crewconsole - name = "Circuit Design (Crew monitoring computer)" - desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." - id = "crewconsole" - req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/crew" +datum/design/crewconsole + name = "Circuit Design (Crew monitoring computer)" + desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer." + id = "crewconsole" + req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/crew" - teleconsole - name = "Circuit Design (Teleporter Console)" - desc = "Allows for the construction of circuit boards used to build a teleporter control console." - id = "teleconsole" - req_tech = list("programming" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/teleporter" +datum/design/teleconsole + name = "Circuit Design (Teleporter Console)" + desc = "Allows for the construction of circuit boards used to build a teleporter control console." + id = "teleconsole" + req_tech = list("programming" = 3, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/teleporter" - secdata - name = "Circuit Design (Security Records Console)" - desc = "Allows for the construction of circuit boards used to build a security records console." - id = "secdata" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/secure_data" +datum/design/secdata + name = "Circuit Design (Security Records Console)" + desc = "Allows for the construction of circuit boards used to build a security records console." + id = "secdata" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/secure_data" - atmosalerts - name = "Circuit Design (Atmosphere Alert)" - desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.." - id = "atmosalerts" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/atmos_alert" +datum/design/atmosalerts + name = "Circuit Design (Atmosphere Alert)" + desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.." + id = "atmosalerts" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/atmos_alert" - air_management - name = "Circuit Design (Atmospheric Monitor)" - desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." - id = "air_management" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/air_management" +datum/design/air_management + name = "Circuit Design (Atmospheric Monitor)" + desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor." + id = "air_management" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/air_management" /* Uncomment if someone makes these buildable - general_alert - name = "Circuit Design (General Alert Console)" - desc = "Allows for the construction of circuit boards used to build a General Alert console." - id = "general_alert" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/general_alert" +datum/design/general_alert + name = "Circuit Design (General Alert Console)" + desc = "Allows for the construction of circuit boards used to build a General Alert console." + id = "general_alert" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/general_alert" */ - robocontrol - name = "Circuit Design (Robotics Control Console)" - desc = "Allows for the construction of circuit boards used to build a Robotics Control console." - id = "robocontrol" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/robotics" +datum/design/robocontrol + name = "Circuit Design (Robotics Control Console)" + desc = "Allows for the construction of circuit boards used to build a Robotics Control console." + id = "robocontrol" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/robotics" - clonecontrol - name = "Circuit Design (Cloning Machine Console)" - desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." - id = "clonecontrol" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/cloning" +datum/design/clonecontrol + name = "Circuit Design (Cloning Machine Console)" + desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." + id = "clonecontrol" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/cloning" - clonepod - name = "Circuit Design (Clone Pod)" - desc = "Allows for the construction of circuit boards used to build a Cloning Pod." - id = "clonepod" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/clonepod" +datum/design/clonepod + name = "Circuit Design (Clone Pod)" + desc = "Allows for the construction of circuit boards used to build a Cloning Pod." + id = "clonepod" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/clonepod" - clonescanner - name = "Circuit Design (Cloning Scanner)" - desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." - id = "clonescanner" - req_tech = list("programming" = 3, "biotech" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/clonescanner" +datum/design/clonescanner + name = "Circuit Design (Cloning Scanner)" + desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." + id = "clonescanner" + req_tech = list("programming" = 3, "biotech" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/clonescanner" - arcademachine - name = "Circuit Design (Arcade Machine)" - desc = "Allows for the construction of circuit boards used to build a new arcade machine." - id = "arcademachine" - req_tech = list("programming" = 1) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/arcade" +datum/design/arcademachine + name = "Circuit Design (Arcade Machine)" + desc = "Allows for the construction of circuit boards used to build a new arcade machine." + id = "arcademachine" + req_tech = list("programming" = 1) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/arcade" - powermonitor - name = "Circuit Design (Power Monitor)" - desc = "Allows for the construction of circuit boards used to build a new power monitor" - id = "powermonitor" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/powermonitor" +datum/design/powermonitor + name = "Circuit Design (Power Monitor)" + desc = "Allows for the construction of circuit boards used to build a new power monitor" + id = "powermonitor" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/powermonitor" - solarcontrol - name = "Circuit Design (Solar Control)" - desc = "Allows for the construction of circuit boards used to build a solar control console" - id = "solarcontrol" - req_tech = list("programming" = 2, "powerstorage" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/solar_control" +datum/design/solarcontrol + name = "Circuit Design (Solar Control)" + desc = "Allows for the construction of circuit boards used to build a solar control console" + id = "solarcontrol" + req_tech = list("programming" = 2, "powerstorage" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/solar_control" - prisonmanage - name = "Circuit Design (Prisoner Management Console)" - desc = "Allows for the construction of circuit boards used to build a prisoner management console." - id = "prisonmanage" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/prisoner" +datum/design/prisonmanage + name = "Circuit Design (Prisoner Management Console)" + desc = "Allows for the construction of circuit boards used to build a prisoner management console." + id = "prisonmanage" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/prisoner" - mechacontrol - name = "Circuit Design (Exosuit Control Console)" - desc = "Allows for the construction of circuit boards used to build an exosuit control console." - id = "mechacontrol" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha_control" +datum/design/mechacontrol + name = "Circuit Design (Exosuit Control Console)" + desc = "Allows for the construction of circuit boards used to build an exosuit control console." + id = "mechacontrol" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha_control" - mechapower - name = "Circuit Design (Mech Bay Power Control Console)" - desc = "Allows for the construction of circuit boards used to build a mech bay power control console." - id = "mechapower" - req_tech = list("programming" = 2, "powerstorage" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mech_bay_power_console" +datum/design/mechapower + name = "Circuit Design (Mech Bay Power Control Console)" + desc = "Allows for the construction of circuit boards used to build a mech bay power control console." + id = "mechapower" + req_tech = list("programming" = 2, "powerstorage" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mech_bay_power_console" - rdconsole - name = "Circuit Design (R&D Console)" - desc = "Allows for the construction of circuit boards used to build a new R&D console." - id = "rdconsole" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/rdconsole" +datum/design/rdconsole + name = "Circuit Design (R&D Console)" + desc = "Allows for the construction of circuit boards used to build a new R&D console." + id = "rdconsole" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/rdconsole" - ordercomp - name = "Circuit Design (Supply ordering console)" - desc = "Allows for the construction of circuit boards used to build a Supply ordering console." - id = "ordercomp" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/ordercomp" +datum/design/ordercomp + name = "Circuit Design (Supply ordering console)" + desc = "Allows for the construction of circuit boards used to build a Supply ordering console." + id = "ordercomp" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/ordercomp" - supplycomp - name = "Circuit Design (Supply shuttle console)" - desc = "Allows for the construction of circuit boards used to build a Supply shuttle console." - id = "supplycomp" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/supplycomp" +datum/design/supplycomp + name = "Circuit Design (Supply shuttle console)" + desc = "Allows for the construction of circuit boards used to build a Supply shuttle console." + id = "supplycomp" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/supplycomp" - mining - name = "Circuit Design (Outpost Status Display)" - desc = "Allows for the construction of circuit boards used to build an outpost status display console." - id = "mining" - req_tech = list("programming" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mining" +datum/design/mining + name = "Circuit Design (Outpost Status Display)" + desc = "Allows for the construction of circuit boards used to build an outpost status display console." + id = "mining" + req_tech = list("programming" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mining" - comm_monitor - name = "Circuit Design (Telecommunications Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." - id = "comm_monitor" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/comm_monitor" +datum/design/comm_monitor + name = "Circuit Design (Telecommunications Monitoring Console)" + desc = "Allows for the construction of circuit boards used to build a telecommunications monitor." + id = "comm_monitor" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/comm_monitor" - comm_server - name = "Circuit Design (Telecommunications Server Monitoring Console)" - desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." - id = "comm_server" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/comm_server" +datum/design/comm_server + name = "Circuit Design (Telecommunications Server Monitoring Console)" + desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor." + id = "comm_server" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/comm_server" - message_monitor - name = "Circuit Design (Messaging Monitor Console)" - desc = "Allows for the construction of circuit boards used to build a messaging monitor console." - id = "message_monitor" - req_tech = list("programming" = 5) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/message_monitor" +datum/design/message_monitor + name = "Circuit Design (Messaging Monitor Console)" + desc = "Allows for the construction of circuit boards used to build a messaging monitor console." + id = "message_monitor" + req_tech = list("programming" = 5) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/message_monitor" - aifixer - name = "Circuit Design (AI Integrity Restorer)" - desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." - id = "aifixer" - req_tech = list("programming" = 3, "biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/aifixer" +datum/design/aifixer + name = "Circuit Design (AI Integrity Restorer)" + desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer." + id = "aifixer" + req_tech = list("programming" = 3, "biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/aifixer" /////////////////////////////////// //////////AI Module Disks////////// /////////////////////////////////// - safeguard_module - name = "Module Design (Safeguard)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "safeguard_module" - req_tech = list("programming" = 3, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/safeguard" +datum/design/safeguard_module + name = "Module Design (Safeguard)" + desc = "Allows for the construction of a Safeguard AI Module." + id = "safeguard_module" + req_tech = list("programming" = 3, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/safeguard" - onehuman_module - name = "Module Design (OneHuman)" - desc = "Allows for the construction of a OneHuman AI Module." - id = "onehuman_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/oneHuman" +datum/design/onehuman_module + name = "Module Design (OneHuman)" + desc = "Allows for the construction of a OneHuman AI Module." + id = "onehuman_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/oneHuman" - protectstation_module - name = "Module Design (ProtectStation)" - desc = "Allows for the construction of a ProtectStation AI Module." - id = "protectstation_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/protectStation" +datum/design/protectstation_module + name = "Module Design (ProtectStation)" + desc = "Allows for the construction of a ProtectStation AI Module." + id = "protectstation_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/protectStation" - notele_module - name = "Module Design (TeleporterOffline Module)" - desc = "Allows for the construction of a TeleporterOffline AI Module." - id = "notele_module" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/teleporterOffline" +datum/design/notele_module + name = "Module Design (TeleporterOffline Module)" + desc = "Allows for the construction of a TeleporterOffline AI Module." + id = "notele_module" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/teleporterOffline" - quarantine_module - name = "Module Design (Quarantine)" - desc = "Allows for the construction of a Quarantine AI Module." - id = "quarantine_module" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/quarantine" +datum/design/quarantine_module + name = "Module Design (Quarantine)" + desc = "Allows for the construction of a Quarantine AI Module." + id = "quarantine_module" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/quarantine" - oxygen_module - name = "Module Design (OxygenIsToxicToHumans)" - desc = "Allows for the construction of a Safeguard AI Module." - id = "oxygen_module" - req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/oxygen" +datum/design/oxygen_module + name = "Module Design (OxygenIsToxicToHumans)" + desc = "Allows for the construction of a Safeguard AI Module." + id = "oxygen_module" + req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/oxygen" - freeform_module - name = "Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Module." - id = "freeform_module" - req_tech = list("programming" = 4, "materials" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/freeform" +datum/design/freeform_module + name = "Module Design (Freeform)" + desc = "Allows for the construction of a Freeform AI Module." + id = "freeform_module" + req_tech = list("programming" = 4, "materials" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/freeform" - reset_module - name = "Module Design (Reset)" - desc = "Allows for the construction of a Reset AI Module." - id = "reset_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) - build_path = "/obj/item/weapon/aiModule/reset" +datum/design/reset_module + name = "Module Design (Reset)" + desc = "Allows for the construction of a Reset AI Module." + id = "reset_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$gold" = 100) + build_path = "/obj/item/weapon/aiModule/reset" - purge_module - name = "Module Design (Purge)" - desc = "Allows for the construction of a Purge AI Module." - id = "purge_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/purge" +datum/design/purge_module + name = "Module Design (Purge)" + desc = "Allows for the construction of a Purge AI Module." + id = "purge_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/purge" - freeformcore_module - name = "Core Module Design (Freeform)" - desc = "Allows for the construction of a Freeform AI Core Module." - id = "freeformcore_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/freeformcore" +datum/design/freeformcore_module + name = "Core Module Design (Freeform)" + desc = "Allows for the construction of a Freeform AI Core Module." + id = "freeformcore_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/freeformcore" - asimov - name = "Core Module Design (Asimov)" - desc = "Allows for the construction of a Asimov AI Core Module." - id = "asimov_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/asimov" +datum/design/asimov + name = "Core Module Design (Asimov)" + desc = "Allows for the construction of a Asimov AI Core Module." + id = "asimov_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/asimov" - paladin_module - name = "Core Module Design (P.A.L.A.D.I.N.)" - desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." - id = "paladin_module" - req_tech = list("programming" = 4, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/paladin" +datum/design/paladin_module + name = "Core Module Design (P.A.L.A.D.I.N.)" + desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." + id = "paladin_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/paladin" - tyrant_module - name = "Core Module Design (T.Y.R.A.N.T.)" - desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." - id = "tyrant_module" - req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) - build_path = "/obj/item/weapon/aiModule/tyrant" +datum/design/tyrant_module + name = "Core Module Design (T.Y.R.A.N.T.)" + desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module." + id = "tyrant_module" + req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20, "$diamond" = 100) + build_path = "/obj/item/weapon/aiModule/tyrant" /////////////////////////////////// /////Subspace Telecomms//////////// /////////////////////////////////// - subspace_receiver - name = "Circuit Design (Subspace Receiver)" - desc = "Allows for the construction of Subspace Receiver equipment." - id = "s-receiver" - req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/receiver" +datum/design/subspace_receiver + name = "Circuit Design (Subspace Receiver)" + desc = "Allows for the construction of Subspace Receiver equipment." + id = "s-receiver" + req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/receiver" - telecomms_bus - name = "Circuit Design (Bus Mainframe)" - desc = "Allows for the construction of Telecommunications Bus Mainframes." - id = "s-bus" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/bus" +datum/design/telecomms_bus + name = "Circuit Design (Bus Mainframe)" + desc = "Allows for the construction of Telecommunications Bus Mainframes." + id = "s-bus" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/bus" - telecomms_hub - name = "Circuit Design (Hub Mainframe)" - desc = "Allows for the construction of Telecommunications Hub Mainframes." - id = "s-hub" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/hub" +datum/design/telecomms_hub + name = "Circuit Design (Hub Mainframe)" + desc = "Allows for the construction of Telecommunications Hub Mainframes." + id = "s-hub" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/hub" - telecomms_relay - name = "Circuit Design (Relay Mainframe)" - desc = "Allows for the construction of Telecommunications Relay Mainframes." - id = "s-relay" - req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/relay" +datum/design/telecomms_relay + name = "Circuit Design (Relay Mainframe)" + desc = "Allows for the construction of Telecommunications Relay Mainframes." + id = "s-relay" + req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/relay" - telecomms_processor - name = "Circuit Design (Processor Unit)" - desc = "Allows for the construction of Telecommunications Processor equipment." - id = "s-processor" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/processor" +datum/design/telecomms_processor + name = "Circuit Design (Processor Unit)" + desc = "Allows for the construction of Telecommunications Processor equipment." + id = "s-processor" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/processor" - telecomms_server - name = "Circuit Design (Subspace Receiver)" - desc = "Allows for the construction of Telecommunications Servers." - id = "s-server" - req_tech = list("programming" = 4, "engineering" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/server" +datum/design/telecomms_server + name = "Circuit Design (Subspace Receiver)" + desc = "Allows for the construction of Telecommunications Servers." + id = "s-server" + req_tech = list("programming" = 4, "engineering" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/server" - subspace_broadcaster - name = "Circuit Design (Subspace Broadcaster)" - desc = "Allows for the construction of Subspace Broadcasting equipment." - id = "s-broadcaster" - req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster" +datum/design/subspace_broadcaster + name = "Circuit Design (Subspace Broadcaster)" + desc = "Allows for the construction of Subspace Broadcasting equipment." + id = "s-broadcaster" + req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/telecomms/broadcaster" /////////////////////////////////// /////Non-Board Computer Stuff////// /////////////////////////////////// - intellicard - name = "Intellicard AI Transportation System" - desc = "Allows for the construction of an intellicard." - id = "intellicard" - req_tech = list("programming" = 4, "materials" = 4) - build_type = PROTOLATHE - materials = list("$glass" = 1000, "$gold" = 200) - build_path = "/obj/item/device/aicard" +datum/design/intellicard + name = "Intellicard AI Transportation System" + desc = "Allows for the construction of an intellicard." + id = "intellicard" + req_tech = list("programming" = 4, "materials" = 4) + build_type = PROTOLATHE + materials = list("$glass" = 1000, "$gold" = 200) + build_path = "/obj/item/device/aicard" - paicard - name = "Personal Artificial Intelligence Card" - desc = "Allows for the construction of a pAI Card" - id = "paicard" - req_tech = list("programming" = 3) - build_type = PROTOLATHE - materials = list("$glass" = 500, "$metal" = 500) - build_path = "/obj/item/device/paicard" +datum/design/paicard + name = "Personal Artificial Intelligence Card" + desc = "Allows for the construction of a pAI Card" + id = "paicard" + req_tech = list("programming" = 3) + build_type = PROTOLATHE + materials = list("$glass" = 500, "$metal" = 500) + build_path = "/obj/item/device/paicard" /////////////////////////////////// //////////Mecha Module Disks/////// /////////////////////////////////// - ripley_main - name = "Circuit Design (APLU \"Ripley\" Central Control module)" - desc = "Allows for the construction of a \"Ripley\" Central Control module." - id = "ripley_main" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/ripley/main" +datum/design/ripley_main + name = "Circuit Design (APLU \"Ripley\" Central Control module)" + desc = "Allows for the construction of a \"Ripley\" Central Control module." + id = "ripley_main" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/ripley/main" - ripley_peri - name = "Circuit Design (APLU \"Ripley\" Peripherals Control module)" - desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." - id = "ripley_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/ripley/peripherals" +datum/design/ripley_peri + name = "Circuit Design (APLU \"Ripley\" Peripherals Control module)" + desc = "Allows for the construction of a \"Ripley\" Peripheral Control module." + id = "ripley_peri" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/ripley/peripherals" - odysseus_main - name = "Circuit Design (\"Odysseus\" Central Control module)" - desc = "Allows for the construction of a \"Odysseus\" Central Control module." - id = "odysseus_main" - req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/odysseus/main" +datum/design/odysseus_main + name = "Circuit Design (\"Odysseus\" Central Control module)" + desc = "Allows for the construction of a \"Odysseus\" Central Control module." + id = "odysseus_main" + req_tech = list("programming" = 3,"biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/odysseus/main" - odysseus_peri - name = "Circuit Design (\"Odysseus\" Peripherals Control module)" - desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." - id = "odysseus_peri" - req_tech = list("programming" = 3,"biotech" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/odysseus/peripherals" +datum/design/odysseus_peri + name = "Circuit Design (\"Odysseus\" Peripherals Control module)" + desc = "Allows for the construction of a \"Odysseus\" Peripheral Control module." + id = "odysseus_peri" + req_tech = list("programming" = 3,"biotech" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/odysseus/peripherals" - gygax_main - name = "Circuit Design (\"Gygax\" Central Control module)" - desc = "Allows for the construction of a \"Gygax\" Central Control module." - id = "gygax_main" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/gygax/main" +datum/design/gygax_main + name = "Circuit Design (\"Gygax\" Central Control module)" + desc = "Allows for the construction of a \"Gygax\" Central Control module." + id = "gygax_main" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/gygax/main" - gygax_peri - name = "Circuit Design (\"Gygax\" Peripherals Control module)" - desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." - id = "gygax_peri" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/gygax/peripherals" +datum/design/gygax_peri + name = "Circuit Design (\"Gygax\" Peripherals Control module)" + desc = "Allows for the construction of a \"Gygax\" Peripheral Control module." + id = "gygax_peri" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/gygax/peripherals" - gygax_targ - name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." - id = "gygax_targ" - req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/gygax/targeting" +datum/design/gygax_targ + name = "Circuit Design (\"Gygax\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Gygax\" Weapons & Targeting Control module." + id = "gygax_targ" + req_tech = list("programming" = 4, "combat" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/gygax/targeting" - durand_main - name = "Circuit Design (\"Durand\" Central Control module)" - desc = "Allows for the construction of a \"Durand\" Central Control module." - id = "durand_main" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/durand/main" +datum/design/durand_main + name = "Circuit Design (\"Durand\" Central Control module)" + desc = "Allows for the construction of a \"Durand\" Central Control module." + id = "durand_main" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/durand/main" - durand_peri - name = "Circuit Design (\"Durand\" Peripherals Control module)" - desc = "Allows for the construction of a \"Durand\" Peripheral Control module." - id = "durand_peri" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/durand/peripherals" +datum/design/durand_peri + name = "Circuit Design (\"Durand\" Peripherals Control module)" + desc = "Allows for the construction of a \"Durand\" Peripheral Control module." + id = "durand_peri" + req_tech = list("programming" = 4) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/durand/peripherals" - durand_targ - name = "Circuit Design (\"Durand\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." - id = "durand_targ" - req_tech = list("programming" = 4, "combat" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting" +datum/design/durand_targ + name = "Circuit Design (\"Durand\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"Durand\" Weapons & Targeting Control module." + id = "durand_targ" + req_tech = list("programming" = 4, "combat" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting" +datum/design/honker_main + name = "Circuit Design (\"H.O.N.K\" Central Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." + id = "honker_main" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/honker/main" - honker_main - name = "Circuit Design (\"H.O.N.K\" Central Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Central Control module." - id = "honker_main" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/honker/main" +datum/design/honker_peri + name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." + id = "honker_peri" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/honker/peripherals" - honker_peri - name = "Circuit Design (\"H.O.N.K\" Peripherals Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Peripheral Control module." - id = "honker_peri" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/honker/peripherals" - - honker_targ - name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" - desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." - id = "honker_targ" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mecha/honker/targeting" +datum/design/honker_targ + name = "Circuit Design (\"H.O.N.K\" Weapons & Targeting Control module)" + desc = "Allows for the construction of a \"H.O.N.K\" Weapons & Targeting Control module." + id = "honker_targ" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mecha/honker/targeting" //////////////////////////////////////// /////////// Mecha Equpment ///////////// //////////////////////////////////////// - mech_scattershot - name = "Exosuit Weapon Design (LBX AC 10 \"Scattershot\")" - desc = "Allows for the construction of LBX AC 10." - id = "mech_scattershot" - build_type = MECHFAB - req_tech = list("combat" = 4) - build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot" +datum/design/mech_scattershot + name = "Exosuit Weapon Design (LBX AC 10 \"Scattershot\")" + desc = "Allows for the construction of LBX AC 10." + id = "mech_scattershot" + build_type = MECHFAB + req_tech = list("combat" = 4) + build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot" - mech_laser - name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" - desc = "Allows for the construction of CH-PS Laser." - id = "mech_laser" - build_type = MECHFAB - req_tech = list("combat" = 3, "magnets" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser" +datum/design/mech_laser + name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" + desc = "Allows for the construction of CH-PS Laser." + id = "mech_laser" + build_type = MECHFAB + req_tech = list("combat" = 3, "magnets" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser" - mech_laser_heavy - name = "Exosuit Weapon Design (CH-LC \"Solaris\" Laser Cannon)" - desc = "Allows for the construction of CH-LC Laser Cannon." - id = "mech_laser_heavy" - build_type = MECHFAB - req_tech = list("combat" = 4, "magnets" = 4) - build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy" +datum/design/mech_laser_heavy + name = "Exosuit Weapon Design (CH-LC \"Solaris\" Laser Cannon)" + desc = "Allows for the construction of CH-LC Laser Cannon." + id = "mech_laser_heavy" + build_type = MECHFAB + req_tech = list("combat" = 4, "magnets" = 4) + build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy" - mech_grenade_launcher - name = "Exosuit Weapon Design (SGL-6 Grenade Launcher)" - desc = "Allows for the construction of SGL-6 Grenade Launcher." - id = "mech_grenade_launcher" - build_type = MECHFAB - req_tech = list("combat" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang" +datum/design/mech_grenade_launcher + name = "Exosuit Weapon Design (SGL-6 Grenade Launcher)" + desc = "Allows for the construction of SGL-6 Grenade Launcher." + id = "mech_grenade_launcher" + build_type = MECHFAB + req_tech = list("combat" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang" - mech_wormhole_gen - name = "Exosuit Module Design (Localized Wormhole Generator)" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - id = "mech_wormhole_gen" - build_type = MECHFAB - req_tech = list("bluespace" = 3, "magnets" = 2) - build_path = "/obj/item/mecha_parts/mecha_equipment/wormhole_generator" +datum/design/mech_wormhole_gen + name = "Exosuit Module Design (Localized Wormhole Generator)" + desc = "An exosuit module that allows generating of small quasi-stable wormholes." + id = "mech_wormhole_gen" + build_type = MECHFAB + req_tech = list("bluespace" = 3, "magnets" = 2) + build_path = "/obj/item/mecha_parts/mecha_equipment/wormhole_generator" - mech_teleporter - name = "Exosuit Module Design (Teleporter Module)" - desc = "An exosuit module that allows exosuits to teleport to any position in view." - id = "mech_teleporter" - build_type = MECHFAB - req_tech = list("bluespace" = 10, "magnets" = 5) - build_path = "/obj/item/mecha_parts/mecha_equipment/teleporter" +datum/design/mech_teleporter + name = "Exosuit Module Design (Teleporter Module)" + desc = "An exosuit module that allows exosuits to teleport to any position in view." + id = "mech_teleporter" + build_type = MECHFAB + req_tech = list("bluespace" = 10, "magnets" = 5) + build_path = "/obj/item/mecha_parts/mecha_equipment/teleporter" - mech_rcd - name = "Exosuit Module Design (RCD Module)" - desc = "An exosuit-mounted Rapid Construction Device." - id = "mech_rcd" - build_type = MECHFAB - 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/mech_rcd + name = "Exosuit Module Design (RCD Module)" + desc = "An exosuit-mounted Rapid Construction Device." + id = "mech_rcd" + build_type = MECHFAB + req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) + build_path = "/obj/item/mecha_parts/mecha_equipment/tool/rcd" - mech_gravcatapult - name = "Exosuit Module Design (Gravitational Catapult Module)" - desc = "An exosuit mounted Gravitational Catapult." - id = "mech_gravcatapult" - build_type = MECHFAB - req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/gravcatapult" +datum/design/mech_gravcatapult + name = "Exosuit Module Design (Gravitational Catapult Module)" + desc = "An exosuit mounted Gravitational Catapult." + id = "mech_gravcatapult" + build_type = MECHFAB + req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/gravcatapult" - mech_repair_droid - name = "Exosuit Module Design (Repair Droid Module)" - desc = "Automated Repair Droid. BEEP BOOP" - id = "mech_repair_droid" - build_type = MECHFAB - req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid" +datum/design/mech_repair_droid + name = "Exosuit Module Design (Repair Droid Module)" + desc = "Automated Repair Droid. BEEP BOOP" + id = "mech_repair_droid" + build_type = MECHFAB + req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/repair_droid" - mech_plasma_generator - name = "Exosuit Module Design (Plasma Converter Module)" - desc = "Exosuit-mounted plasma converter." - id = "mech_plasma_generator" - build_type = MECHFAB - req_tech = list("plasmatech" = 2, "powerstorage"= 2, "engineering" = 2) - build_path = "/obj/item/mecha_parts/mecha_equipment/plasma_generator" +datum/design/mech_plasma_generator + name = "Exosuit Module Design (Plasma Converter Module)" + desc = "Exosuit-mounted plasma converter." + id = "mech_plasma_generator" + build_type = MECHFAB + req_tech = list("plasmatech" = 2, "powerstorage"= 2, "engineering" = 2) + build_path = "/obj/item/mecha_parts/mecha_equipment/plasma_generator" - mech_energy_relay - name = "Exosuit Module Design (Tesla Energy Relay)" - desc = "Tesla Energy Relay" - id = "mech_energy_relay" - build_type = MECHFAB - req_tech = list("magnets" = 4, "syndicate" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay" +datum/design/mech_energy_relay + name = "Exosuit Module Design (Tesla Energy Relay)" + desc = "Tesla Energy Relay" + id = "mech_energy_relay" + build_type = MECHFAB + req_tech = list("magnets" = 4, "syndicate" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay" - mech_ccw_armor - name = "Exosuit Module Design(Reactive Armor Booster Module)" - desc = "Exosuit-mounted armor booster." - id = "mech_ccw_armor" - build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 4) - build_path = "/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster" +datum/design/mech_ccw_armor + name = "Exosuit Module Design(Reactive Armor Booster Module)" + desc = "Exosuit-mounted armor booster." + id = "mech_ccw_armor" + build_type = MECHFAB + req_tech = list("materials" = 5, "combat" = 4) + build_path = "/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster" - mech_proj_armor - name = "Exosuit Module Design(Reflective Armor Booster Module)" - desc = "Exosuit-mounted armor booster." - id = "mech_proj_armor" - build_type = MECHFAB - req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) - build_path = "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster" +datum/design/mech_proj_armor + name = "Exosuit Module Design(Reflective Armor Booster Module)" + desc = "Exosuit-mounted armor booster." + id = "mech_proj_armor" + build_type = MECHFAB + req_tech = list("materials" = 5, "combat" = 5, "engineering"=3) + build_path = "/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster" - mech_syringe_gun - name = "Exosuit Module Design(Syringe Gun)" - desc = "Exosuit-mounted syringe gun and chemical synthesizer." - id = "mech_syringe_gun" - build_type = MECHFAB - req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) - build_path = "/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun" +datum/design/mech_syringe_gun + name = "Exosuit Module Design(Syringe Gun)" + desc = "Exosuit-mounted syringe gun and chemical synthesizer." + id = "mech_syringe_gun" + build_type = MECHFAB + req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3) + build_path = "/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun" - mech_diamond_drill - name = "Exosuit Module Design (Diamond Mining Drill)" - desc = "An upgraded version of the standard drill" - id = "mech_diamond_drill" - build_type = MECHFAB - req_tech = list("materials" = 4, "engineering" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill" +datum/design/mech_diamond_drill + name = "Exosuit Module Design (Diamond Mining Drill)" + desc = "An upgraded version of the standard drill" + id = "mech_diamond_drill" + build_type = MECHFAB + req_tech = list("materials" = 4, "engineering" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill" - mech_generator_nuclear - name = "Exosuit Module Design (ExoNuclear Reactor)" - desc = "Compact nuclear reactor module" - id = "mech_generator_nuclear" - build_type = MECHFAB - req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) - build_path = "/obj/item/mecha_parts/mecha_equipment/generator/nuclear" +datum/design/mech_generator_nuclear + name = "Exosuit Module Design (ExoNuclear Reactor)" + desc = "Compact nuclear reactor module" + id = "mech_generator_nuclear" + build_type = MECHFAB + req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3) + build_path = "/obj/item/mecha_parts/mecha_equipment/generator/nuclear" //////////////////////////////////////// //////////Disk Construction Disks/////// //////////////////////////////////////// - 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) - build_path = "/obj/item/weapon/disk/design_disk" +datum/design/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) + build_path = "/obj/item/weapon/disk/design_disk" - 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) - build_path = "/obj/item/weapon/disk/tech_disk" +datum/design/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) + build_path = "/obj/item/weapon/disk/tech_disk" //////////////////////////////////////// /////////////Stock Parts//////////////// //////////////////////////////////////// - basic_capacitor - name = "Basic Capacitor" - desc = "A stock part used in the construction of various devices." - id = "basic_capacitor" - req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/weapon/stock_parts/capacitor" +datum/design/basic_capacitor + name = "Basic Capacitor" + desc = "A stock part used in the construction of various devices." + id = "basic_capacitor" + req_tech = list("powerstorage" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/stock_parts/capacitor" - basic_sensor - name = "Basic Sensor Module" - desc = "A stock part used in the construction of various devices." - id = "basic_sensor" - req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 50, "$glass" = 20) - build_path = "/obj/item/weapon/stock_parts/scanning_module" +datum/design/basic_sensor + name = "Basic Sensor Module" + desc = "A stock part used in the construction of various devices." + id = "basic_sensor" + req_tech = list("magnets" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 50, "$glass" = 20) + build_path = "/obj/item/weapon/stock_parts/scanning_module" - micro_mani - name = "Micro Manipulator" - desc = "A stock part used in the construction of various devices." - id = "micro_mani" - req_tech = list("materials" = 1, "programming" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 30) - build_path = "/obj/item/weapon/stock_parts/manipulator" +datum/design/micro_mani + name = "Micro Manipulator" + desc = "A stock part used in the construction of various devices." + id = "micro_mani" + req_tech = list("materials" = 1, "programming" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 30) + build_path = "/obj/item/weapon/stock_parts/manipulator" - basic_micro_laser - name = "Basic Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "basic_micro_laser" - req_tech = list("magnets" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 10, "$glass" = 20) - build_path = "/obj/item/weapon/stock_parts/micro_laser" +datum/design/basic_micro_laser + name = "Basic Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "basic_micro_laser" + req_tech = list("magnets" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 10, "$glass" = 20) + build_path = "/obj/item/weapon/stock_parts/micro_laser" - basic_matter_bin - name = "Basic Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "basic_matter_bin" - req_tech = list("materials" = 1) - build_type = PROTOLATHE | AUTOLATHE - materials = list("$metal" = 80) - build_path = "/obj/item/weapon/stock_parts/matter_bin" +datum/design/basic_matter_bin + name = "Basic Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "basic_matter_bin" + req_tech = list("materials" = 1) + build_type = PROTOLATHE | AUTOLATHE + materials = list("$metal" = 80) + build_path = "/obj/item/weapon/stock_parts/matter_bin" - adv_capacitor - name = "Advanced Capacitor" - desc = "A stock part used in the construction of various devices." - id = "adv_capacitor" - req_tech = list("powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/weapon/stock_parts/capacitor/adv" +datum/design/adv_capacitor + name = "Advanced Capacitor" + desc = "A stock part used in the construction of various devices." + id = "adv_capacitor" + req_tech = list("powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/weapon/stock_parts/capacitor/adv" - adv_sensor - name = "Advanced Sensor Module" - desc = "A stock part used in the construction of various devices." - id = "adv_sensor" - req_tech = list("magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20) - build_path = "/obj/item/weapon/stock_parts/scanning_module/adv" +datum/design/adv_sensor + name = "Advanced Sensor Module" + desc = "A stock part used in the construction of various devices." + id = "adv_sensor" + req_tech = list("magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 20) + build_path = "/obj/item/weapon/stock_parts/scanning_module/adv" - nano_mani - name = "Nano Manipulator" - desc = "A stock part used in the construction of various devices." - id = "nano_mani" - req_tech = list("materials" = 3, "programming" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30) - build_path = "/obj/item/weapon/stock_parts/manipulator/nano" +datum/design/nano_mani + name = "Nano Manipulator" + desc = "A stock part used in the construction of various devices." + id = "nano_mani" + req_tech = list("materials" = 3, "programming" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30) + build_path = "/obj/item/weapon/stock_parts/manipulator/nano" - high_micro_laser - name = "High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "high_micro_laser" - req_tech = list("magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20) - build_path = "/obj/item/weapon/stock_parts/micro_laser/high" +datum/design/high_micro_laser + name = "High-Power Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "high_micro_laser" + req_tech = list("magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$glass" = 20) + build_path = "/obj/item/weapon/stock_parts/micro_laser/high" - adv_matter_bin - name = "Advanced Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "adv_matter_bin" - req_tech = list("materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 80) - build_path = "/obj/item/weapon/stock_parts/matter_bin/adv" +datum/design/adv_matter_bin + name = "Advanced Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "adv_matter_bin" + req_tech = list("materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 80) + build_path = "/obj/item/weapon/stock_parts/matter_bin/adv" - super_capacitor - name = "Super Capacitor" - desc = "A stock part used in the construction of various devices." - id = "super_capacitor" - req_tech = list("powerstorage" = 5, "materials" = 4) - build_type = PROTOLATHE - reliability_base = 71 - materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) - build_path = "/obj/item/weapon/stock_parts/capacitor/super" +datum/design/super_capacitor + name = "Super Capacitor" + desc = "A stock part used in the construction of various devices." + id = "super_capacitor" + req_tech = list("powerstorage" = 5, "materials" = 4) + build_type = PROTOLATHE + reliability_base = 71 + materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20) + build_path = "/obj/item/weapon/stock_parts/capacitor/super" - phasic_sensor - name = "Phasic Sensor Module" - desc = "A stock part used in the construction of various devices." - id = "phasic_sensor" - req_tech = list("magnets" = 5, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) - reliability_base = 72 - build_path = "/obj/item/weapon/stock_parts/scanning_module/phasic" +datum/design/phasic_sensor + name = "Phasic Sensor Module" + desc = "A stock part used in the construction of various devices." + id = "phasic_sensor" + req_tech = list("magnets" = 5, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10) + reliability_base = 72 + build_path = "/obj/item/weapon/stock_parts/scanning_module/phasic" - pico_mani - name = "Pico Manipulator" - desc = "A stock part used in the construction of various devices." - id = "pico_mani" - req_tech = list("materials" = 5, "programming" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30) - reliability_base = 73 - build_path = "/obj/item/weapon/stock_parts/manipulator/pico" +datum/design/pico_mani + name = "Pico Manipulator" + desc = "A stock part used in the construction of various devices." + id = "pico_mani" + req_tech = list("materials" = 5, "programming" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30) + reliability_base = 73 + build_path = "/obj/item/weapon/stock_parts/manipulator/pico" - ultra_micro_laser - name = "Ultra-High-Power Micro-Laser" - desc = "A stock part used in the construction of various devices." - id = "ultra_micro_laser" - req_tech = list("magnets" = 5, "materials" = 5) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) - reliability_base = 70 - build_path = "/obj/item/weapon/stock_parts/micro_laser/ultra" +datum/design/ultra_micro_laser + name = "Ultra-High-Power Micro-Laser" + desc = "A stock part used in the construction of various devices." + id = "ultra_micro_laser" + req_tech = list("magnets" = 5, "materials" = 5) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10) + reliability_base = 70 + build_path = "/obj/item/weapon/stock_parts/micro_laser/ultra" - super_matter_bin - name = "Super Matter Bin" - desc = "A stock part used in the construction of various devices." - id = "super_matter_bin" - req_tech = list("materials" = 5) - build_type = PROTOLATHE - materials = list("$metal" = 80) - reliability_base = 75 - build_path = "/obj/item/weapon/stock_parts/matter_bin/super" +datum/design/super_matter_bin + name = "Super Matter Bin" + desc = "A stock part used in the construction of various devices." + id = "super_matter_bin" + req_tech = list("materials" = 5) + build_type = PROTOLATHE + materials = list("$metal" = 80) + reliability_base = 75 + build_path = "/obj/item/weapon/stock_parts/matter_bin/super" - subspace_ansible - name = "Subspace Ansible" - desc = "A compact module capable of sensing extradimensional activity." - id = "s-ansible" - req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 80, "$silver" = 20) - build_path = "/obj/item/weapon/stock_parts/subspace/ansible" +datum/design/subspace_ansible + name = "Subspace Ansible" + desc = "A compact module capable of sensing extradimensional activity." + id = "s-ansible" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 80, "$silver" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/ansible" - hyperwave_filter - name = "Hyperwave Filter" - desc = "A tiny device capable of filtering and converting super-intense radiowaves." - id = "s-filter" - req_tech = list("programming" = 3, "magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 40, "$silver" = 10) - build_path = "/obj/item/weapon/stock_parts/subspace/filter" +datum/design/hyperwave_filter + name = "Hyperwave Filter" + desc = "A tiny device capable of filtering and converting super-intense radiowaves." + id = "s-filter" + req_tech = list("programming" = 3, "magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 40, "$silver" = 10) + build_path = "/obj/item/weapon/stock_parts/subspace/filter" - subspace_amplifier - name = "Subspace Amplifier" - desc = "A compact micro-machine capable of amplifying weak subspace transmissions." - id = "s-amplifier" - req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) - build_path = "/obj/item/weapon/stock_parts/subspace/amplifier" +datum/design/subspace_amplifier + name = "Subspace Amplifier" + desc = "A compact micro-machine capable of amplifying weak subspace transmissions." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/amplifier" - subspace_treatment - name = "Subspace Treatment Disk" - desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." - id = "s-amplifier" - req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$silver" = 20) - build_path = "/obj/item/weapon/stock_parts/subspace/treatment" +datum/design/subspace_treatment + name = "Subspace Treatment Disk" + desc = "A compact micro-machine capable of stretching out hyper-compressed radio waves." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$silver" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/treatment" - subspace_analyzer - name = "Subspace Treatment Disk" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s-amplifier" - req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 10, "$gold" = 15) - build_path = "/obj/item/weapon/stock_parts/subspace/analyzer" +datum/design/subspace_analyzer + name = "Subspace Treatment Disk" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-amplifier" + req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 10, "$gold" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/analyzer" - subspace_crystal - name = "Ansible Crystal" - desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." - id = "s-amplifier" - req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2) - build_type = PROTOLATHE - materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) - build_path = "/obj/item/weapon/stock_parts/subspace/crystal" +datum/design/subspace_crystal + name = "Ansible Crystal" + desc = "A sophisticated analyzer capable of analyzing cryptic subspace wavelengths." + id = "s-amplifier" + req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2) + build_type = PROTOLATHE + materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20) + build_path = "/obj/item/weapon/stock_parts/subspace/crystal" - subspace_transmitter - name = "Subspace Transmitter" - desc = "A large piece of equipment used to open a window into the subspace dimension." - id = "s-amplifier" - req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3) - build_type = PROTOLATHE - materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) - build_path = "/obj/item/weapon/stock_parts/subspace/transmitter" +datum/design/subspace_transmitter + name = "Subspace Transmitter" + desc = "A large piece of equipment used to open a window into the subspace dimension." + id = "s-amplifier" + req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3) + build_type = PROTOLATHE + materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15) + build_path = "/obj/item/weapon/stock_parts/subspace/transmitter" //////////////////////////////////////// //////////////////Power///////////////// //////////////////////////////////////// - basic_cell - name = "Basic Power Cell" - desc = "A basic power cell that holds 1000 units of energy" - id = "basic_cell" - req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE |MECHFAB - materials = list("$metal" = 700, "$glass" = 50) - build_path = "/obj/item/weapon/cell" +datum/design/basic_cell + name = "Basic Power Cell" + desc = "A basic power cell that holds 1000 units of energy" + id = "basic_cell" + req_tech = list("powerstorage" = 1) + build_type = PROTOLATHE | AUTOLATHE |MECHFAB + materials = list("$metal" = 700, "$glass" = 50) + build_path = "/obj/item/weapon/cell" - high_cell - name = "High-Capacity Power Cell" - desc = "A power cell that holds 10000 units of energy" - id = "high_cell" - req_tech = list("powerstorage" = 2) - build_type = PROTOLATHE | AUTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 60) - build_path = "/obj/item/weapon/cell/high" +datum/design/high_cell + name = "High-Capacity Power Cell" + desc = "A power cell that holds 10000 units of energy" + id = "high_cell" + req_tech = list("powerstorage" = 2) + build_type = PROTOLATHE | AUTOLATHE | MECHFAB + materials = list("$metal" = 700, "$glass" = 60) + build_path = "/obj/item/weapon/cell/high" - super_cell - name = "Super-Capacity Power Cell" - desc = "A power cell that holds 20000 units of energy" - id = "super_cell" - req_tech = list("powerstorage" = 3, "materials" = 2) - reliability_base = 75 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 700, "$glass" = 70) - build_path = "/obj/item/weapon/cell/super" +datum/design/super_cell + name = "Super-Capacity Power Cell" + desc = "A power cell that holds 20000 units of energy" + id = "super_cell" + req_tech = list("powerstorage" = 3, "materials" = 2) + reliability_base = 75 + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 700, "$glass" = 70) + build_path = "/obj/item/weapon/cell/super" - hyper_cell - name = "Hyper-Capacity Power Cell" - desc = "A power cell that holds 30000 units of energy" - id = "hyper_cell" - req_tech = list("powerstorage" = 5, "materials" = 4) - reliability_base = 70 - build_type = PROTOLATHE | MECHFAB - materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) - build_path = "/obj/item/weapon/cell/hyper" +datum/design/hyper_cell + name = "Hyper-Capacity Power Cell" + desc = "A power cell that holds 30000 units of energy" + id = "hyper_cell" + req_tech = list("powerstorage" = 5, "materials" = 4) + reliability_base = 70 + build_type = PROTOLATHE | MECHFAB + materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) + build_path = "/obj/item/weapon/cell/hyper" - 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) - build_type = PROTOLATHE - materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) - build_path = "/obj/item/device/lightreplacer" +datum/design/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) + build_type = PROTOLATHE + materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000) + build_path = "/obj/item/device/lightreplacer" //////////////////////////////////////// //////////////MISC Boards/////////////// //////////////////////////////////////// - destructive_analyzer - name = "Destructive Analyzer Board" - desc = "The circuit board for a destructive analyzer." - id = "destructive_analyzer" - req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/destructive_analyzer" +datum/design/destructive_analyzer + name = "Destructive Analyzer Board" + desc = "The circuit board for a destructive analyzer." + id = "destructive_analyzer" + req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/destructive_analyzer" - protolathe - name = "Protolathe Board" - desc = "The circuit board for a protolathe." - id = "protolathe" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/protolathe" +datum/design/protolathe + name = "Protolathe Board" + desc = "The circuit board for a protolathe." + id = "protolathe" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/protolathe" - circuit_imprinter - name = "Circuit Imprinter Board" - desc = "The circuit board for a circuit imprinter." - id = "circuit_imprinter" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/circuit_imprinter" +datum/design/circuit_imprinter + name = "Circuit Imprinter Board" + desc = "The circuit board for a circuit imprinter." + id = "circuit_imprinter" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/circuit_imprinter" - autolathe - name = "Autolathe Board" - desc = "The circuit board for a autolathe." - id = "autolathe" - req_tech = list("programming" = 2, "engineering" = 2) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/autolathe" +datum/design/autolathe + name = "Autolathe Board" + desc = "The circuit board for a autolathe." + id = "autolathe" + req_tech = list("programming" = 2, "engineering" = 2) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/autolathe" - rdservercontrol - name = "R&D Server Control Console Board" - desc = "The circuit board for a R&D Server Control Console" - id = "rdservercontrol" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/rdservercontrol" +datum/design/rdservercontrol + name = "R&D Server Control Console Board" + desc = "The circuit board for a R&D Server Control Console" + id = "rdservercontrol" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/rdservercontrol" - rdserver - name = "R&D Server Board" - desc = "The circuit board for an R&D Server" - id = "rdserver" - req_tech = list("programming" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/rdserver" +datum/design/rdserver + name = "R&D Server Board" + desc = "The circuit board for an R&D Server" + id = "rdserver" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/rdserver" - mechfab - name = "Exosuit Fabricator Board" - desc = "The circuit board for an Exosuit Fabricator" - id = "mechfab" - req_tech = list("programming" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/mechfab" +datum/design/mechfab + name = "Exosuit Fabricator Board" + desc = "The circuit board for an Exosuit Fabricator" + id = "mechfab" + req_tech = list("programming" = 3, "engineering" = 3) + build_type = IMPRINTER + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/mechfab" ///////////////////////////////////////// ////////////Power Stuff////////////////// ///////////////////////////////////////// - pacman - name = "PACMAN-type Generator Board" - desc = "The circuit board that for a PACMAN-type portable generator." - id = "pacman" - req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) - build_type = IMPRINTER - reliability_base = 79 - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/pacman" +datum/design/pacman + name = "PACMAN-type Generator Board" + desc = "The circuit board that for a PACMAN-type portable generator." + id = "pacman" + req_tech = list("programming" = 3, "plasmatech" = 3, "powerstorage" = 3, "engineering" = 3) + build_type = IMPRINTER + reliability_base = 79 + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/pacman" - superpacman - name = "SUPERPACMAN-type Generator Board" - desc = "The circuit board that for a SUPERPACMAN-type portable generator." - id = "superpacman" - req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) - build_type = IMPRINTER - reliability_base = 76 - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/pacman/super" +datum/design/superpacman + name = "SUPERPACMAN-type Generator Board" + desc = "The circuit board that for a SUPERPACMAN-type portable generator." + id = "superpacman" + req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4) + build_type = IMPRINTER + reliability_base = 76 + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/pacman/super" - mrspacman - name = "MRSPACMAN-type Generator Board" - desc = "The circuit board that for a MRSPACMAN-type portable generator." - id = "mrspacman" - req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) - build_type = IMPRINTER - reliability_base = 74 - materials = list("$glass" = 2000, "acid" = 20) - build_path = "/obj/item/weapon/circuitboard/pacman/mrs" +datum/design/mrspacman + name = "MRSPACMAN-type Generator Board" + desc = "The circuit board that for a MRSPACMAN-type portable generator." + id = "mrspacman" + req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5) + build_type = IMPRINTER + reliability_base = 74 + materials = list("$glass" = 2000, "acid" = 20) + build_path = "/obj/item/weapon/circuitboard/pacman/mrs" ///////////////////////////////////////// ////////////Medical Tools//////////////// ///////////////////////////////////////// - mass_spectrometer - name = "Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood." - id = "mass_spectrometer" - req_tech = list("biotech" = 2, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) - reliability_base = 76 - build_path = "/obj/item/device/mass_spectrometer" +datum/design/mass_spectrometer + name = "Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood." + id = "mass_spectrometer" + req_tech = list("biotech" = 2, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 30, "$glass" = 20) + reliability_base = 76 + build_path = "/obj/item/device/mass_spectrometer" - adv_mass_spectrometer - name = "Advanced Mass-Spectrometer" - desc = "A device for analyzing chemicals in the blood and their quantities." - id = "adv_mass_spectrometer" - req_tech = list("biotech" = 2, "magnets" = 4) - build_type = PROTOLATHE - materials = list("$metal" = 30, "$glass" = 20) - reliability_base = 74 - build_path = "/obj/item/device/mass_spectrometer/adv" +datum/design/adv_mass_spectrometer + name = "Advanced Mass-Spectrometer" + desc = "A device for analyzing chemicals in the blood and their quantities." + id = "adv_mass_spectrometer" + req_tech = list("biotech" = 2, "magnets" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 30, "$glass" = 20) + reliability_base = 74 + build_path = "/obj/item/device/mass_spectrometer/adv" - mmi - name = "Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." - 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" +datum/design/mmi + name = "Man-Machine Interface" + desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." + 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" - mmi_radio - 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." - 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" +datum/design/mmi_radio + 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." + 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" - synthetic_flash - name = "Synthetic Flash" - desc = "When a problem arises, SCIENCE is the solution." - 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" +datum/design/synthetic_flash + name = "Synthetic Flash" + desc = "When a problem arises, SCIENCE is the solution." + 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" ///////////////////////////////////////// /////////////////Weapons///////////////// ///////////////////////////////////////// - nuclear_gun - name = "Advanced Energy Gun" - desc = "An energy gun with an experimental miniaturized reactor." - id = "nuclear_gun" - req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500) - reliability_base = 76 - build_path = "/obj/item/weapon/gun/energy/gun/nuclear" - locked = 1 +datum/design/nuclear_gun + name = "Advanced Energy Gun" + desc = "An energy gun with an experimental miniaturized reactor." + id = "nuclear_gun" + req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500) + reliability_base = 76 + build_path = "/obj/item/weapon/gun/energy/gun/nuclear" + locked = 1 - stunrevolver - name = "Stun Revolver" - desc = "The prize of the Head of Security." - id = "stunrevolver" - req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 4000) - build_path = "/obj/item/weapon/gun/energy/stunrevolver" - locked = 1 +datum/design/stunrevolver + name = "Stun Revolver" + desc = "The prize of the Head of Security." + id = "stunrevolver" + req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 4000) + build_path = "/obj/item/weapon/gun/energy/stunrevolver" + locked = 1 - lasercannon - name = "Laser Cannon" - desc = "A heavy duty laser cannon." - id = "lasercannon" - req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000) - build_path = "/obj/item/weapon/gun/energy/lasercannon" - locked = 1 +datum/design/lasercannon + name = "Laser Cannon" + desc = "A heavy duty laser cannon." + id = "lasercannon" + req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000) + build_path = "/obj/item/weapon/gun/energy/lasercannon" + locked = 1 - decloner - name = "Decloner" - desc = "Your opponent will bubble into a messy pile of goop." - id = "decloner" - req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6) - build_type = PROTOLATHE - materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) - build_path = "/obj/item/weapon/gun/energy/decloner" - locked = 1 +datum/design/decloner + name = "Decloner" + desc = "Your opponent will bubble into a messy pile of goop." + id = "decloner" + req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6) + build_type = PROTOLATHE + materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40) + build_path = "/obj/item/weapon/gun/energy/decloner" + locked = 1 /* - chemsprayer - name = "Chem Sprayer" - desc = "An advanced chem spraying device." - id = "chemsprayer" - req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000) - reliability_base = 100 - build_path = "/obj/item/weapon/chemsprayer" +datum/design/chemsprayer + name = "Chem Sprayer" + desc = "An advanced chem spraying device." + id = "chemsprayer" + req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000) + reliability_base = 100 + build_path = "/obj/item/weapon/chemsprayer" */ - rapidsyringe - name = "Rapid Syringe Gun" - desc = "A gun that fires many syringes." - id = "rapidsyringe" - req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000) - build_path = "/obj/item/weapon/gun/syringe/rapidsyringe" +datum/design/rapidsyringe + name = "Rapid Syringe Gun" + desc = "A gun that fires many syringes." + id = "rapidsyringe" + req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000) + build_path = "/obj/item/weapon/gun/syringe/rapidsyringe" /* - 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) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000) - build_path = "/obj/item/weapon/gun/energy/crossbow/largecrossbow" +datum/design/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) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000) + build_path = "/obj/item/weapon/gun/energy/crossbow/largecrossbow" */ - temp_gun - name = "Temperature Gun" - desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want - id = "temp_gun" - req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) - build_path = "/obj/item/weapon/gun/energy/temperature" - locked = 1 +datum/design/temp_gun + name = "Temperature Gun" + desc = "A gun that shoots temperature bullet energythings to change temperature."//Change it if you want + id = "temp_gun" + req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000) + build_path = "/obj/item/weapon/gun/energy/temperature" + locked = 1 - flora_gun - name = "Floral Somatoray" - desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." - id = "flora_gun" - req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500) - build_path = "/obj/item/weapon/gun/energy/floragun" +datum/design/flora_gun + name = "Floral Somatoray" + desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." + id = "flora_gun" + req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500) + build_path = "/obj/item/weapon/gun/energy/floragun" - large_grenade - name = "Large Grenade" - desc = "A grenade that affects a larger area and use larger containers." - id = "large_Grenade" - req_tech = list("combat" = 3, "materials" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 3000) - reliability_base = 79 - build_path = "/obj/item/weapon/grenade/chem_grenade/large" +datum/design/large_grenade + name = "Large Grenade" + desc = "A grenade that affects a larger area and use larger containers." + id = "large_Grenade" + req_tech = list("combat" = 3, "materials" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 3000) + reliability_base = 79 + build_path = "/obj/item/weapon/grenade/chem_grenade/large" - smg - name = "Submachine Gun" - desc = "A lightweight, fast firing gun." - id = "smg" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) - build_path = "/obj/item/weapon/gun/projectile/automatic" - locked = 1 +datum/design/smg + name = "Submachine Gun" + desc = "A lightweight, fast firing gun." + id = "smg" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000) + build_path = "/obj/item/weapon/gun/projectile/automatic" + locked = 1 - ammo_9mm - name = "Ammunition Box (9mm)" - desc = "A box of prototype 9mm ammunition." - id = "ammo_9mm" - req_tech = list("combat" = 4, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 3750, "$silver" = 100) - build_path = "/obj/item/ammo_magazine/c9mm" +datum/design/ammo_9mm + name = "Ammunition Box (9mm)" + desc = "A box of prototype 9mm ammunition." + id = "ammo_9mm" + req_tech = list("combat" = 4, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 3750, "$silver" = 100) + build_path = "/obj/item/ammo_magazine/c9mm" - stunshell - name = "Stun Shell" - desc = "A stunning shell for a shotgun." - id = "stunshell" - req_tech = list("combat" = 3, "materials" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 4000) - build_path = "/obj/item/ammo_casing/shotgun/stunshell" +datum/design/stunshell + name = "Stun Shell" + desc = "A stunning shell for a shotgun." + id = "stunshell" + req_tech = list("combat" = 3, "materials" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 4000) + build_path = "/obj/item/ammo_casing/shotgun/stunshell" ///////////////////////////////////////// /////////////////Mining////////////////// ///////////////////////////////////////// - jackhammer - name = "Sonic Jackhammer" - desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." - id = "jackhammer" - req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500) - build_path = "/obj/item/weapon/pickaxe/jackhammer" +datum/design/jackhammer + name = "Sonic Jackhammer" + desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards." + id = "jackhammer" + req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500) + build_path = "/obj/item/weapon/pickaxe/jackhammer" - drill - name = "Mining Drill" - desc = "Yours is the drill that will pierce through the rock walls." - id = "drill" - req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners. - build_path = "/obj/item/weapon/pickaxe/drill" +datum/design/drill + name = "Mining Drill" + desc = "Yours is the drill that will pierce through the rock walls." + id = "drill" + req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners. + build_path = "/obj/item/weapon/pickaxe/drill" - plasmacutter - name = "Plasma Cutter" - desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." - id = "plasmacutter" - req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500) - reliability_base = 79 - build_path = "/obj/item/weapon/pickaxe/plasmacutter" +datum/design/plasmacutter + name = "Plasma Cutter" + desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff." + id = "plasmacutter" + req_tech = list("materials" = 4, "plasmatech" = 3, "engineering" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$plasma" = 500) + reliability_base = 79 + build_path = "/obj/item/weapon/pickaxe/plasmacutter" - pick_diamond - name = "Diamond Pickaxe" - desc = "A pickaxe with a diamond pick head, this is just like minecraft." - id = "pick_diamond" - req_tech = list("materials" = 6) - build_type = PROTOLATHE - materials = list("$diamond" = 3000) - build_path = "/obj/item/weapon/pickaxe/diamond" +datum/design/pick_diamond + name = "Diamond Pickaxe" + desc = "A pickaxe with a diamond pick head, this is just like minecraft." + id = "pick_diamond" + req_tech = list("materials" = 6) + build_type = PROTOLATHE + materials = list("$diamond" = 3000) + build_path = "/obj/item/weapon/pickaxe/diamond" - drill_diamond - name = "Diamond Mining Drill" - desc = "Yours is the drill that will pierce the heavens!" - id = "drill_diamond" - req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4) - build_type = PROTOLATHE - 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/drill_diamond + name = "Diamond Mining Drill" + desc = "Yours is the drill that will pierce the heavens!" + id = "drill_diamond" + req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed. + reliability_base = 79 + build_path = "/obj/item/weapon/pickaxe/diamonddrill" - mesons - name = "Optical Meson Scanners" - desc = "Used for seeing walls, floors, and stuff through anything." - id = "mesons" - req_tech = list("magnets" = 2, "engineering" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/clothing/glasses/meson" +datum/design/mesons + name = "Optical Meson Scanners" + desc = "Used for seeing walls, floors, and stuff through anything." + id = "mesons" + req_tech = list("magnets" = 2, "engineering" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/clothing/glasses/meson" ///////////////////////////////////////// //////////////Blue Space///////////////// ///////////////////////////////////////// - beacon - name = "Tracking Beacon" - desc = "A blue space tracking beacon." - id = "beacon" - req_tech = list("bluespace" = 1) - build_type = PROTOLATHE - materials = list ("$metal" = 20, "$glass" = 10) - build_path = "/obj/item/device/radio/beacon" +datum/design/beacon + name = "Tracking Beacon" + desc = "A blue space tracking beacon." + id = "beacon" + req_tech = list("bluespace" = 1) + build_type = PROTOLATHE + materials = list ("$metal" = 20, "$glass" = 10) + build_path = "/obj/item/device/radio/beacon" - bag_holding - name = "Bag of Holding" - desc = "A backpack that opens into a localized pocket of Blue Space." - id = "bag_holding" - req_tech = list("bluespace" = 4, "materials" = 6) - build_type = PROTOLATHE - materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250) - reliability_base = 80 - build_path = "/obj/item/weapon/storage/backpack/holding" +datum/design/bag_holding + name = "Bag of Holding" + desc = "A backpack that opens into a localized pocket of Blue Space." + id = "bag_holding" + req_tech = list("bluespace" = 4, "materials" = 6) + build_type = PROTOLATHE + materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250) + reliability_base = 80 + build_path = "/obj/item/weapon/storage/backpack/holding" ///////////////////////////////////////// /////////////////HUDs//////////////////// ///////////////////////////////////////// - health_hud - name = "Health Scanner HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." - id = "health_hud" - req_tech = list("biotech" = 2, "magnets" = 3) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/clothing/glasses/hud/health" +datum/design/health_hud + name = "Health Scanner HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." + id = "health_hud" + req_tech = list("biotech" = 2, "magnets" = 3) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/clothing/glasses/hud/health" - security_hud - name = "Security HUD" - desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." - id = "security_hud" - req_tech = list("magnets" = 3, "combat" = 2) - build_type = PROTOLATHE - materials = list("$metal" = 50, "$glass" = 50) - build_path = "/obj/item/clothing/glasses/hud/security" - locked = 1 +datum/design/security_hud + name = "Security HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status." + id = "security_hud" + req_tech = list("magnets" = 3, "combat" = 2) + build_type = PROTOLATHE + materials = list("$metal" = 50, "$glass" = 50) + build_path = "/obj/item/clothing/glasses/hud/security" + locked = 1 ///////////////////////////////////////// //////////////////Test/////////////////// @@ -1543,8 +1541,9 @@ datum m_amt = 30 g_amt = 10 var/datum/design/blueprint - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) + +/obj/item/weapon/disk/design_disk/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 1a2a880a56a..e3253c2d128 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -13,91 +13,91 @@ Note: Must be placed within 3 tiles of the R&D Console var/obj/item/weapon/loaded_item = null var/decon_mod = 1 - New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) - RefreshParts() - +/obj/machinery/r_n_d/destructive_analyzer/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/micro_laser(src) RefreshParts() - var/T = 0 - for(var/obj/item/weapon/stock_parts/S in src) - T += S.rating * 0.1 - T = between (0, T, 1) - decon_mod = T - meteorhit() - del(src) +/obj/machinery/r_n_d/destructive_analyzer/RefreshParts() + var/T = 0 + for(var/obj/item/weapon/stock_parts/S in src) + T += S.rating * 0.1 + T = between (0, T, 1) + decon_mod = T + +/obj/machinery/r_n_d/destructive_analyzer/meteorhit() + del(src) + return + +/obj/machinery/r_n_d/destructive_analyzer/proc/ConvertReqString2List(var/list/source_list) + var/list/temp_list = params2list(source_list) + for(var/O in temp_list) + temp_list[O] = text2num(temp_list[O]) + return temp_list + + +/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob) + if (shocked) + shock(user,50) + if (istype(O, /obj/item/weapon/screwdriver)) + if (!opened) + opened = 1 + if(linked_console) + linked_console.linked_destroy = null + linked_console = null + icon_state = "d_analyzer_t" + user << "You open the maintenance hatch of [src]." + else + opened = 0 + icon_state = "d_analyzer" + user << "You close the maintenance hatch of [src]." return - - proc/ConvertReqString2List(var/list/source_list) - var/list/temp_list = params2list(source_list) - for(var/O in temp_list) - temp_list[O] = text2num(temp_list[O]) - return temp_list - - - attackby(var/obj/O as obj, var/mob/user as mob) - if (shocked) - shock(user,50) - if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_destroy = null - linked_console = null - icon_state = "d_analyzer_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "d_analyzer" - user << "You close the maintenance hatch of [src]." - return - if (opened) - if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, '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) - I.loc = src.loc - del(src) - return 1 - else - user << "\red You can't load the [src.name] while it's opened." - return 1 - if (disabled) - return - if (!linked_console) - user << "\red The protolathe must be linked to an R&D console first!" - return - if (busy) - user << "\red The protolathe is busy right now." - return - if (istype(O, /obj/item) && !loaded_item) - if(!O.origin_tech) - user << "\red This doesn't seem to have a tech origin!" - return - var/list/temp_tech = ConvertReqString2List(O.origin_tech) - if (temp_tech.len == 0) - user << "\red You cannot deconstruct this item!" - return - if(O.reliability < 90 && O.crit_fail == 0) - usr << "\red Item is neither reliable enough or broken enough to learn from." - return - busy = 1 - loaded_item = O - user.drop_item() - O.loc = src - user << "\blue You add the [O.name] to the machine!" - flick("d_analyzer_la", src) - spawn(10) - icon_state = "d_analyzer_l" - busy = 0 + if (opened) + if(istype(O, /obj/item/weapon/crowbar)) + playsound(src.loc, '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) + I.loc = src.loc + del(src) + return 1 + else + user << "\red You can't load the [src.name] while it's opened." + return 1 + if (disabled) return + if (!linked_console) + user << "\red The protolathe must be linked to an R&D console first!" + return + if (busy) + user << "\red The protolathe is busy right now." + return + if (istype(O, /obj/item) && !loaded_item) + if(!O.origin_tech) + user << "\red This doesn't seem to have a tech origin!" + return + var/list/temp_tech = ConvertReqString2List(O.origin_tech) + if (temp_tech.len == 0) + user << "\red You cannot deconstruct this item!" + return + if(O.reliability < 90 && O.crit_fail == 0) + usr << "\red Item is neither reliable enough or broken enough to learn from." + return + busy = 1 + loaded_item = O + user.drop_item() + O.loc = src + user << "\blue You add the [O.name] to the machine!" + flick("d_analyzer_la", src) + spawn(10) + icon_state = "d_analyzer_l" + busy = 0 + return //For testing purposes only. /*/obj/item/weapon/deconstruction_test diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 85ac38bf83d..534fa761db5 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -118,56 +118,56 @@ var/global/list/obj/machinery/message_server/message_servers = list() var/value var/details - New(var/param_variable,var/param_value = 0) - variable = param_variable - value = param_value +/datum/feedback_variable/New(var/param_variable,var/param_value = 0) + variable = param_variable + value = param_value - proc/inc(var/num = 1) +/datum/feedback_variable/proc/inc(var/num = 1) + if(isnum(value)) + value += num + else + value = text2num(value) if(isnum(value)) value += num else - value = text2num(value) - if(isnum(value)) - value += num - else - value = num + value = num - proc/dec(var/num = 1) +/datum/feedback_variable/proc/dec(var/num = 1) + if(isnum(value)) + value -= num + else + value = text2num(value) if(isnum(value)) value -= num else - value = text2num(value) - if(isnum(value)) - value -= num - else - value = -num + value = -num - proc/set_value(var/num) - if(isnum(num)) - value = num +/datum/feedback_variable/proc/set_value(var/num) + if(isnum(num)) + value = num - proc/get_value() - return value +/datum/feedback_variable/proc/get_value() + return value - proc/get_variable() - return variable +/datum/feedback_variable/proc/get_variable() + return variable - proc/set_details(var/text) - if(istext(text)) +/datum/feedback_variable/proc/set_details(var/text) + if(istext(text)) + details = text + +/datum/feedback_variable/proc/add_details(var/text) + if(istext(text)) + if(!details) details = text + else + details += " [text]" - proc/add_details(var/text) - if(istext(text)) - if(!details) - details = text - else - details += " [text]" +/datum/feedback_variable/proc/get_details() + return details - proc/get_details() - return details - - proc/get_parsed() - return list(variable,value,details) +/datum/feedback_variable/proc/get_parsed() + return list(variable,value,details) var/obj/machinery/blackbox_recorder/blackbox @@ -197,109 +197,109 @@ var/obj/machinery/blackbox_recorder/blackbox var/list/datum/feedback_variable/feedback = new() //Only one can exsist in the world! - New() - if(blackbox) - if(istype(blackbox,/obj/machinery/blackbox_recorder)) - del(src) - blackbox = src +/obj/machinery/blackbox_recorder/New() + if(blackbox) + if(istype(blackbox,/obj/machinery/blackbox_recorder)) + del(src) + blackbox = src - Del() - var/turf/T = locate(1,1,2) - if(T) - blackbox = null - var/obj/machinery/blackbox_recorder/BR = new/obj/machinery/blackbox_recorder(T) - BR.msg_common = msg_common - BR.msg_science = msg_science - BR.msg_command = msg_command - BR.msg_medical = msg_medical - BR.msg_engineering = msg_engineering - BR.msg_security = msg_security - BR.msg_deathsquad = msg_deathsquad - BR.msg_syndicate = msg_syndicate - BR.msg_mining = msg_mining - BR.msg_cargo = msg_cargo - BR.feedback = feedback - BR.messages = messages - BR.messages_admin = messages_admin - if(blackbox != BR) - blackbox = BR - ..() +/obj/machinery/blackbox_recorder/Del() + var/turf/T = locate(1,1,2) + if(T) + blackbox = null + var/obj/machinery/blackbox_recorder/BR = new/obj/machinery/blackbox_recorder(T) + BR.msg_common = msg_common + BR.msg_science = msg_science + BR.msg_command = msg_command + BR.msg_medical = msg_medical + BR.msg_engineering = msg_engineering + BR.msg_security = msg_security + BR.msg_deathsquad = msg_deathsquad + BR.msg_syndicate = msg_syndicate + BR.msg_mining = msg_mining + BR.msg_cargo = msg_cargo + BR.feedback = feedback + BR.messages = messages + BR.messages_admin = messages_admin + if(blackbox != BR) + blackbox = BR + ..() - proc/find_feedback_datum(var/variable) - for(var/datum/feedback_variable/FV in feedback) - if(FV.get_variable() == variable) - return FV - var/datum/feedback_variable/FV = new(variable) - feedback += FV - return FV +/obj/machinery/blackbox_recorder/proc/find_feedback_datum(var/variable) + for(var/datum/feedback_variable/FV in feedback) + if(FV.get_variable() == variable) + return FV + var/datum/feedback_variable/FV = new(variable) + feedback += FV + return FV - proc/get_round_feedback() - return feedback +/obj/machinery/blackbox_recorder/proc/get_round_feedback() + return feedback - proc/round_end_data_gathering() +/obj/machinery/blackbox_recorder/proc/round_end_data_gathering() - var/pda_msg_amt = 0 - var/rc_msg_amt = 0 + var/pda_msg_amt = 0 + var/rc_msg_amt = 0 - for(var/obj/machinery/message_server/MS in world) - if(MS.pda_msgs.len > pda_msg_amt) - pda_msg_amt = MS.pda_msgs.len - if(MS.rc_msgs.len > rc_msg_amt) - rc_msg_amt = MS.rc_msgs.len + for(var/obj/machinery/message_server/MS in world) + if(MS.pda_msgs.len > pda_msg_amt) + pda_msg_amt = MS.pda_msgs.len + if(MS.rc_msgs.len > rc_msg_amt) + rc_msg_amt = MS.rc_msgs.len - feedback_set_details("radio_usage","") + feedback_set_details("radio_usage","") - feedback_add_details("radio_usage","COM-[msg_common.len]") - feedback_add_details("radio_usage","SCI-[msg_science.len]") - feedback_add_details("radio_usage","HEA-[msg_command.len]") - feedback_add_details("radio_usage","MED-[msg_medical.len]") - feedback_add_details("radio_usage","ENG-[msg_engineering.len]") - feedback_add_details("radio_usage","SEC-[msg_security.len]") - feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]") - feedback_add_details("radio_usage","SYN-[msg_syndicate.len]") - feedback_add_details("radio_usage","MIN-[msg_mining.len]") - feedback_add_details("radio_usage","CAR-[msg_cargo.len]") - feedback_add_details("radio_usage","OTH-[messages.len]") - feedback_add_details("radio_usage","PDA-[pda_msg_amt]") - feedback_add_details("radio_usage","RC-[rc_msg_amt]") + feedback_add_details("radio_usage","COM-[msg_common.len]") + feedback_add_details("radio_usage","SCI-[msg_science.len]") + feedback_add_details("radio_usage","HEA-[msg_command.len]") + feedback_add_details("radio_usage","MED-[msg_medical.len]") + feedback_add_details("radio_usage","ENG-[msg_engineering.len]") + feedback_add_details("radio_usage","SEC-[msg_security.len]") + feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]") + feedback_add_details("radio_usage","SYN-[msg_syndicate.len]") + feedback_add_details("radio_usage","MIN-[msg_mining.len]") + feedback_add_details("radio_usage","CAR-[msg_cargo.len]") + feedback_add_details("radio_usage","OTH-[messages.len]") + feedback_add_details("radio_usage","PDA-[pda_msg_amt]") + feedback_add_details("radio_usage","RC-[rc_msg_amt]") - feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set. + feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set. - //This proc is only to be called at round end. - proc/save_all_data_to_sql() - if(!feedback) return +//This proc is only to be called at round end. +/obj/machinery/blackbox_recorder/proc/save_all_data_to_sql() + if(!feedback) return - round_end_data_gathering() //round_end time logging and some other data processing + round_end_data_gathering() //round_end time logging and some other data processing - var/user = sqlfdbklogin - var/pass = sqlfdbkpass - var/db = sqlfdbkdb - var/address = sqladdress - var/port = sqlport + var/user = sqlfdbklogin + var/pass = sqlfdbkpass + var/db = sqlfdbkdb + var/address = sqladdress + var/port = sqlport - var/DBConnection/dbcon = new() + var/DBConnection/dbcon = new() - dbcon.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") - if(!dbcon.IsConnected()) return - var/round_id + dbcon.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]") + if(!dbcon.IsConnected()) return + var/round_id - var/DBQuery/query = dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM erro_feedback") - query.Execute() - while(query.NextRow()) - round_id = query.item[1] + var/DBQuery/query = dbcon.NewQuery("SELECT MAX(round_id) AS round_id FROM erro_feedback") + query.Execute() + while(query.NextRow()) + round_id = query.item[1] - if(!isnum(round_id)) - round_id = text2num(round_id) - round_id++ + if(!isnum(round_id)) + round_id = text2num(round_id) + round_id++ - for(var/datum/feedback_variable/FV in feedback) - var/sql = "INSERT INTO erro_feedback VALUES (null, Now(), [round_id], \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")" - var/DBQuery/query_insert = dbcon.NewQuery(sql) - query_insert.Execute() + for(var/datum/feedback_variable/FV in feedback) + var/sql = "INSERT INTO erro_feedback VALUES (null, Now(), [round_id], \"[FV.get_variable()]\", [FV.get_value()], \"[FV.get_details()]\")" + var/DBQuery/query_insert = dbcon.NewQuery(sql) + query_insert.Execute() - dbcon.Disconnect() + dbcon.Disconnect() // Sanitize inputs to avoid SQL injection attacks proc/sql_sanitize_text(var/text) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 4f3221a5512..f600b26ac63 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -24,154 +24,154 @@ Note: Must be placed west/left of and R&D console to function. var/adamantine_amount = 0.0 - New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/protolathe(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/stock_parts/manipulator(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) - RefreshParts() - - proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater. - return m_amount + g_amount + gold_amount + silver_amount + plasma_amount + uranium_amount + diamond_amount + clown_amount - +/obj/machinery/r_n_d/protolathe/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/protolathe(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/matter_bin(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/stock_parts/manipulator(src) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) + component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src) 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 - for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) - T += M.rating - max_material_storage = T * 75000 - attackby(var/obj/item/O as obj, var/mob/user as mob) - if (shocked) - shock(user,50) - if (O.is_open_container()) - return 1 - if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - if(linked_console) - linked_console.linked_lathe = null - linked_console = null - icon_state = "protolathe_t" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "protolathe" - user << "You close the maintenance hatch of [src]." - return - if (opened) - if(istype(O, /obj/item/weapon/crowbar)) - playsound(src.loc, '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(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) - reagents.trans_to(I, reagents.total_volume) - if(I.reliability != 100 && crit_fail) - I.crit_fail = 1 - I.loc = src.loc - if(m_amount >= 3750) - var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) - G.amount = round(m_amount / G.perunit) - if(g_amount >= 3750) - var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) - G.amount = round(g_amount / G.perunit) - if(plasma_amount >= 2000) - var/obj/item/stack/sheet/plasma/G = new /obj/item/stack/sheet/plasma(src.loc) - G.amount = round(plasma_amount / G.perunit) - if(silver_amount >= 2000) - var/obj/item/stack/sheet/silver/G = new /obj/item/stack/sheet/silver(src.loc) - G.amount = round(silver_amount / G.perunit) - if(gold_amount >= 2000) - var/obj/item/stack/sheet/gold/G = new /obj/item/stack/sheet/gold(src.loc) - G.amount = round(gold_amount / G.perunit) - if(uranium_amount >= 2000) - var/obj/item/stack/sheet/uranium/G = new /obj/item/stack/sheet/uranium(src.loc) - G.amount = round(uranium_amount / G.perunit) - if(diamond_amount >= 2000) - var/obj/item/stack/sheet/diamond/G = new /obj/item/stack/sheet/diamond(src.loc) - G.amount = round(diamond_amount / G.perunit) - if(clown_amount >= 2000) - var/obj/item/stack/sheet/clown/G = new /obj/item/stack/sheet/clown(src.loc) - G.amount = round(clown_amount / G.perunit) - if(adamantine_amount >= 2000) - var/obj/item/stack/sheet/adamantine/G = new /obj/item/stack/sheet/adamantine(src.loc) - G.amount = round(adamantine_amount / G.perunit) - del(src) - return 1 - else - user << "\red You can't load the [src.name] while it's opened." - return 1 - if (disabled) - return - if (!linked_console) - user << "\The protolathe must be linked to an R&D console first!" - return 1 - if (busy) - user << "\red The protolathe is busy. Please wait for completion of previous operation." - return 1 - if (!istype(O, /obj/item/stack/sheet)) - user << "\red You cannot insert this item into the protolathe!" - return 1 - if (stat) - return 1 - if(istype(O,/obj/item/stack/sheet)) - var/obj/item/stack/sheet/S = O - if (TotalMaterials() + S.perunit > max_material_storage) - user << "\red The protolathe's material bin is full. Please remove material before adding more." - return 1 +/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 + plasma_amount + uranium_amount + diamond_amount + clown_amount - var/obj/item/stack/sheet/stack = O - var/amount = round(input("How many sheets do you want to add?") as num)//No decimals - if(amount < 0)//No negative numbers - amount = 0 - if(amount == 0) - return - if(amount > stack.amount) - amount = stack.amount - if(max_material_storage - TotalMaterials() < (amount*stack.perunit))//Can't overfill - amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit)) +/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 + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + T += M.rating + max_material_storage = T * 75000 - src.overlays += "protolathe_[stack.name]" - sleep(10) - src.overlays -= "protolathe_[stack.name]" - - icon_state = "protolathe" - busy = 1 - use_power(max(1000, (3750*amount/10))) - spawn(16) - user << "\blue You add [amount] sheets to the [src.name]." +/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob) + if (shocked) + shock(user,50) + if (O.is_open_container()) + return 1 + if (istype(O, /obj/item/weapon/screwdriver)) + if (!opened) + opened = 1 + if(linked_console) + linked_console.linked_lathe = null + linked_console = null + icon_state = "protolathe_t" + user << "You open the maintenance hatch of [src]." + else + opened = 0 icon_state = "protolathe" - if(istype(stack, /obj/item/stack/sheet/metal)) - m_amount += amount * 3750 - else if(istype(stack, /obj/item/stack/sheet/glass)) - g_amount += amount * 3750 - else if(istype(stack, /obj/item/stack/sheet/gold)) - gold_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/silver)) - silver_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/plasma)) - plasma_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/uranium)) - uranium_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/diamond)) - diamond_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/clown)) - clown_amount += amount * 2000 - else if(istype(stack, /obj/item/stack/sheet/adamantine)) - adamantine_amount += amount * 2000 - stack.use(amount) - busy = 0 - src.updateUsrDialog() - return \ No newline at end of file + user << "You close the maintenance hatch of [src]." + return + if (opened) + if(istype(O, /obj/item/weapon/crowbar)) + playsound(src.loc, '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(istype(I, /obj/item/weapon/reagent_containers/glass/beaker)) + reagents.trans_to(I, reagents.total_volume) + if(I.reliability != 100 && crit_fail) + I.crit_fail = 1 + I.loc = src.loc + if(m_amount >= 3750) + var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(src.loc) + G.amount = round(m_amount / G.perunit) + if(g_amount >= 3750) + var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(src.loc) + G.amount = round(g_amount / G.perunit) + if(plasma_amount >= 2000) + var/obj/item/stack/sheet/plasma/G = new /obj/item/stack/sheet/plasma(src.loc) + G.amount = round(plasma_amount / G.perunit) + if(silver_amount >= 2000) + var/obj/item/stack/sheet/silver/G = new /obj/item/stack/sheet/silver(src.loc) + G.amount = round(silver_amount / G.perunit) + if(gold_amount >= 2000) + var/obj/item/stack/sheet/gold/G = new /obj/item/stack/sheet/gold(src.loc) + G.amount = round(gold_amount / G.perunit) + if(uranium_amount >= 2000) + var/obj/item/stack/sheet/uranium/G = new /obj/item/stack/sheet/uranium(src.loc) + G.amount = round(uranium_amount / G.perunit) + if(diamond_amount >= 2000) + var/obj/item/stack/sheet/diamond/G = new /obj/item/stack/sheet/diamond(src.loc) + G.amount = round(diamond_amount / G.perunit) + if(clown_amount >= 2000) + var/obj/item/stack/sheet/clown/G = new /obj/item/stack/sheet/clown(src.loc) + G.amount = round(clown_amount / G.perunit) + if(adamantine_amount >= 2000) + var/obj/item/stack/sheet/adamantine/G = new /obj/item/stack/sheet/adamantine(src.loc) + G.amount = round(adamantine_amount / G.perunit) + del(src) + return 1 + else + user << "\red You can't load the [src.name] while it's opened." + return 1 + if (disabled) + return + if (!linked_console) + user << "\The protolathe must be linked to an R&D console first!" + return 1 + if (busy) + user << "\red The protolathe is busy. Please wait for completion of previous operation." + return 1 + if (!istype(O, /obj/item/stack/sheet)) + user << "\red You cannot insert this item into the protolathe!" + return 1 + if (stat) + return 1 + if(istype(O,/obj/item/stack/sheet)) + var/obj/item/stack/sheet/S = O + if (TotalMaterials() + S.perunit > max_material_storage) + user << "\red The protolathe's material bin is full. Please remove material before adding more." + return 1 + + var/obj/item/stack/sheet/stack = O + var/amount = round(input("How many sheets do you want to add?") as num)//No decimals + if(amount < 0)//No negative numbers + amount = 0 + if(amount == 0) + return + if(amount > stack.amount) + amount = stack.amount + if(max_material_storage - TotalMaterials() < (amount*stack.perunit))//Can't overfill + amount = min(stack.amount, round((max_material_storage-TotalMaterials())/stack.perunit)) + + src.overlays += "protolathe_[stack.name]" + sleep(10) + src.overlays -= "protolathe_[stack.name]" + + icon_state = "protolathe" + busy = 1 + use_power(max(1000, (3750*amount/10))) + spawn(16) + user << "\blue You add [amount] sheets to the [src.name]." + icon_state = "protolathe" + if(istype(stack, /obj/item/stack/sheet/metal)) + m_amount += amount * 3750 + else if(istype(stack, /obj/item/stack/sheet/glass)) + g_amount += amount * 3750 + else if(istype(stack, /obj/item/stack/sheet/gold)) + gold_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/silver)) + silver_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/plasma)) + plasma_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/uranium)) + uranium_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/diamond)) + diamond_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/clown)) + clown_amount += amount * 2000 + else if(istype(stack, /obj/item/stack/sheet/adamantine)) + adamantine_amount += amount * 2000 + stack.use(amount) + busy = 0 + src.updateUsrDialog() + return \ No newline at end of file diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 679e4c34f19..f68a3304e83 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -48,840 +48,840 @@ won't update every console in existence) but it's more of a hassle to do. Also, req_access = list(access_tox) //Data and setting manipulation requires scientist access. - proc - CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. - var/datum/tech/check_tech - var/return_name = null - for(var/T in typesof(/datum/tech) - /datum/tech) - check_tech = null - check_tech = new T() - if(check_tech.id == ID) - return_name = check_tech.name - del(check_tech) - check_tech = null - break - return return_name +/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID. + var/datum/tech/check_tech + var/return_name = null + for(var/T in typesof(/datum/tech) - /datum/tech) + check_tech = null + check_tech = new T() + if(check_tech.id == ID) + return_name = check_tech.name + del(check_tech) + check_tech = null + break - CallMaterialName(var/ID) - var/datum/reagent/temp_reagent - var/return_name = null - if (copytext(ID, 1, 2) == "$") - return_name = copytext(ID, 2) - switch(return_name) - if("metal") - return_name = "Metal" - if("glass") - return_name = "Glass" - if("gold") - return_name = "Gold" - if("silver") - return_name = "Silver" - if("plasma") - return_name = "Solid Plasma" - if("uranium") - return_name = "Uranium" - if("diamond") - return_name = "Diamond" - if("clown") - return_name = "Bananium" - else - 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 - del(temp_reagent) - temp_reagent = null - break - return return_name + return return_name - 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.opened) - continue - if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) - if(linked_destroy == null) - linked_destroy = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/protolathe)) - if(linked_lathe == null) - linked_lathe = D - D.linked_console = src - else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) - if(linked_imprinter == null) - linked_imprinter = D - 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 - griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in world) - for(var/datum/tech/T in files.known_tech) - C.files.AddTech2Known(T) - for(var/datum/design/D in files.known_designs) - C.files.AddDesign2Known(D) - C.files.RefreshResearch() - - - New() - ..() - files = new /datum/research(src) //Setup the research data holder. - if(!id) - for(var/obj/machinery/r_n_d/server/centcom/S in world) - S.initialize() +/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID) + var/datum/reagent/temp_reagent + var/return_name = null + if (copytext(ID, 1, 2) == "$") + return_name = copytext(ID, 2) + switch(return_name) + if("metal") + return_name = "Metal" + if("glass") + return_name = "Glass" + if("gold") + return_name = "Gold" + if("silver") + return_name = "Silver" + if("plasma") + return_name = "Solid Plasma" + if("uranium") + return_name = "Uranium" + if("diamond") + return_name = "Diamond" + if("clown") + return_name = "Bananium" + else + 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 + del(temp_reagent) + temp_reagent = null break + return return_name - initialize() - SyncRDevices() +/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.opened) + continue + if(istype(D, /obj/machinery/r_n_d/destructive_analyzer)) + if(linked_destroy == null) + linked_destroy = D + D.linked_console = src + else if(istype(D, /obj/machinery/r_n_d/protolathe)) + if(linked_lathe == null) + linked_lathe = D + D.linked_console = src + else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter)) + if(linked_imprinter == null) + linked_imprinter = D + 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() + for(var/obj/machinery/r_n_d/server/centcom/C in world) + for(var/datum/tech/T in files.known_tech) + C.files.AddTech2Known(T) + for(var/datum/design/D in files.known_designs) + C.files.AddDesign2Known(D) + C.files.RefreshResearch() + + +/obj/machinery/computer/rdconsole/New() + ..() + files = new /datum/research(src) //Setup the research data holder. + if(!id) + for(var/obj/machinery/r_n_d/server/centcom/S in world) + S.initialize() + break + +/obj/machinery/computer/rdconsole/initialize() + SyncRDevices() /* Instead of calling this every tick, it is only being called when needed - process() - griefProtection() +/obj/machinery/computer/rdconsole/process() + griefProtection() */ - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - //The construction/deconstruction of the console code. - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - //Loading a disk into it. - else if(istype(D, /obj/item/weapon/disk)) - if(t_disk || d_disk) - 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 +/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) + //The construction/deconstruction of the console code. + if(istype(D, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) else - user << "\red Machine cannot accept disks in that format." - return - user.drop_item() - D.loc = src - user << "\blue You add the disk to the machine!" - else if(istype(D, /obj/item/weapon/card/emag) && !emagged) - playsound(src.loc, 'sparks4.ogg', 75, 1) - emagged = 1 - user << "\blue You you disable the security protocols" - src.updateUsrDialog() - return - - Topic(href, href_list) - if(..()) + user << "\blue You disconnect the monitor." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/rdconsole/M = new /obj/item/weapon/circuitboard/rdconsole( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + //Loading a disk into it. + else if(istype(D, /obj/item/weapon/disk)) + if(t_disk || d_disk) + user << "A disk is already loaded into the machine." return - add_fingerprint(usr) + 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." + return + user.drop_item() + D.loc = src + user << "\blue You add the disk to the machine!" + else if(istype(D, /obj/item/weapon/card/emag) && !emagged) + playsound(src.loc, 'sparks4.ogg', 75, 1) + emagged = 1 + user << "\blue You you disable the security protocols" + src.updateUsrDialog() + return - usr.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. - screen = temp_screen - else - usr << "Unauthorized Access." +/obj/machinery/computer/rdconsole/Topic(href, href_list) + if(..()) + return - else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk. - screen = 0.0 - spawn(50) - screen = 1.2 - files.AddTech2Known(t_disk.stored) - updateUsrDialog() - griefProtection() //Update centcomm too + add_fingerprint(usr) - else if(href_list["clear_tech"]) //Erase data on the technology disk. - t_disk.stored = null + usr.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. + screen = temp_screen + else + usr << "Unauthorized Access." - else if(href_list["eject_tech"]) //Eject the technology disk. - t_disk:loc = src.loc - t_disk = null - screen = 1.0 - - else if(href_list["copy_tech"]) //Copys some technology data from the research holder to the disk. - for(var/datum/tech/T in files.known_tech) - if(href_list["copy_tech_ID"] == T.id) - t_disk.stored = T - break + else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk. + screen = 0.0 + spawn(50) screen = 1.2 + files.AddTech2Known(t_disk.stored) + updateUsrDialog() + griefProtection() //Update centcomm too - else if(href_list["updt_design"]) //Updates the research holder with design data from the design disk. - screen = 0.0 - spawn(50) - screen = 1.4 - files.AddDesign2Known(d_disk.blueprint) - updateUsrDialog() - griefProtection() //Update centcomm too + else if(href_list["clear_tech"]) //Erase data on the technology disk. + t_disk.stored = null - else if(href_list["clear_design"]) //Erases data on the design disk. - d_disk.blueprint = null + else if(href_list["eject_tech"]) //Eject the technology disk. + t_disk:loc = src.loc + t_disk = null + screen = 1.0 - else if(href_list["eject_design"]) //Eject the design disk. - d_disk:loc = src.loc - d_disk = null - screen = 1.0 + else if(href_list["copy_tech"]) //Copys some technology data from the research holder to the disk. + for(var/datum/tech/T in files.known_tech) + if(href_list["copy_tech_ID"] == T.id) + t_disk.stored = T + break + screen = 1.2 - else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk. - for(var/datum/design/D in files.known_designs) - if(href_list["copy_design_ID"] == D.id) - d_disk.blueprint = D - break + else if(href_list["updt_design"]) //Updates the research holder with design data from the design disk. + screen = 0.0 + spawn(50) screen = 1.4 + files.AddDesign2Known(d_disk.blueprint) + updateUsrDialog() + griefProtection() //Update centcomm too - 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." + else if(href_list["clear_design"]) //Erases data on the design disk. + d_disk.blueprint = null - else if(linked_destroy.loaded_item) - linked_destroy.loaded_item.loc = linked_destroy.loc - linked_destroy.loaded_item = null - linked_destroy.icon_state = "d_analyzer" - screen = 2.1 + else if(href_list["eject_design"]) //Eject the design disk. + d_disk:loc = src.loc + d_disk = null + screen = 1.0 - 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." - else - var/choice = input("Proceeding will destroy loaded item.") in list("Proceed", "Cancel") - if(choice == "Cancel") return - linked_destroy.busy = 1 - screen = 0.1 - updateUsrDialog() - flick("d_analyzer_process", linked_destroy) - 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 >= 90) - var/list/temp_tech = linked_destroy.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) //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.m_amt*linked_destroy.decon_mod)) - linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.g_amt*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() - del(I) - use_power(250) - linked_destroy.icon_state = "d_analyzer" - screen = 1.0 - updateUsrDialog() + else if(href_list["copy_design"]) //Copy design data from the research holder to the design disk. + for(var/datum/design/D in files.known_designs) + if(href_list["copy_design_ID"] == D.id) + d_disk.blueprint = D + break + screen = 1.4 - else if(href_list["lock"]) //Lock the console from use by anyone without tox access. - if(src.allowed(usr)) - screen = text2num(href_list["lock"]) + 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." + + else if(linked_destroy.loaded_item) + linked_destroy.loaded_item.loc = linked_destroy.loc + linked_destroy.loaded_item = null + linked_destroy.icon_state = "d_analyzer" + screen = 2.1 + + 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." else - usr << "Unauthorized Access." - - 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!" - 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 world) - 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) - for(var/datum/design/D in files.known_designs) - 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) - for(var/datum/tech/T in S.files.known_tech) - files.AddTech2Known(T) - for(var/datum/design/D in S.files.known_designs) - files.AddDesign2Known(D) - files.RefreshResearch() - server_processed = 1 - if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed) - S.produce_heat(100) - screen = 1.6 + var/choice = input("Proceeding will destroy loaded item.") in list("Proceed", "Cancel") + if(choice == "Cancel") return + linked_destroy.busy = 1 + screen = 0.1 + updateUsrDialog() + flick("d_analyzer_process", linked_destroy) + 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 >= 90) + var/list/temp_tech = linked_destroy.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) //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.m_amt*linked_destroy.decon_mod)) + linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.g_amt*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() + del(I) + use_power(250) + linked_destroy.icon_state = "d_analyzer" + screen = 1.0 updateUsrDialog() - else if(href_list["togglesync"]) //Prevents the console from being synced by other consoles. Can still send data. - sync = !sync + else if(href_list["lock"]) //Lock the console from use by anyone without tox access. + if(src.allowed(usr)) + screen = text2num(href_list["lock"]) + else + usr << "Unauthorized Access." - else if(href_list["build"]) //Causes the Protolathe to build something. - if(linked_lathe) - var/datum/design/being_built = null - for(var/datum/design/D in files.known_designs) - if(D.id == href_list["build"]) - being_built = D - break - var/power = 2000 - for(var/M in being_built.materials) - power += round(being_built.materials[M] / 5) - power = max(2000, 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) - 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])) - if("$glass") - linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M])) - if("$gold") - linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M])) - if("$silver") - linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M])) - if("$plasma") - linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-being_built.materials[M])) - if("$uranium") - linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M])) - if("$diamond") - linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M])) - if("$clown") - linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-being_built.materials[M])) - else - linked_lathe.reagents.remove_reagent(M, being_built.materials[M]) - - 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 - linked_lathe.busy = 0 - screen = 3.1 - updateUsrDialog() - - else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something. - if(linked_imprinter) - var/datum/design/being_built = null - for(var/datum/design/D in files.known_designs) - if(D.id == href_list["imprint"]) - being_built = D - break - var/power = 2000 - for(var/M in being_built.materials) - power += round(being_built.materials[M] / 5) - power = max(2000, power) - screen = 0.4 - linked_imprinter.busy = 1 - flick("circuit_imprinter_ani",linked_imprinter) - spawn(16) - 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])) - if("$gold") - linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M])) - if("$diamond") - linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M])) - else - linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]) - 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 - 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"]) - - 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["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["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material - var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"]) - var/res_amount, type - switch(href_list["lathe_ejectsheet"]) - if("metal") - type = /obj/item/stack/sheet/metal - res_amount = "m_amount" - if("glass") - type = /obj/item/stack/sheet/glass - res_amount = "g_amount" - if("gold") - type = /obj/item/stack/sheet/gold - res_amount = "gold_amount" - if("silver") - type = /obj/item/stack/sheet/silver - res_amount = "silver_amount" - if("plasma") - type = /obj/item/stack/sheet/plasma - res_amount = "plasma_amount" - if("uranium") - type = /obj/item/stack/sheet/uranium - res_amount = "uranium_amount" - if("diamond") - type = /obj/item/stack/sheet/diamond - res_amount = "diamond_amount" - if("clown") - type = /obj/item/stack/sheet/clown - res_amount = "clown_amount" - if(ispath(type) && hasvar(linked_lathe, res_amount)) - var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc) - var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit) - 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)) - else - del sheet - else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material - var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) - var/res_amount, type - switch(href_list["imprinter_ejectsheet"]) - if("glass") - type = /obj/item/stack/sheet/glass - res_amount = "g_amount" - if("gold") - type = /obj/item/stack/sheet/gold - res_amount = "gold_amount" - if("diamond") - type = /obj/item/stack/sheet/diamond - res_amount = "diamond_amount" - if(ispath(type) && hasvar(linked_imprinter, res_amount)) - var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc) - 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)) - else - del sheet - - else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with. - screen = 0.0 - spawn(20) - SyncRDevices() - screen = 1.7 - updateUsrDialog() - - else if(href_list["disconnect"]) //The R&D console disconnects with a specific device. - switch(href_list["disconnect"]) - if("destroy") - linked_destroy.linked_console = null - linked_destroy = null - if("lathe") - linked_lathe.linked_console = null - linked_lathe = null - if("imprinter") - linked_imprinter.linked_console = null - linked_imprinter = null - - else if(href_list["reset"]) //Reset the R&D console's database. - griefProtection() - var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue") - screen = 0.0 - del(files) - files = new /datum/research(src) - spawn(20) + 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!" + 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 world) + 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) + for(var/datum/design/D in files.known_designs) + 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) + for(var/datum/tech/T in S.files.known_tech) + files.AddTech2Known(T) + for(var/datum/design/D in S.files.known_designs) + files.AddDesign2Known(D) + files.RefreshResearch() + server_processed = 1 + if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed) + S.produce_heat(100) screen = 1.6 updateUsrDialog() - updateUsrDialog() + + else if(href_list["togglesync"]) //Prevents the console from being synced by other consoles. Can still send data. + sync = !sync + + else if(href_list["build"]) //Causes the Protolathe to build something. + if(linked_lathe) + var/datum/design/being_built = null + for(var/datum/design/D in files.known_designs) + if(D.id == href_list["build"]) + being_built = D + break + var/power = 2000 + for(var/M in being_built.materials) + power += round(being_built.materials[M] / 5) + power = max(2000, 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) + 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])) + if("$glass") + linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M])) + if("$gold") + linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M])) + if("$silver") + linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M])) + if("$plasma") + linked_lathe.plasma_amount = max(0, (linked_lathe.plasma_amount-being_built.materials[M])) + if("$uranium") + linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M])) + if("$diamond") + linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M])) + if("$clown") + linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-being_built.materials[M])) + else + linked_lathe.reagents.remove_reagent(M, being_built.materials[M]) + + 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 + linked_lathe.busy = 0 + screen = 3.1 + updateUsrDialog() + + else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something. + if(linked_imprinter) + var/datum/design/being_built = null + for(var/datum/design/D in files.known_designs) + if(D.id == href_list["imprint"]) + being_built = D + break + var/power = 2000 + for(var/M in being_built.materials) + power += round(being_built.materials[M] / 5) + power = max(2000, power) + screen = 0.4 + linked_imprinter.busy = 1 + flick("circuit_imprinter_ani",linked_imprinter) + spawn(16) + 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])) + if("$gold") + linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M])) + if("$diamond") + linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M])) + else + linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]) + 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 + 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"]) + + 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["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["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material + var/desired_num_sheets = text2num(href_list["lathe_ejectsheet_amt"]) + var/res_amount, type + switch(href_list["lathe_ejectsheet"]) + if("metal") + type = /obj/item/stack/sheet/metal + res_amount = "m_amount" + if("glass") + type = /obj/item/stack/sheet/glass + res_amount = "g_amount" + if("gold") + type = /obj/item/stack/sheet/gold + res_amount = "gold_amount" + if("silver") + type = /obj/item/stack/sheet/silver + res_amount = "silver_amount" + if("plasma") + type = /obj/item/stack/sheet/plasma + res_amount = "plasma_amount" + if("uranium") + type = /obj/item/stack/sheet/uranium + res_amount = "uranium_amount" + if("diamond") + type = /obj/item/stack/sheet/diamond + res_amount = "diamond_amount" + if("clown") + type = /obj/item/stack/sheet/clown + res_amount = "clown_amount" + if(ispath(type) && hasvar(linked_lathe, res_amount)) + var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc) + var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit) + 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)) + else + del sheet + else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material + var/desired_num_sheets = text2num(href_list["imprinter_ejectsheet_amt"]) + var/res_amount, type + switch(href_list["imprinter_ejectsheet"]) + if("glass") + type = /obj/item/stack/sheet/glass + res_amount = "g_amount" + if("gold") + type = /obj/item/stack/sheet/gold + res_amount = "gold_amount" + if("diamond") + type = /obj/item/stack/sheet/diamond + res_amount = "diamond_amount" + if(ispath(type) && hasvar(linked_imprinter, res_amount)) + var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc) + 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)) + else + del sheet + + else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with. + screen = 0.0 + spawn(20) + SyncRDevices() + screen = 1.7 + updateUsrDialog() + + else if(href_list["disconnect"]) //The R&D console disconnects with a specific device. + switch(href_list["disconnect"]) + if("destroy") + linked_destroy.linked_console = null + linked_destroy = null + if("lathe") + linked_lathe.linked_console = null + linked_lathe = null + if("imprinter") + linked_imprinter.linked_console = null + linked_imprinter = null + + else if(href_list["reset"]) //Reset the R&D console's database. + griefProtection() + var/choice = alert("R&D Console Database Reset", "Are you sure you want to reset the R&D console's database? Data lost cannot be recovered.", "Continue", "Cancel") + if(choice == "Continue") + screen = 0.0 + del(files) + files = new /datum/research(src) + spawn(20) + screen = 1.6 + updateUsrDialog() + updateUsrDialog() + return + +/obj/machinery/computer/rdconsole/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) return - attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) + if(ishuman(user)) + if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) + call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit) return - if(ishuman(user)) - if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) - call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit) - return + user.machine = src + var/dat = "" + files.RefreshResearch() + switch(screen) //A quick check to make sure you get the right screen when a device is disconnected. + if(2 to 2.9) + if(linked_destroy == null) + screen = 2.0 + else if(linked_destroy.loaded_item == null) + screen = 2.1 + else + screen = 2.2 + if(3 to 3.9) + if(linked_lathe == null) + screen = 3.0 + if(4 to 4.9) + if(linked_imprinter == null) + screen = 4.0 - user.machine = src - var/dat = "" - files.RefreshResearch() - switch(screen) //A quick check to make sure you get the right screen when a device is disconnected. - if(2 to 2.9) - if(linked_destroy == null) - screen = 2.0 - else if(linked_destroy.loaded_item == null) - screen = 2.1 + switch(screen) + + //////////////////////R&D CONSOLE SCREENS////////////////// + if(0.0) dat += "Updating Database...." + + if(0.1) dat += "Processing and Updating Database..." + + if(0.2) + dat += "SYSTEM LOCKED

" + dat += "Unlock" + + if(0.3) + dat += "Constructing Prototype. Please Wait..." + + if(0.4) + dat += "Imprinting Circuit. Please Wait..." + + if(1.0) //Main Menu + dat += "Main Menu:

" + dat += "Current Research Levels
" + if(t_disk) dat += "Disk Operations
" + else if(d_disk) dat += "Disk Operations
" + else dat += "(Please Insert Disk)
" + if(linked_destroy != null) dat += "Destructive Analyzer Menu
" + if(linked_lathe != null) dat += "Protolathe Construction Menu
" + if(linked_imprinter != null) dat += "Circuit Construction Menu
" + dat += "Settings" + + if(1.1) //Research viewer + dat += "Current Research Levels:

" + for(var/datum/tech/T in files.known_tech) + dat += "[T.name]
" + dat += "* Level: [T.level]
" + dat += "* Summary: [T.desc]
" + dat += "Main Menu" + + if(1.2) //Technology Disk Menu + + dat += "Main Menu
" + dat += "Disk Contents: (Technology Data Disk)

" + if(t_disk.stored == null) + dat += "The disk has no data stored on it.
" + dat += "Operations: " + dat += "Load Tech to Disk || " + else + dat += "Name: [t_disk.stored.name]
" + dat += "Level: [t_disk.stored.level]
" + dat += "Description: [t_disk.stored.desc]
" + dat += "Operations: " + dat += "Upload to Database || " + dat += "Clear Disk || " + dat += "Eject Disk" + + if(1.3) //Technology Disk submenu + dat += "
Main Menu || " + dat += "Return to Disk Operations
" + dat += "Load Technology to Disk:

" + for(var/datum/tech/T in files.known_tech) + dat += "[T.name] " + dat += "(Copy to Disk)
" + + if(1.4) //Design Disk menu. + dat += "Main Menu
" + if(d_disk.blueprint == null) + dat += "The disk has no data stored on it.
" + dat += "Operations: " + 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]]
" + else dat += "* [M] x [d_disk.blueprint.materials[M]]
" + dat += "
Operations: " + dat += "Upload to Database || " + dat += "Clear Disk || " + dat += "Eject Disk" + + if(1.5) //Technology disk submenu + dat += "Main Menu || " + dat += "Return to Disk Operations
" + dat += "Load Design to Disk:

" + for(var/datum/design/D in files.known_designs) + dat += "[D.name] " + dat += "(Copy to Disk)
" + + if(1.6) //R&D console settings + dat += "Main Menu
" + dat += "R&D Console Setting:

" + if(sync) + dat += "Sync Database with Network
" + dat += "Disconnect from Research Network
" + else + dat += "Connect to Research Network
" + dat += "Device Linkage Menu
" + dat += "Lock Console
" + dat += "Reset R&D Database.
" + + if(1.7) //R&D device linkage + dat += "Main Menu || " + dat += "Settings Menu
" + dat += "R&D Console Device Linkage Menu:

" + dat += "Re-sync with Nearby Devices
" + dat += "Linked Devices:
" + if(linked_destroy) + dat += "* Destructive Analyzer (Disconnect)
" + else + dat += "* (No Destructive Analyzer Linked)
" + if(linked_lathe) + dat += "* Protolathe (Disconnect)
" + else + dat += "* (No Protolathe Linked)
" + if(linked_imprinter) + dat += "* Circuit Imprinter (Disconnect)
" + else + dat += "* (No Circuit Imprinter Linked)
" + + ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// + if(2.0) + dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE

" + dat += "Main Menu" + + if(2.1) + dat += "No Item Loaded. Standing-by...

" + dat += "Main Menu" + + if(2.2) + dat += "Main Menu
" + dat += "Deconstruction Menu
" + dat += "Name: [linked_destroy.loaded_item.name]
" + dat += "Origin Tech:
" + var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech) + for(var/T in temp_tech) + dat += "* [CallTechName(T)] [temp_tech[T]]
" + dat += "
Deconstruct Item || " + dat += "Eject Item || " + + /////////////////////PROTOLATHE SCREENS///////////////////////// + if(3.0) + dat += "Main Menu
" + dat += "NO PROTOLATHE LINKED TO CONSOLE

" + + if(3.1) + dat += "Main Menu || " + dat += "Material Storage || " + dat += "Chemical Storage
" + dat += "Protolathe Menu:

" + dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
" + dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
" + for(var/datum/design/D in files.known_designs) + if(!(D.build_type & PROTOLATHE)) + continue + var/temp_dat = "[D.name]" + var/check_materials = 1 + for(var/M in D.materials) + temp_dat += " [D.materials[M]] [CallMaterialName(M)]" + if(copytext(M, 1, 2) == "$") + switch(M) + if("$glass") + if(D.materials[M] > linked_lathe.g_amount) check_materials = 0 + if("$metal") + if(D.materials[M] > linked_lathe.m_amount) check_materials = 0 + if("$gold") + if(D.materials[M] > linked_lathe.gold_amount) check_materials = 0 + if("$silver") + if(D.materials[M] > linked_lathe.silver_amount) check_materials = 0 + if("$plasma") + if(D.materials[M] > linked_lathe.plasma_amount) check_materials = 0 + if("$uranium") + if(D.materials[M] > linked_lathe.uranium_amount) check_materials = 0 + if("$diamond") + if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0 + if("$clown") + if(D.materials[M] > linked_lathe.clown_amount) check_materials = 0 + else if (!linked_lathe.reagents.has_reagent(M, D.materials[M])) + check_materials = 0 + if (check_materials) + dat += "* [temp_dat]
" else - screen = 2.2 - if(3 to 3.9) - if(linked_lathe == null) - screen = 3.0 - if(4 to 4.9) - if(linked_imprinter == null) - screen = 4.0 + dat += "* [temp_dat]
" - switch(screen) + if(3.2) //Protolathe Material Storage Sub-menu + dat += "Main Menu || " + dat += "Protolathe Menu
" + dat += "Material Storage

" + //Metal + dat += "* [linked_lathe.m_amount] cm3 of Metal || " + dat += "Eject: " + if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) " + if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) " + if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)" + dat += "
" + //Glass + dat += "* [linked_lathe.g_amount] cm3 of Glass || " + dat += "Eject: " + if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) " + if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) " + if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)" + dat += "
" + //Gold + dat += "* [linked_lathe.gold_amount] cm3 of Gold || " + dat += "Eject: " + if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Silver + dat += "* [linked_lathe.silver_amount] cm3 of Silver || " + dat += "Eject: " + if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Plasma + dat += "* [linked_lathe.plasma_amount] cm3 of Solid Plasma || " + dat += "Eject: " + if(linked_lathe.plasma_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.plasma_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.plasma_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Uranium + dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || " + dat += "Eject: " + if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Diamond + dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || " + dat += "Eject: " + if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Bananium + dat += "* [linked_lathe.clown_amount] cm3 of Bananium || " + dat += "Eject: " + if(linked_lathe.clown_amount >= 2000) dat += "(1 Sheet) " + if(linked_lathe.clown_amount >= 10000) dat += "(5 Sheets) " + if(linked_lathe.clown_amount >= 2000) dat += "(Max Sheets)" - //////////////////////R&D CONSOLE SCREENS////////////////// - if(0.0) dat += "Updating Database...." + if(3.3) //Protolathe Chemical Storage Submenu + dat += "Main Menu || " + dat += "Protolathe Menu
" + dat += "Chemical Storage

" + for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) + dat += "Name: [R.name] | Units: [R.volume] " + dat += "(Purge)
" + dat += "Disposal All Chemicals in Storage
" - if(0.1) dat += "Processing and Updating Database..." + ///////////////////CIRCUIT IMPRINTER SCREENS//////////////////// + if(4.0) + dat += "Main Menu
" + dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE

" - if(0.2) - dat += "SYSTEM LOCKED

" - dat += "Unlock" + if(4.1) + dat += "Main Menu || " + dat += "Material Storage || " + dat += "Chemical Storage
" + dat += "Circuit Imprinter Menu:

" + dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
" + dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
" - if(0.3) - dat += "Constructing Prototype. Please Wait..." - - if(0.4) - dat += "Imprinting Circuit. Please Wait..." - - if(1.0) //Main Menu - dat += "Main Menu:

" - dat += "Current Research Levels
" - if(t_disk) dat += "Disk Operations
" - else if(d_disk) dat += "Disk Operations
" - else dat += "(Please Insert Disk)
" - if(linked_destroy != null) dat += "Destructive Analyzer Menu
" - if(linked_lathe != null) dat += "Protolathe Construction Menu
" - if(linked_imprinter != null) dat += "Circuit Construction Menu
" - dat += "Settings" - - if(1.1) //Research viewer - dat += "Current Research Levels:

" - for(var/datum/tech/T in files.known_tech) - dat += "[T.name]
" - dat += "* Level: [T.level]
" - dat += "* Summary: [T.desc]
" - dat += "Main Menu" - - if(1.2) //Technology Disk Menu - - dat += "Main Menu
" - dat += "Disk Contents: (Technology Data Disk)

" - if(t_disk.stored == null) - dat += "The disk has no data stored on it.
" - dat += "Operations: " - dat += "Load Tech to Disk || " + for(var/datum/design/D in files.known_designs) + if(!(D.build_type & IMPRINTER)) + continue + var/temp_dat = "[D.name]" + var/check_materials = 1 + for(var/M in D.materials) + temp_dat += " [D.materials[M]] [CallMaterialName(M)]" + if(copytext(M, 1, 2) == "$") + switch(M) + if("$glass") + if(D.materials[M] > linked_imprinter.g_amount) check_materials = 0 + if("$gold") + if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0 + if("$diamond") + if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0 + else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M])) + check_materials = 0 + if (check_materials) + dat += "* [temp_dat]
" else - dat += "Name: [t_disk.stored.name]
" - dat += "Level: [t_disk.stored.level]
" - dat += "Description: [t_disk.stored.desc]
" - dat += "Operations: " - dat += "Upload to Database || " - dat += "Clear Disk || " - dat += "Eject Disk" + dat += "* [temp_dat]
" - if(1.3) //Technology Disk submenu - dat += "
Main Menu || " - dat += "Return to Disk Operations
" - dat += "Load Technology to Disk:

" - for(var/datum/tech/T in files.known_tech) - dat += "[T.name] " - dat += "(Copy to Disk)
" + if(4.2) + dat += "Main Menu || " + dat += "Imprinter Menu
" + dat += "Chemical Storage

" + for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) + dat += "Name: [R.name] | Units: [R.volume] " + dat += "(Purge)
" + dat += "Disposal All Chemicals in Storage
" - if(1.4) //Design Disk menu. - dat += "Main Menu
" - if(d_disk.blueprint == null) - dat += "The disk has no data stored on it.
" - dat += "Operations: " - 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]]
" - else dat += "* [M] x [d_disk.blueprint.materials[M]]
" - dat += "
Operations: " - dat += "Upload to Database || " - dat += "Clear Disk || " - dat += "Eject Disk" + if(4.3) + dat += "Main Menu || " + dat += "Circuit Imprinter Menu
" + dat += "Material Storage

" + //Glass + dat += "* [linked_imprinter.g_amount] cm3 of Glass || " + dat += "Eject: " + if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) " + if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) " + if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)" + dat += "
" + //Gold + dat += "* [linked_imprinter.gold_amount] cm3 of Gold || " + dat += "Eject: " + if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) " + if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) " + if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)" + dat += "
" + //Diamond + dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || " + dat += "Eject: " + if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) " + if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) " + if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)" - if(1.5) //Technology disk submenu - dat += "Main Menu || " - dat += "Return to Disk Operations
" - dat += "Load Design to Disk:

" - for(var/datum/design/D in files.known_designs) - dat += "[D.name] " - dat += "(Copy to Disk)
" - - if(1.6) //R&D console settings - dat += "Main Menu
" - dat += "R&D Console Setting:

" - if(sync) - dat += "Sync Database with Network
" - dat += "Disconnect from Research Network
" - else - dat += "Connect to Research Network
" - dat += "Device Linkage Menu
" - dat += "Lock Console
" - dat += "Reset R&D Database.
" - - if(1.7) //R&D device linkage - dat += "Main Menu || " - dat += "Settings Menu
" - dat += "R&D Console Device Linkage Menu:

" - dat += "Re-sync with Nearby Devices
" - dat += "Linked Devices:
" - if(linked_destroy) - dat += "* Destructive Analyzer (Disconnect)
" - else - dat += "* (No Destructive Analyzer Linked)
" - if(linked_lathe) - dat += "* Protolathe (Disconnect)
" - else - dat += "* (No Protolathe Linked)
" - if(linked_imprinter) - dat += "* Circuit Imprinter (Disconnect)
" - else - dat += "* (No Circuit Imprinter Linked)
" - - ////////////////////DESTRUCTIVE ANALYZER SCREENS//////////////////////////// - if(2.0) - dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE

" - dat += "Main Menu" - - if(2.1) - dat += "No Item Loaded. Standing-by...

" - dat += "Main Menu" - - if(2.2) - dat += "Main Menu
" - dat += "Deconstruction Menu
" - dat += "Name: [linked_destroy.loaded_item.name]
" - dat += "Origin Tech:
" - var/list/temp_tech = linked_destroy.ConvertReqString2List(linked_destroy.loaded_item.origin_tech) - for(var/T in temp_tech) - dat += "* [CallTechName(T)] [temp_tech[T]]
" - dat += "
Deconstruct Item || " - dat += "Eject Item || " - - /////////////////////PROTOLATHE SCREENS///////////////////////// - if(3.0) - dat += "Main Menu
" - dat += "NO PROTOLATHE LINKED TO CONSOLE

" - - if(3.1) - dat += "Main Menu || " - dat += "Material Storage || " - dat += "Chemical Storage
" - dat += "Protolathe Menu:

" - dat += "Material Amount: [linked_lathe.TotalMaterials()] cm3 (MAX: [linked_lathe.max_material_storage])
" - dat += "Chemical Volume: [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])
" - for(var/datum/design/D in files.known_designs) - if(!(D.build_type & PROTOLATHE)) - continue - var/temp_dat = "[D.name]" - var/check_materials = 1 - for(var/M in D.materials) - temp_dat += " [D.materials[M]] [CallMaterialName(M)]" - if(copytext(M, 1, 2) == "$") - switch(M) - if("$glass") - if(D.materials[M] > linked_lathe.g_amount) check_materials = 0 - if("$metal") - if(D.materials[M] > linked_lathe.m_amount) check_materials = 0 - if("$gold") - if(D.materials[M] > linked_lathe.gold_amount) check_materials = 0 - if("$silver") - if(D.materials[M] > linked_lathe.silver_amount) check_materials = 0 - if("$plasma") - if(D.materials[M] > linked_lathe.plasma_amount) check_materials = 0 - if("$uranium") - if(D.materials[M] > linked_lathe.uranium_amount) check_materials = 0 - if("$diamond") - if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0 - if("$clown") - if(D.materials[M] > linked_lathe.clown_amount) check_materials = 0 - else if (!linked_lathe.reagents.has_reagent(M, D.materials[M])) - check_materials = 0 - if (check_materials) - dat += "* [temp_dat]
" - else - dat += "* [temp_dat]
" - - if(3.2) //Protolathe Material Storage Sub-menu - dat += "Main Menu || " - dat += "Protolathe Menu
" - dat += "Material Storage

" - //Metal - dat += "* [linked_lathe.m_amount] cm3 of Metal || " - dat += "Eject: " - if(linked_lathe.m_amount >= 3750) dat += "(1 Sheet) " - if(linked_lathe.m_amount >= 18750) dat += "(5 Sheets) " - if(linked_lathe.m_amount >= 3750) dat += "(Max Sheets)" - dat += "
" - //Glass - dat += "* [linked_lathe.g_amount] cm3 of Glass || " - dat += "Eject: " - if(linked_lathe.g_amount >= 3750) dat += "(1 Sheet) " - if(linked_lathe.g_amount >= 18750) dat += "(5 Sheets) " - if(linked_lathe.g_amount >= 3750) dat += "(Max Sheets)" - dat += "
" - //Gold - dat += "* [linked_lathe.gold_amount] cm3 of Gold || " - dat += "Eject: " - if(linked_lathe.gold_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.gold_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.gold_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Silver - dat += "* [linked_lathe.silver_amount] cm3 of Silver || " - dat += "Eject: " - if(linked_lathe.silver_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.silver_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.silver_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Plasma - dat += "* [linked_lathe.plasma_amount] cm3 of Solid Plasma || " - dat += "Eject: " - if(linked_lathe.plasma_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.plasma_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.plasma_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Uranium - dat += "* [linked_lathe.uranium_amount] cm3 of Uranium || " - dat += "Eject: " - if(linked_lathe.uranium_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.uranium_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.uranium_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Diamond - dat += "* [linked_lathe.diamond_amount] cm3 of Diamond || " - dat += "Eject: " - if(linked_lathe.diamond_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.diamond_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.diamond_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Bananium - dat += "* [linked_lathe.clown_amount] cm3 of Bananium || " - dat += "Eject: " - if(linked_lathe.clown_amount >= 2000) dat += "(1 Sheet) " - if(linked_lathe.clown_amount >= 10000) dat += "(5 Sheets) " - if(linked_lathe.clown_amount >= 2000) dat += "(Max Sheets)" - - if(3.3) //Protolathe Chemical Storage Submenu - dat += "Main Menu || " - dat += "Protolathe Menu
" - dat += "Chemical Storage

" - for(var/datum/reagent/R in linked_lathe.reagents.reagent_list) - dat += "Name: [R.name] | Units: [R.volume] " - dat += "(Purge)
" - dat += "Disposal All Chemicals in Storage
" - - ///////////////////CIRCUIT IMPRINTER SCREENS//////////////////// - if(4.0) - dat += "Main Menu
" - dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE

" - - if(4.1) - dat += "Main Menu || " - dat += "Material Storage || " - dat += "Chemical Storage
" - dat += "Circuit Imprinter Menu:

" - dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm3
" - dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]
" - - for(var/datum/design/D in files.known_designs) - if(!(D.build_type & IMPRINTER)) - continue - var/temp_dat = "[D.name]" - var/check_materials = 1 - for(var/M in D.materials) - temp_dat += " [D.materials[M]] [CallMaterialName(M)]" - if(copytext(M, 1, 2) == "$") - switch(M) - if("$glass") - if(D.materials[M] > linked_imprinter.g_amount) check_materials = 0 - if("$gold") - if(D.materials[M] > linked_imprinter.gold_amount) check_materials = 0 - if("$diamond") - if(D.materials[M] > linked_imprinter.diamond_amount) check_materials = 0 - else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M])) - check_materials = 0 - if (check_materials) - dat += "* [temp_dat]
" - else - dat += "* [temp_dat]
" - - if(4.2) - dat += "Main Menu || " - dat += "Imprinter Menu
" - dat += "Chemical Storage

" - for(var/datum/reagent/R in linked_imprinter.reagents.reagent_list) - dat += "Name: [R.name] | Units: [R.volume] " - dat += "(Purge)
" - dat += "Disposal All Chemicals in Storage
" - - if(4.3) - dat += "Main Menu || " - dat += "Circuit Imprinter Menu
" - dat += "Material Storage

" - //Glass - dat += "* [linked_imprinter.g_amount] cm3 of Glass || " - dat += "Eject: " - if(linked_imprinter.g_amount >= 3750) dat += "(1 Sheet) " - if(linked_imprinter.g_amount >= 18750) dat += "(5 Sheets) " - if(linked_imprinter.g_amount >= 3750) dat += "(Max Sheets)" - dat += "
" - //Gold - dat += "* [linked_imprinter.gold_amount] cm3 of Gold || " - dat += "Eject: " - if(linked_imprinter.gold_amount >= 2000) dat += "(1 Sheet) " - if(linked_imprinter.gold_amount >= 10000) dat += "(5 Sheets) " - if(linked_imprinter.gold_amount >= 2000) dat += "(Max Sheets)" - dat += "
" - //Diamond - dat += "* [linked_imprinter.diamond_amount] cm3 of Diamond || " - dat += "Eject: " - if(linked_imprinter.diamond_amount >= 2000) dat += "(1 Sheet) " - if(linked_imprinter.diamond_amount >= 10000) dat += "(5 Sheets) " - if(linked_imprinter.diamond_amount >= 2000) dat += "(Max Sheets)" - - user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400") - onclose(user, "rdconsole") + user << browse("Research and Development Console
[dat]", "window=rdconsole;size=575x400") + onclose(user, "rdconsole") /obj/machinery/computer/rdconsole/robotics name = "Robotics R&D Console" diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 87297f7187f..6da57d26e32 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -20,88 +20,88 @@ var/opened = 0 var/obj/machinery/computer/rdconsole/linked_console - 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/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 - proc - shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return 0 - if(!prob(prb)) - return 0 - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7)) - return 1 - else - return 0 +/obj/machinery/r_n_d/proc/ + shock(mob/user, prb) + if(stat & (BROKEN|NOPOWER)) // unpowered, no shock + return 0 + if(!prob(prb)) + return 0 + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(5, 1, src) + s.start() + if (electrocute_mob(user, get_area(src), src, 0.7)) + return 1 + else + return 0 - attack_hand(mob/user as mob) - if (shocked) - shock(user,50) - if(opened) - var/dat as text - dat += "[src.name] Wires:
" - for(var/wire in src.wires) - dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse
") +/obj/machinery/r_n_d/attack_hand(mob/user as mob) + if (shocked) + shock(user,50) + if(opened) + 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") + 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/Topic(href, href_list) + if(..()) return - - - Topic(href, href_list) - if(..()) - return - usr.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!" + usr.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.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) + if(src.hack_wire == href_list["wire"]) src.hacked = !src.hacked - if(src.disable_wire == temp_wire) + spawn(100) src.hacked = !src.hacked + if(src.disable_wire == href_list["wire"]) src.disabled = !src.disabled src.shock(usr,50) - if(src.shock_wire == temp_wire) + spawn(100) src.disabled = !src.disabled + if(src.shock_wire == href_list["wire"]) src.shocked = !src.shocked src.shock(usr,50) - src.updateUsrDialog() + 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() diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index d168d6e19e7..3f2462cb3c9 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -45,120 +45,120 @@ research holder datum. ***************************************************************/ /datum/research //Holder for all the existing, archived, and known tech. Individual to console. - var - list //Datum/tech go here. - possible_tech = list() //List of all tech in the game that players have access to (barring special events). - known_tech = list() //List of locally known tech. - possible_designs = list() //List of all designs (at base reliability). - known_designs = list() //List of available designs (at base reliability). - 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) - for(var/D in typesof(/datum/design) - /datum/design) - possible_designs += new D(src) - RefreshResearch() + //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). - proc +/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) + for(var/D in typesof(/datum/design) - /datum/design) + possible_designs += new D(src) + RefreshResearch() - //Checks to see if tech has all the required pre-reqs. - //Input: datum/tech; Output: 0/1 (false/true) - 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) - 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 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) - 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 +//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 */ - //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 - AddTech2Known(var/datum/tech/T) - for(var/datum/tech/known in known_tech) - if(T.id == known.id) - if(T.level > known.level) - known.level = T.level - return - known_tech += T +//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) + for(var/datum/tech/known in known_tech) + if(T.id == known.id) + if(T.level > known.level) + known.level = T.level return + known_tech += T + return - 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 - return - known_designs += D +/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 return + known_designs += D + return - //Refreshes known_tech and known_designs list. Then updates the reliability vars of the designs in the known_designs list. - //Input/Output: n/a - 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) - return +//Refreshes known_tech and known_designs list. Then updates the reliability vars of the designs in the 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) + return - //Refreshes the levels of a given tech. - //Input: Tech's ID and Level; Output: null - 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)) - 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)) + return - UpdateDesign(var/path) - for(var/datum/design/KD in known_designs) - if(KD.build_path == path) - KD.reliability_mod += rand(1,2) - break - 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 @@ -168,92 +168,92 @@ research holder datum. ** Includes all the various technoliges and what they make. ** ***************************************************************/ -datum - tech //Datum of individual technologies. - var - name = "name" //Name of the technology. - desc = "description" //General description of what it does and what it makes. - id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols. - level = 1 //A simple number scale of the research level. Level 0 = Secret tech. - list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = # +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). - materials - name = "Materials Research" - desc = "Development of new and improved materials." - id = "materials" +datum/tech/materials + name = "Materials Research" + desc = "Development of new and improved materials." + id = "materials" - engineering - name = "Engineering Research" - desc = "Development of new and improved engineering parts and." - id = "engineering" +datum/tech/engineering + name = "Engineering Research" + desc = "Development of new and improved engineering parts and." + id = "engineering" - plasmatech - name = "Plasma Research" - desc = "Research into the mysterious substance colloqually known as 'plasma'." - id = "plasmatech" +datum/tech/plasmatech + name = "Plasma Research" + desc = "Research into the mysterious substance colloqually known as 'plasma'." + id = "plasmatech" - powerstorage - name = "Power Manipulation Technology" - desc = "The various technologies behind the storage and generation of electicity." - id = "powerstorage" +datum/tech/powerstorage + name = "Power Manipulation Technology" + desc = "The various technologies behind the storage and generation of electicity." + id = "powerstorage" - bluespace - name = "'Blue-space' Research" - desc = "Research into the sub-reality known as 'blue-space'" - id = "bluespace" +datum/tech/bluespace + name = "'Blue-space' Research" + desc = "Research into the sub-reality known as 'blue-space'" + id = "bluespace" - biotech - name = "Biological Technology" - desc = "Research into the deeper mysteries of life and organic substances." - id = "biotech" +datum/tech/biotech + name = "Biological Technology" + desc = "Research into the deeper mysteries of life and organic substances." + id = "biotech" - combat - name = "Combat Systems Research" - desc = "The development of offensive and defensive systems." - id = "combat" +datum/tech/combat + name = "Combat Systems Research" + desc = "The development of offensive and defensive systems." + id = "combat" - magnets - name = "Electromagnetic Spectrum Research" - desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." - id = "magnets" +datum/tech/magnets + name = "Electromagnetic Spectrum Research" + desc = "Research into the electromagnetic spectrum. No clue how they actually work, though." + id = "magnets" - programming - name = "Data Theory Research" - desc = "The development of new computer and artificial intelligence and data storage systems." - id = "programming" +datum/tech/programming + name = "Data Theory Research" + desc = "The development of new computer and artificial intelligence and data storage systems." + id = "programming" - syndicate - name = "Illegal Technologies Research" - desc = "The study of technologies that violate Nanotrassen regulations." - id = "syndicate" +datum/tech/syndicate + name = "Illegal Technologies Research" + desc = "The study of technologies that violate Nanotrassen regulations." + id = "syndicate" - /* arcane - name = "Arcane Research" - desc = "Research into the acult and arcane field for use in practical science" - id = "arcane" - level = 0 //It didn't become "secret" as advertised. +/* +datum/tech/arcane + name = "Arcane Research" + desc = "Research into the acult and arcane field for use in practical science" + id = "arcane" + level = 0 //It didn't become "secret" as advertised. - //Branch Techs - explosives - name = "Explosives Research" - desc = "The creation and application of explosive materials." - id = "explosives" - req_tech = list("materials" = 3) +//Branch Techs +datum/tech/explosives + name = "Explosives Research" + desc = "The creation and application of explosive materials." + id = "explosives" + req_tech = list("materials" = 3) - generators - name = "Power Generation Technology" - desc = "Research into more powerful and more reliable sources." - id = "generators" - req_tech = list("powerstorage" = 2) +datum/tech/generators + name = "Power Generation Technology" + desc = "Research into more powerful and more reliable sources." + id = "generators" + req_tech = list("powerstorage" = 2) - robotics - name = "Robotics Technology" - desc = "The development of advanced automated, autonomous machines." - id = "robotics" - req_tech = list("materials" = 3, "programming" = 3)*/ +datum/tech/robotics + name = "Robotics Technology" + desc = "The development of advanced automated, autonomous machines." + id = "robotics" + req_tech = list("materials" = 3, "programming" = 3) +*/ /obj/item/weapon/disk/tech_disk @@ -266,6 +266,7 @@ datum m_amt = 30 g_amt = 10 var/datum/tech/stored - New() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) \ No newline at end of file + +/obj/item/weapon/disk/tech_disk/New() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) \ No newline at end of file diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index c5251272a98..9dd6f42a5e9 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -2,371 +2,372 @@ name = "R&D Server" icon = 'icons/obj/machines/research.dmi' icon_state = "server" - var - datum/research/files - health = 100 - list - id_with_upload = list() //List of R&D consoles with upload to server access. - id_with_download = list() //List of R&D consoles with download from server access. - id_with_upload_string = "" //String versions for easy editing in map editor. - id_with_download_string = "" - server_id = 0 - heat_gen = 100 - heating_power = 40000 - delay = 10 + 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_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 = "" + var/server_id = 0 + var/heat_gen = 100 + var/heating_power = 40000 + var/delay = 10 req_access = list(access_rd) //Only the R&D can change server settings. - New() - ..() - component_parts = list() - component_parts += new /obj/item/weapon/circuitboard/rdserver(src) - component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) - component_parts += new /obj/item/weapon/cable_coil(src) - component_parts += new /obj/item/weapon/cable_coil(src) - RefreshParts() - src.initialize(); //Agouri - - Del() - griefProtection() - ..() - +/obj/machinery/r_n_d/server/New() + ..() + component_parts = list() + component_parts += new /obj/item/weapon/circuitboard/rdserver(src) + component_parts += new /obj/item/weapon/stock_parts/scanning_module(src) + component_parts += new /obj/item/weapon/cable_coil(src) + component_parts += new /obj/item/weapon/cable_coil(src) RefreshParts() - var/tot_rating = 0 - for(var/obj/item/weapon/stock_parts/SP in src) - tot_rating += SP.rating - heat_gen /= max(1, tot_rating) + src.initialize(); //Agouri - initialize() - if(!files) files = new /datum/research(src) - var/list/temp_list - if(!id_with_upload.len) - temp_list = list() - temp_list = dd_text2list(id_with_upload_string, ";") - for(var/N in temp_list) - id_with_upload += text2num(N) - if(!id_with_download.len) - temp_list = list() - temp_list = dd_text2list(id_with_download_string, ";") - for(var/N in temp_list) - id_with_download += text2num(N) +/obj/machinery/r_n_d/server/Del() + griefProtection() + ..() - process() - var/datum/gas_mixture/environment = loc.return_air() - switch(environment.temperature) - if(0 to T0C) - health = min(100, health + 1) - if(T0C to (T20C + 20)) - health = between(0, health, 100) - if((T20C + 20) to (T0C + 70)) - health = max(0, health - 1) - if(health <= 0) - griefProtection() //I dont like putting this in process() but it's the best I can do without re-writing a chunk of rd servers. - files.known_designs = list() - for(var/datum/tech/T in files.known_tech) - if(prob(1)) - T.level-- - files.RefreshResearch() - if(delay) - delay-- - else - produce_heat(heat_gen) - delay = initial(delay) +/obj/machinery/r_n_d/server/RefreshParts() + var/tot_rating = 0 + for(var/obj/item/weapon/stock_parts/SP in src) + tot_rating += SP.rating + heat_gen /= max(1, tot_rating) - meteorhit(var/obj/O as obj) - griefProtection() - ..() +/obj/machinery/r_n_d/server/initialize() + if(!files) files = new /datum/research(src) + var/list/temp_list + if(!id_with_upload.len) + temp_list = list() + temp_list = dd_text2list(id_with_upload_string, ";") + for(var/N in temp_list) + id_with_upload += text2num(N) + if(!id_with_download.len) + temp_list = list() + temp_list = dd_text2list(id_with_download_string, ";") + for(var/N in temp_list) + id_with_download += text2num(N) + +/obj/machinery/r_n_d/server/process() + var/datum/gas_mixture/environment = loc.return_air() + switch(environment.temperature) + if(0 to T0C) + health = min(100, health + 1) + if(T0C to (T20C + 20)) + health = between(0, health, 100) + if((T20C + 20) to (T0C + 70)) + health = max(0, health - 1) + if(health <= 0) + griefProtection() //I dont like putting this in process() but it's the best I can do without re-writing a chunk of rd servers. + files.known_designs = list() + for(var/datum/tech/T in files.known_tech) + if(prob(1)) + T.level-- + files.RefreshResearch() + if(delay) + delay-- + else + produce_heat(heat_gen) + delay = initial(delay) + +/obj/machinery/r_n_d/server/meteorhit(var/obj/O as obj) + griefProtection() + ..() - emp_act(severity) - griefProtection() - ..() +/obj/machinery/r_n_d/server/emp_act(severity) + griefProtection() + ..() - ex_act(severity) - griefProtection() - ..() +/obj/machinery/r_n_d/server/ex_act(severity) + griefProtection() + ..() - blob_act() - griefProtection() - ..() +/obj/machinery/r_n_d/server/blob_act() + griefProtection() + ..() - proc - //Backup files to centcomm to help admins recover data after greifer attacks - griefProtection() - for(var/obj/machinery/r_n_d/server/centcom/C in world) - for(var/datum/tech/T in files.known_tech) - C.files.AddTech2Known(T) - for(var/datum/design/D in files.known_designs) - C.files.AddDesign2Known(D) - C.files.RefreshResearch() +/obj/machinery/r_n_d/server/proc/ +//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 world) + for(var/datum/tech/T in files.known_tech) + C.files.AddTech2Known(T) + for(var/datum/design/D in files.known_designs) + C.files.AddDesign2Known(D) + C.files.RefreshResearch() - produce_heat(heat_amt) - if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater. - var/turf/simulated/L = loc - if(istype(L)) - var/datum/gas_mixture/env = L.return_air() - if(env.temperature < (heat_amt+T0C)) +/obj/machinery/r_n_d/server/proc/produce_heat(heat_amt) + if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from space heater. + var/turf/simulated/L = loc + if(istype(L)) + var/datum/gas_mixture/env = L.return_air() + if(env.temperature < (heat_amt+T0C)) - var/transfer_moles = 0.25 * env.total_moles() + var/transfer_moles = 0.25 * env.total_moles() - var/datum/gas_mixture/removed = env.remove(transfer_moles) + var/datum/gas_mixture/removed = env.remove(transfer_moles) - if(removed) + if(removed) - var/heat_capacity = removed.heat_capacity() - if(heat_capacity == 0 || heat_capacity == null) - heat_capacity = 1 - removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000) + var/heat_capacity = removed.heat_capacity() + if(heat_capacity == 0 || heat_capacity == null) + heat_capacity = 1 + removed.temperature = min((removed.temperature*heat_capacity + heating_power)/heat_capacity, 1000) - env.merge(removed) + env.merge(removed) - attackby(var/obj/item/O as obj, var/mob/user as mob) - if (disabled) - return - if (shocked) - shock(user,50) - if (istype(O, /obj/item/weapon/screwdriver)) - if (!opened) - opened = 1 - icon_state = "server_o" - user << "You open the maintenance hatch of [src]." - else - opened = 0 - icon_state = "server" - user << "You close the maintenance hatch of [src]." - return - if (opened) - if(istype(O, /obj/item/weapon/crowbar)) - griefProtection() - playsound(src.loc, '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 - del(src) - return 1 - - attack_hand(mob/user as mob) - if (disabled) - return - if (shocked) - shock(user,50) - if(ishuman(user)) - if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) - call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit) +/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob) + if (disabled) return + if (shocked) + shock(user,50) + if (istype(O, /obj/item/weapon/screwdriver)) + if (!opened) + opened = 1 + icon_state = "server_o" + user << "You open the maintenance hatch of [src]." + else + opened = 0 + icon_state = "server" + user << "You close the maintenance hatch of [src]." + return + if (opened) + if(istype(O, /obj/item/weapon/crowbar)) + griefProtection() + playsound(src.loc, '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 + del(src) + return 1 + +/obj/machinery/r_n_d/server/attack_hand(mob/user as mob) + if (disabled) + return + if (shocked) + shock(user,50) + if(ishuman(user)) + if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining) + call(/obj/item/clothing/gloves/space_ninja/proc/drain)("RESEARCH",src,user:wear_suit) + return + + + /obj/machinery/r_n_d/server/centcom name = "Centcom Central R&D Database" server_id = -1 - initialize() - ..() - var/list/no_id_servers = list() - var/list/server_ids = list() - for(var/obj/machinery/r_n_d/server/S in world) - switch(S.server_id) - if(-1) - continue - if(0) - no_id_servers += S - else - server_ids += S.server_id +/obj/machinery/r_n_d/server/centcom/initialize() + ..() + var/list/no_id_servers = list() + var/list/server_ids = list() + for(var/obj/machinery/r_n_d/server/S in world) + switch(S.server_id) + if(-1) + continue + if(0) + no_id_servers += S + else + server_ids += S.server_id - for(var/obj/machinery/r_n_d/server/S in no_id_servers) - var/num = 1 - while(!S.server_id) - if(num in server_ids) - num++ - else - S.server_id = num - server_ids += num - no_id_servers -= S + for(var/obj/machinery/r_n_d/server/S in no_id_servers) + var/num = 1 + while(!S.server_id) + if(num in server_ids) + num++ + else + S.server_id = num + server_ids += num + no_id_servers -= S + +/obj/machinery/r_n_d/server/centcom/process() + return - process() - return /obj/machinery/computer/rdservercontrol name = "R&D Server Controller" icon_state = "rdcomp" - var + var/screen = 0 + var/obj/machinery/r_n_d/server/temp_server + var/list/servers = list() + var/list/consoles = list() + var/badmin = 0 + +/obj/machinery/computer/rdservercontrol/Topic(href, href_list) + if(..()) + return + + add_fingerprint(usr) + usr.machine = src + if(!src.allowed(usr) && !emagged) + usr << "\red You do not have the required access level" + return + + if(href_list["main"]) screen = 0 - obj/machinery/r_n_d/server/temp_server - list - servers = list() - consoles = list() - badmin = 0 - Topic(href, href_list) - if(..()) - return - - add_fingerprint(usr) - usr.machine = src - if(!src.allowed(usr) && !emagged) - usr << "\red You do not have the required access level" - return - - if(href_list["main"]) - screen = 0 - - else if(href_list["access"] || href_list["data"] || href_list["transfer"]) - temp_server = null - consoles = list() - servers = list() + else if(href_list["access"] || href_list["data"] || href_list["transfer"]) + temp_server = null + consoles = list() + servers = list() + for(var/obj/machinery/r_n_d/server/S in world) + if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"])) + temp_server = S + break + if(href_list["access"]) + screen = 1 + for(var/obj/machinery/computer/rdconsole/C in world) + if(C.sync) + consoles += C + else if(href_list["data"]) + screen = 2 + else if(href_list["transfer"]) + screen = 3 for(var/obj/machinery/r_n_d/server/S in world) - if(S.server_id == text2num(href_list["access"]) || S.server_id == text2num(href_list["data"]) || S.server_id == text2num(href_list["transfer"])) - temp_server = S + if(S == src) + continue + servers += S + + else if(href_list["upload_toggle"]) + var/num = text2num(href_list["upload_toggle"]) + if(num in temp_server.id_with_upload) + temp_server.id_with_upload -= num + else + temp_server.id_with_upload += num + + else if(href_list["download_toggle"]) + var/num = text2num(href_list["download_toggle"]) + if(num in temp_server.id_with_download) + temp_server.id_with_download -= num + else + temp_server.id_with_download += num + + else if(href_list["reset_tech"]) + var/choice = alert("Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") + if(choice == "Continue") + for(var/datum/tech/T in temp_server.files.known_tech) + if(T.id == href_list["reset_tech"]) + T.level = 1 break - if(href_list["access"]) - screen = 1 - for(var/obj/machinery/computer/rdconsole/C in world) - if(C.sync) - consoles += C - else if(href_list["data"]) - screen = 2 - else if(href_list["transfer"]) - screen = 3 - for(var/obj/machinery/r_n_d/server/S in world) - if(S == src) - continue - servers += S + temp_server.files.RefreshResearch() - else if(href_list["upload_toggle"]) - var/num = text2num(href_list["upload_toggle"]) - if(num in temp_server.id_with_upload) - temp_server.id_with_upload -= num - else - temp_server.id_with_upload += num + else if(href_list["reset_design"]) + var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", "Continue", "Cancel") + 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() - else if(href_list["download_toggle"]) - var/num = text2num(href_list["download_toggle"]) - if(num in temp_server.id_with_download) - temp_server.id_with_download -= num - else - temp_server.id_with_download += num + updateUsrDialog() + return - else if(href_list["reset_tech"]) - var/choice = alert("Technology Data Rest", "Are you sure you want to reset this technology to its default data? Data lost cannot be recovered.", "Continue", "Cancel") - if(choice == "Continue") - for(var/datum/tech/T in temp_server.files.known_tech) - if(T.id == href_list["reset_tech"]) - T.level = 1 - break - temp_server.files.RefreshResearch() - - else if(href_list["reset_design"]) - var/choice = alert("Design Data Deletion", "Are you sure you want to delete this design? If you still have the prerequisites for the design, it'll reset to its base reliability. Data lost cannot be recovered.", "Continue", "Cancel") - 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() - - updateUsrDialog() +/obj/machinery/computer/rdservercontrol/attack_hand(mob/user as mob) + if(stat & (BROKEN|NOPOWER)) return + user.machine = src + var/dat = "" - attack_hand(mob/user as mob) - if(stat & (BROKEN|NOPOWER)) - return - user.machine = src - var/dat = "" + switch(screen) + if(0) //Main Menu + dat += "Connected Servers:

" - switch(screen) - if(0) //Main Menu - dat += "Connected Servers:

" + for(var/obj/machinery/r_n_d/server/S in world) + if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) + continue + dat += "[S.name] || " + dat += " Access Rights | " + dat += "Data Management" + if(badmin) dat += " | Server-to-Server Transfer" + dat += "
" - for(var/obj/machinery/r_n_d/server/S in world) - if(istype(S, /obj/machinery/r_n_d/server/centcom) && !badmin) - continue - dat += "[S.name] || " - dat += " Access Rights | " - dat += "Data Management" - if(badmin) dat += " | Server-to-Server Transfer" - dat += "
" - - if(1) //Access rights menu - dat += "[temp_server.name] Access Rights

" - dat += "Consoles with Upload Access
" - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. - if(C.id in temp_server.id_with_upload) - dat += " (Remove)
" - else - dat += " (Add)
" - dat += "Consoles with Download Access
" - for(var/obj/machinery/computer/rdconsole/C in consoles) - var/turf/console_turf = get_turf(C) - dat += "* [console_turf.loc]" - if(C.id in temp_server.id_with_download) - dat += " (Remove)
" - else - dat += " (Add)
" - dat += "
Main Menu" - - if(2) //Data Management menu - dat += "[temp_server.name] Data ManagementP

" - dat += "Known Technologies
" - for(var/datum/tech/T in temp_server.files.known_tech) - dat += "* [T.name] " - dat += "(Reset)
" //FYI, these are all strings. - dat += "Known Designs
" - for(var/datum/design/D in temp_server.files.known_designs) - dat += "* [D.name] " - dat += "(Delete)
" - dat += "
Main Menu" - - if(3) //Server Data Transfer - dat += "[temp_server.name] Server to Server Transfer

" - dat += "Send Data to what server?
" - for(var/obj/machinery/r_n_d/server/S in servers) - dat += "[S.name] (Transfer)
" - dat += "
Main Menu" - user << browse("R&D Server Control
[dat]", "window=server_control;size=575x400") - onclose(user, "server_control") - return - - attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) - if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) + if(1) //Access rights menu + dat += "[temp_server.name] Access Rights

" + dat += "Consoles with Upload Access
" + for(var/obj/machinery/computer/rdconsole/C in consoles) + var/turf/console_turf = get_turf(C) + dat += "* [console_turf.loc]" //FYI, these are all numeric ids, eventually. + if(C.id in temp_server.id_with_upload) + dat += " (Remove)
" else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - else if(istype(D, /obj/item/weapon/card/emag) && !emagged) - playsound(src.loc, 'sparks4.ogg', 75, 1) - emagged = 1 - user << "\blue You you disable the security protocols" - src.updateUsrDialog() - return + dat += " (Add)
" + dat += "Consoles with Download Access
" + for(var/obj/machinery/computer/rdconsole/C in consoles) + var/turf/console_turf = get_turf(C) + dat += "* [console_turf.loc]" + if(C.id in temp_server.id_with_download) + dat += " (Remove)
" + else + dat += " (Add)
" + dat += "
Main Menu" + + if(2) //Data Management menu + dat += "[temp_server.name] Data ManagementP

" + dat += "Known Technologies
" + for(var/datum/tech/T in temp_server.files.known_tech) + dat += "* [T.name] " + dat += "(Reset)
" //FYI, these are all strings. + dat += "Known Designs
" + for(var/datum/design/D in temp_server.files.known_designs) + dat += "* [D.name] " + dat += "(Delete)
" + dat += "
Main Menu" + + if(3) //Server Data Transfer + dat += "[temp_server.name] Server to Server Transfer

" + dat += "Send Data to what server?
" + for(var/obj/machinery/r_n_d/server/S in servers) + dat += "[S.name] (Transfer)
" + dat += "
Main Menu" + user << browse("R&D Server Control
[dat]", "window=server_control;size=575x400") + onclose(user, "server_control") + return + +/obj/machinery/computer/rdservercontrol/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) + if(istype(D, /obj/item/weapon/screwdriver)) + playsound(src.loc, 'Screwdriver.ogg', 50, 1) + if(do_after(user, 20)) + if (src.stat & BROKEN) + user << "\blue The broken glass falls out." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + new /obj/item/weapon/shard( src.loc ) + var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 3 + A.icon_state = "3" + A.anchored = 1 + del(src) + else + user << "\blue You disconnect the monitor." + var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) + var/obj/item/weapon/circuitboard/rdservercontrol/M = new /obj/item/weapon/circuitboard/rdservercontrol( A ) + for (var/obj/C in src) + C.loc = src.loc + A.circuit = M + A.state = 4 + A.icon_state = "4" + A.anchored = 1 + del(src) + else if(istype(D, /obj/item/weapon/card/emag) && !emagged) + playsound(src.loc, 'sparks4.ogg', 75, 1) + emagged = 1 + user << "\blue You you disable the security protocols" + src.updateUsrDialog() + return + /obj/machinery/r_n_d/server/robotics name = "Robotics R&D Server" @@ -374,6 +375,7 @@ 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"