More R&D Stuff:

- Destructive analyzer has a new, spiffier icon by Veyveyr! Old icon's moved to old_and_unused.dmi. Since stationobjs.dmi was getting crowded, a lot of completely unused icons were moved as well.
- R&D console now will link to any Destructive Analyzer, Protolathe, or Circuit Imprinter up to 3 tiles away (but two machines won't link to the same console or vice versa). Also, it will only link up to one of each.
- New stock parts: Micro-laser and Matter Bin
- Computer Frame icons moved to stock_parts.dmi
- New build frame: "Machine Frame." Similar to a computer frame, you can make a variety of generically boxy machines with it. It'll cost five metal to build (as well as all the other parts) but it won't be accessible to players just yet (there really wouldn't be a whole lot for them to build). More will be add eventually as part of the R&D system.
- Circuit boards are now divided into types. "computer" boards are used in a computer frame to make a computer console, "machine" boards are used in a Machine frame to make a machine of some type. Other types may or may not be added in the future. Mecha boards will be redone to this format eventually.
- New Circuit Boards (Machine Type): Protolathe, Destructive Analyzer, Circuit Imprinter, and Autolathe.
- New Traitor Item! Paralysis Pen. It looks like a penlight (the kind all doctors start with) except it injects Zombie Powder into the victim (similar to a changeling's paralysis dart). The target is aware but cannot move, speak, or emote. They also appear to be dead on health analyzers. Non-refillable and costs two telecrystals.
- Anti-toxin now works on Zombie Powder. It was intended to work, I just forgot to add it.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@961 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
morikou@gmail.com
2011-02-05 00:50:44 +00:00
parent 4ef4eb9473
commit e3f4cb8618
18 changed files with 430 additions and 177 deletions
@@ -253,6 +253,8 @@ datum
holder.remove_reagent("chloralhydrate", 5)
if(holder.has_reagent("carpotoxin"))
holder.remove_reagent("carpotoxin", 1)
if(holder.has_reagent("zombiepowder"))
holder.remove_reagent("zombiepowder", 0.5)
M:toxloss = max(M:toxloss-2,0)
..()
return
@@ -12,7 +12,7 @@
density = 1
anchored = 0
name = "Computer-frame"
icon = 'computer_frame.dmi'
icon = 'stock_parts.dmi'
icon_state = "0"
var/state = 0
var/obj/item/weapon/motherboard/mainboard = null
+18 -5
View File
@@ -1640,6 +1640,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
name = "stock part"
desc = "What?"
icon = 'stock_parts.dmi'
var/rating = 1
New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
@@ -1655,7 +1656,6 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
name = "Capacitor"
desc = "A basic capacitor used in the construction of a variety of devices."
icon_state = "capacitor"
var/max_charge = 100
origin_tech = list("energystorage" = 2)
m_amt = 50
g_amt = 50
@@ -1664,15 +1664,28 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
name = "Scanning Module"
desc = "A compact, high resolution scanning module used in the construction of certain devices."
icon_state = "scan_module"
var/rating = 1
origin_tech = list("magnets" = 2)
m_amt = 50
g_amt = 20
/obj/item/weapon/stock_parts/micro_manipulator
name = "Micro Manipulator"
name = "Micro-Manipulator"
desc = "A tiny little manipulator used in the construction of certain devices."
icon_state = "micro_mani"
var/rating = 1
origin_tech = list("robotics" = 1)
m_amt = 30
m_amt = 30
/obj/item/weapon/stock_parts/micro_laser
name = "Micro-laser"
desc = "A tiny laser used in certain devices."
icon_state = "micro_laser"
origin_tech = list("magnets" = 2)
m_amt = 10
g_amt = 20
/obj/item/weapon/stock_parts/matter_bin
name = "Matter Bin"
desc = "A container for hold compressed matter awaiting re-construction."
icon_state = "matter_bin"
origin_tech = list("materials" = 2)
m_amt = 80
+47 -40
View File
@@ -2,7 +2,7 @@
density = 1
anchored = 0
name = "Computer-frame"
icon = 'computer_frame.dmi'
icon = 'stock_parts.dmi'
icon_state = "0"
var/state = 0
var/obj/item/weapon/circuitboard/circuit = null
@@ -16,95 +16,98 @@
icon = 'module.dmi'
icon_state = "id_mod"
item_state = "electronic"
var/id = null
var/frequency = null
var/computertype = null
var/powernet = null
var/list/records = null
var
id = null
frequency = null
build_path = null
board_type = "computer"
list/req_components = null
powernet = null
list/records = null
/obj/item/weapon/circuitboard/security
name = "Circuit board (Security)"
computertype = "/obj/machinery/computer/security"
build_path = "/obj/machinery/computer/security"
/obj/item/weapon/circuitboard/aicore
name = "Circuit board (AI core)"
/obj/item/weapon/circuitboard/aiupload
name = "Circuit board (AI Upload)"
computertype = "/obj/machinery/computer/aiupload"
build_path = "/obj/machinery/computer/aiupload"
/obj/item/weapon/circuitboard/med_data
name = "Circuit board (Medical Records)"
computertype = "/obj/machinery/computer/med_data"
build_path = "/obj/machinery/computer/med_data"
/obj/item/weapon/circuitboard/pandemic
name = "Circuit board (PanD.E.M.I.C. 2200)"
computertype = "/obj/machinery/computer/pandemic"
build_path = "/obj/machinery/computer/pandemic"
/obj/item/weapon/circuitboard/scan_consolenew
name = "Circuit board (DNA Machine)"
computertype = "/obj/machinery/scan_consolenew"
build_path = "/obj/machinery/scan_consolenew"
/obj/item/weapon/circuitboard/communications
name = "Circuit board (Communications)"
computertype = "/obj/machinery/computer/communications"
build_path = "/obj/machinery/computer/communications"
/obj/item/weapon/circuitboard/card
name = "Circuit board (ID Computer)"
computertype = "/obj/machinery/computer/card"
build_path = "/obj/machinery/computer/card"
//obj/item/weapon/circuitboard/shield
// name = "Circuit board (Shield Control)"
// computertype = "/obj/machinery/computer/stationshield"
// build_path = "/obj/machinery/computer/stationshield"
/obj/item/weapon/circuitboard/teleporter
name = "Circuit board (Teleporter)"
computertype = "/obj/machinery/computer/teleporter"
build_path = "/obj/machinery/computer/teleporter"
/obj/item/weapon/circuitboard/secure_data
name = "Circuit board (Security Records)"
computertype = "/obj/machinery/computer/secure_data"
build_path = "/obj/machinery/computer/secure_data"
/obj/item/weapon/circuitboard/stationalert
name = "Circuit board (Station Alerts)"
computertype = "/obj/machinery/computer/station_alert"
build_path = "/obj/machinery/computer/station_alert"
/obj/item/weapon/circuitboard/atmospheresiphonswitch
name = "Circuit board (Atmosphere siphon control)"
computertype = "/obj/machinery/computer/atmosphere/siphonswitch"
build_path = "/obj/machinery/computer/atmosphere/siphonswitch"
/obj/item/weapon/circuitboard/air_management
name = "Circuit board (Atmospheric monitor)"
computertype = "/obj/machinery/computer/general_air_control"
build_path = "/obj/machinery/computer/general_air_control"
/obj/item/weapon/circuitboard/injector_control
name = "Circuit board (Injector control)"
computertype = "/obj/machinery/computer/general_air_control/fuel_injection"
build_path = "/obj/machinery/computer/general_air_control/fuel_injection"
/obj/item/weapon/circuitboard/atmos_alert
name = "Circuit board (Atmospheric Alert)"
computertype = "/obj/machinery/computer/atmos_alert"
build_path = "/obj/machinery/computer/atmos_alert"
/obj/item/weapon/circuitboard/pod
name = "Circuit board (Massdriver control)"
computertype = "/obj/machinery/computer/pod"
build_path = "/obj/machinery/computer/pod"
/obj/item/weapon/circuitboard/robotics
name = "Circuit board (Robotics Control)"
computertype = "/obj/machinery/computer/robotics"
build_path = "/obj/machinery/computer/robotics"
/obj/item/weapon/circuitboard/cloning
name = "Circuit board (Cloning)"
computertype = "/obj/machinery/computer/cloning"
build_path = "/obj/machinery/computer/cloning"
/obj/item/weapon/circuitboard/arcade
name = "Circuit board (Arcade)"
computertype = "/obj/machinery/computer/arcade"
build_path = "/obj/machinery/computer/arcade"
/obj/item/weapon/circuitboard/turbine_control
name = "Circuit board (Turbine control)"
computertype = "/obj/machinery/computer/turbine_computer"
build_path = "/obj/machinery/computer/turbine_computer"
/obj/item/weapon/circuitboard/solar_control
name = "Circuit board (Solar Control)" //name fixed 250810
computertype = "/obj/machinery/power/solar_control"
build_path = "/obj/machinery/power/solar_control"
/obj/item/weapon/circuitboard/powermonitor
name = "Circuit board (Power Monitor)" //name fixed 250810
computertype = "/obj/machinery/power/monitor"
build_path = "/obj/machinery/power/monitor"
/obj/item/weapon/circuitboard/olddoor
name = "Circuit board (DoorMex)"
computertype = "/obj/machinery/computer/pod/old"
build_path = "/obj/machinery/computer/pod/old"
/obj/item/weapon/circuitboard/syndicatedoor
name = "Circuit board (ProComp Executive)"
computertype = "/obj/machinery/computer/pod/old/syndicate"
build_path = "/obj/machinery/computer/pod/old/syndicate"
/obj/item/weapon/circuitboard/swfdoor
name = "Circuit board (Magix)"
computertype = "/obj/machinery/computer/pod/old/swf"
build_path = "/obj/machinery/computer/pod/old/swf"
/obj/item/weapon/circuitboard/prisoner
name = "Circuit board (Prisoner Management)"
computertype = "/obj/machinery/computer/prisoner"
build_path = "/obj/machinery/computer/prisoner"
/obj/item/weapon/circuitboard/rdconsole
name = "Circuit Board (RD Console)"
computertype = "/obj/machinery/computer/rdconsole"
build_path = "/obj/machinery/computer/rdconsole"
@@ -131,12 +134,16 @@
src.anchored = 0
src.state = 0
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
user << "\blue You place the circuit board inside the frame."
src.icon_state = "1"
src.circuit = P
user.drop_item()
P.loc = src
var/obj/item/weapon/circuitboard/B = P
if(B.board_type == "computer")
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
user << "\blue You place the circuit board inside the frame."
src.icon_state = "1"
src.circuit = P
user.drop_item()
P.loc = src
else
user << "\red This frame does not accept circuit boards of this type!"
if(istype(P, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
user << "\blue You screw the circuit board into place."
@@ -191,7 +198,7 @@
if(istype(P, /obj/item/weapon/screwdriver))
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
user << "\blue You connect the monitor."
var/B = new src.circuit.computertype ( src.loc )
var/B = new src.circuit.build_path ( src.loc )
if(circuit.powernet) B:powernet = circuit.powernet
if(circuit.id) B:id = circuit.id
if(circuit.records) B:records = circuit.records
+149
View File
@@ -0,0 +1,149 @@
/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
name = "machine frame"
icon = 'stock_parts.dmi'
icon_state = "box_0"
density = 1
anchored = 0
var
obj/item/weapon/circuitboard/circuit = null
list/components = null
list/req_components = null
state = 0
/*
To Do: Add deconstruct code to constructable machines. A marvelous idea, I know.
*/
/obj/machinery/constructable_frame/machine_frame
attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(0)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, 'Ratchet.ogg', 75, 1)
user << "\blue You wrench the frame into place."
anchored = 1
state = 1
if(1)
if(istype(P, /obj/item/weapon/cable_coil))
if(P:amount >= 5)
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
user << "\blue You start to add cables to the frame."
if(do_after(user, 20))
P:amount -= 5
if(!P:amount) del(P)
user << "\blue You add cables to the frame."
state = 2
icon_state = "box_1"
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, 'Ratchet.ogg', 75, 1)
user << "\blue You unbolt the frame from the floor."
anchored = 0
state = 0
if(2)
if(istype(P, /obj/item/weapon/circuitboard))
var/obj/item/weapon/circuitboard/B = P
if(B.board_type == "machine")
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
user << "\blue You add the circuit board to the frame."
circuit = P
user.drop_item()
P.loc = src
icon_state = "box_2"
state = 3
components = list()
req_components = circuit.req_components.Copy()
for(var/A in circuit.req_components)
req_components[A] = circuit.req_components[A]
else
user << "\red This frame does not accept circuit boards of this type!"
if(istype(P, /obj/item/weapon/wirecutters))
playsound(src.loc, 'wirecutter.ogg', 50, 1)
user << "\blue You remove the cables."
state = 1
icon_state = "box_0"
var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( src.loc )
A.amount = 5
if(3)
if(istype(P, /obj/item/weapon/crowbar))
playsound(src.loc, 'Crowbar.ogg', 50, 1)
state = 2
circuit.loc = src.loc
circuit = null
if(components.len == 0)
user << "\blue You remove the circuit board."
else
user << "\blue You remove the circuit board and other components."
for(var/obj/item/weapon/W in components)
W.loc = src.loc
req_components = null
components = null
icon_state = "box_1"
if(istype(P, /obj/item/weapon/screwdriver))
var/component_check = 1
for(var/R in req_components)
if(req_components[R] > 0)
component_check = 0
break
if(component_check)
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
new src.circuit.build_path ( src.loc )
del(src)
if(istype(P, /obj/item/weapon))
for(var/I in req_components)
if(istype(P, text2path(I)) && (req_components[I] > 0))
user.drop_item()
P.loc = src
components += P
req_components[I]--
break
if(P.loc != src)
user << "\red You cannot add that component to the machine!"
//Machine Frame Circuit Boards
/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit,
micro-manipulator, console screen, beaker, Microlaser, matter bin
Note: Once everything is added to the public areas, will add m_amt and g_amt to circuit boards since autolathe won't be able
to destroy them and players will be able to make replacements.
*/
/obj/item/weapon/circuitboard/destructive_analyzer
name = "Circuit board (Destructive Analyzer)"
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = list("magnets" = 3, "materials" = 2)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/micro_manipulator" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1)
/obj/item/weapon/circuitboard/autolathe
name = "Circuit board (Destructive Analyzer)"
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = list("materials" = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/micro_manipulator" = 2,
"/obj/item/weapon/stock_parts/console_screen" = 1)
/obj/item/weapon/circuitboard/protolathe
name = "Circuit board (Destructive Analyzer)"
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = list("materials" = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/micro_manipulator" = 2)
/obj/item/weapon/circuitboard/circuit_imprinter
name = "Circuit board (Destructive Analyzer)"
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = list("materials" = 3, "programming" = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/micro_manipulator" = 1,
"/obj/item/weapon/reagent_containers/glass/beaker" = 2)
+5
View File
@@ -40,6 +40,7 @@
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=emag'>Electromagnet Card</A> (3)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=imp_freedom'>Freedom Implant (with injector)</A> (3)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=sleepypen'>Sleepy Pen</A> (5)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=paralysispen'>Paralysis Pen</A> (2)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=cloak'>Cloaking Device</A> (4)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=sword'>Energy Sword</A> (4)<BR>"
src.menu_message += "<A href='byond://?src=\ref[src];buy_item=bomb'>Plastic Explosives</A> (4)<BR>"
@@ -113,6 +114,10 @@
if (src.uses >= 5)
src.uses -= 5
new /obj/item/weapon/pen/sleepypen(get_turf(src.hostpda))
if("paralysispen")
if (src.uses >= 2)
src.uses -= 2
new /obj/item/device/flashlight/pen/paralysis(get_turf(src.hostpda))
if("projector")
if (src.uses >= 4)
src.uses -= 4
+18
View File
@@ -171,6 +171,24 @@
if(M.reagents) reagents.trans_to(M, 50) //used to be 150
return
/obj/item/device/flashlight/pen/paralysis/New()
var/datum/reagents/R = new/datum/reagents(15)
reagents = R
R.my_atom = src
R.add_reagent("zombiepowder", 15)
..()
return
/obj/item/device/flashlight/pen/paralysis/attack(mob/M as mob, mob/user as mob)
if (!( istype(M, /mob) ))
return
if (reagents.total_volume)
user << "\red You stab [M] with the penlight."
M << "\red You feel a tiny prick!"
if(M.reagents) reagents.trans_to(M, 15)
..()
return
/obj/item/weapon/Bump(mob/M as mob)
spawn( 0 )
..()
+1 -4
View File
@@ -4,17 +4,14 @@ a /datum/desgin on the linked R&D console. You can then print them out in a fasi
using metal and glass, it uses glass and reagents (usually sulfuric acis).
*/
/obj/machinery/circuit_imprinter
/obj/machinery/r_n_d/circuit_imprinter
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
density = 1
anchored = 1
flags = OPENCONTAINER
var
g_amount = 0
const/max_g_amount = 75000.0
busy = 0
obj/machinery/computer/rdconsole/linked_console = null //Linked R&D Console
New()
var/datum/reagents/R = new/datum/reagents(100) //Holder for the reagents used as materials.
+1 -22
View File
@@ -13,14 +13,11 @@ The currently supporting non-reagent materials:
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
TODO:
- Add a "has materials" type proc to... something...
*/
#define IMPRINTER 1 //For circuits.
#define PROTOLATHE 2 //For stuff with reliability issues.
#define AUTOLATHE 4 //For general use or 100% reliability items.
//Note: More then one of these can be added to a design but it isn't suggested.
//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
@@ -55,7 +52,6 @@ datum
desc = "Allows for the construction of circuit boards used to build security camera computers."
id = "seccamera"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/security"
@@ -65,7 +61,6 @@ datum
desc = "Allows for the construction of circuit boards used to build new AI cores."
id = "aicore"
req_tech = list("programming" = 5, "biotech" = 5)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/aicore"
@@ -75,7 +70,6 @@ datum
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
id = "aiupload"
req_tech = list("programming" = 5)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/aiupload"
@@ -85,7 +79,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a medical records console."
id = "med_data"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/med_data"
@@ -95,7 +88,6 @@ datum
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)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/pandemic"
@@ -105,7 +97,6 @@ datum
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)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/machinery/scan_consolenew"
@@ -115,7 +106,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a communications console."
id = "comconsole"
req_tech = list("programming" = 2, "magnets" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/communications"
@@ -125,7 +115,6 @@ datum
desc = "Allows for the construction of circuit boards used to build an ID computer."
id = "idcardconsole"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/card"
@@ -135,7 +124,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a teleporter control console."
id = "teleconsole"
req_tech = list("programming" = 3, "bluespace" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/teleporter"
@@ -145,7 +133,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a security records console."
id = "secdata"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/secure_data"
@@ -155,7 +142,6 @@ datum
desc = "Allows for the construction of circuit boards used to build an atmosphere alert console.."
id = "atmosalerts"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/atmosphere/alerts"
@@ -165,7 +151,6 @@ datum
desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
id = "air_management"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/general_air_control"
@@ -175,7 +160,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a General Alert console."
id = "general_alert"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/general_alert"
@@ -185,7 +169,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
id = "robocontrol"
req_tech = list("programming" = 4)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/robotics"
@@ -195,7 +178,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
id = "clonecontrol"
req_tech = list("programming" = 3, "biotech" = 4)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/cloning"
@@ -205,7 +187,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
id = "arcademachine"
req_tech = list("programming" = 1)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/arcade"
@@ -215,7 +196,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a new power monitor"
id = "powermonitor"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/machinery/power/monitor"
@@ -225,7 +205,6 @@ datum
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
id = "prisonmanage"
req_tech = list("programming" = 2)
reliability = 100
build_type = IMPRINTER
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/prisoner"
+13 -8
View File
@@ -5,13 +5,12 @@ It is used to destroy hand-held objects and advance technological research. Cont
Note: Must be placed east/right of an R&D console to function.
*/
/obj/machinery/destructive_analyzer
/obj/machinery/r_n_d/destructive_analyzer
name = "Destructive Analyzer"
icon_state = "d_analyzer"
var/obj/item/weapon/loaded_item = null
var/obj/machinery/computer/rdconsole/linked_console
anchored = 1
density = 1
var
obj/item/weapon/loaded_item = null
busy = 0
meteorhit()
del(src)
@@ -19,18 +18,24 @@ Note: Must be placed east/right of an R&D console to function.
attackby(var/obj/O as obj, var/mob/user as mob)
if (!linked_console)
user << "\The protolathe must be linked to an R&D console first!"
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/weapon) && !loaded_item)
if (O.origin_tech.len == 0)
user << "\red You cannot deconstruct this item!"
return
busy = 1
loaded_item = O
user.drop_item()
O.loc = src
user << "\blue You add the [O.name] to the machine!"
image('stationobjs.dmi', icon_state="d_analyzer_o")
flick("d_analyzer_la", src)
spawn(10)
icon_state = "d_analyzer_l"
busy = 0
return
//For testing purposes only.
+53 -55
View File
@@ -7,63 +7,61 @@ it creates. All the menus and other manipulation commands are in the R&D console
Note: Must be placed west/left of and R&D console to function.
*/
/obj/machinery/protolathe
/obj/machinery/r_n_d/protolathe
name = "Protolathe"
density = 1
anchored = 1.0
icon_state = "protolathe"
var/busy = 0 //
var/max_m_amount = 150000.0
var/max_g_amount = 75000.0
var/m_amount = 0.0
var/g_amount = 0.0
var/obj/machinery/computer/rdconsole/linked_console = null
var
busy = 0 //
max_m_amount = 150000.0
max_g_amount = 75000.0
m_amount = 0.0
g_amount = 0.0
/obj/machinery/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (!linked_console)
user << "\The protolathe must be linked to an R&D console first!"
return 1
if (!istype(O, /obj/item/stack))
user << "\red You cannot insert this item into the protolathe!"
return 1
if (stat)
return 1
if (busy)
user << "\red The protolathe is busy. Please wait for completion of previous operation."
return 1
if (src.m_amount + O.m_amt > max_m_amount)
user << "\red The protolathe is full. Please remove metal from the protolathe in order to insert more."
return 1
if (src.g_amount + O.g_amt > max_g_amount)
user << "\red The protolathe is full. Please remove glass from the protolathe in order to insert more."
return 1
if (O.m_amt == 0 && O.g_amt == 0)
user << "\red This object does not contain significant amounts of metal or glass, or cannot be accepted by the protolathe due to size or hazardous materials."
return 1
attackby(var/obj/item/O as obj, var/mob/user as mob)
if (!linked_console)
user << "\The protolathe must be linked to an R&D console first!"
return 1
if (!istype(O, /obj/item/stack))
user << "\red You cannot insert this item into the protolathe!"
return 1
if (stat)
return 1
if (busy)
user << "\red The protolathe is busy. Please wait for completion of previous operation."
return 1
if (src.m_amount + O.m_amt > max_m_amount)
user << "\red The protolathe is full. Please remove metal from the protolathe in order to insert more."
return 1
if (src.g_amount + O.g_amt > max_g_amount)
user << "\red The protolathe is full. Please remove glass from the protolathe in order to insert more."
return 1
if (O.m_amt == 0 && O.g_amt == 0)
user << "\red This object does not contain significant amounts of metal or glass, or cannot be accepted by the protolathe due to size or hazardous materials."
return 1
var/amount = 1
var/obj/item/stack/stack
var/m_amt = O.m_amt
var/g_amt = O.g_amt
stack = O
amount = stack.amount
if (m_amt)
amount = min(amount, round((max_m_amount-src.m_amount)/m_amt))
flick("protolathe_o",src)//plays metal insertion animation
if (g_amt)
amount = min(amount, round((max_g_amount-src.g_amount)/g_amt))
flick("protolathe_r",src)//plays glass insertion animation
stack.use(amount)
icon_state = "protolathe"
busy = 1
use_power(max(1000, (m_amt+g_amt)*amount/10))
spawn(16)
var/amount = 1
var/obj/item/stack/stack
var/m_amt = O.m_amt
var/g_amt = O.g_amt
stack = O
amount = stack.amount
if (m_amt)
amount = min(amount, round((max_m_amount-src.m_amount)/m_amt))
flick("protolathe_o",src)//plays metal insertion animation
if (g_amt)
amount = min(amount, round((max_g_amount-src.g_amount)/g_amt))
flick("protolathe_r",src)//plays glass insertion animation
stack.use(amount)
icon_state = "protolathe"
flick("protolathe_o",src)
src.m_amount += m_amt * amount
src.g_amount += g_amt * amount
if (O && O.loc == src)
del(O)
busy = 0
src.updateUsrDialog()
return
busy = 1
use_power(max(1000, (m_amt+g_amt)*amount/10))
spawn(16)
icon_state = "protolathe"
flick("protolathe_o",src)
src.m_amount += m_amt * amount
src.g_amount += g_amt * amount
if (O && O.loc == src)
del(O)
busy = 0
src.updateUsrDialog()
return
+118 -39
View File
@@ -1,11 +1,39 @@
/*
Research and Development (R&D) Console
This is the main work horse of the R&D system. It contains the menus/controls for the Destructive Analyzer and the Protolathe. It
also contains the /datum/research holder with all the known/possible technology paths and device designs.
This is the main work horse of the R&D system. It contains the menus/controls for the Destructive Analyzer, Protolathe, and Circuit
imprinter. It also contains the /datum/research holder with all the known/possible technology paths and device designs.
Basic use: When it first is created, it will attempt to link up to related devices within 3 squares. It'll only link up if they
aren't already linked to another console. Any consoles it cannot link up with (either because all of a certain type are already
linked or there aren't any in range), you'll just not have access to that menu. In the settings menu, there are menu options that
allow a player to attempt to re-sync with nearby consoles. You can also force it to disconnect from a specific console.
The imprinting and construction menus do NOT require toxins access to access but all the other menus do. However, if you leave it
on a menu, nothing is to stop the person from using the options on that menu (although they won't be able to change to a different
one). You can also lock the console on the settings menu if you're feeling paranoid and you don't want anyone messing with it who
doesn't have toxins access.
When a R&D console is destroyed or even partially disassembled, you lose all research data on it. However, there are two ways around
this dire fate:
- The easiest way is to go to the settings menu and select "Sync Database with Network." That causes it to upload (but not download)
it's data to every other device in the game. Each console has a "disconnect from network" option that'll will cause data base sync
operations to skip that console. This is useful if you want to make a "public" R&D console or, for example, give the engineers
a circuit imprinter with certain designs on it and don't want it accidentally updating. The downside of this method is that you have
to have physical access to the other console to send data back. Note: An R&D console is on CentCom so if a random griffan happens to
cause a ton of data to be lost, an admin can go send it back.
- The second method is with Technology Disks and Design Disks. Each of these disks can hold a single technology or design datum in
it's entirety. You can then take the disk to any R&D console and upload it's data to it. This method is a lot more secure (since it
won't update every console in existence) but it's more of a hassle to do. Also, the disks can be stolen.
*/
/obj/machinery/r_n_d //All devices that link into the R&D console fall into thise type for easy identification.
name = "R&D Device"
density = 1
anchored = 1
var/obj/machinery/computer/rdconsole/linked_console
/obj/machinery/computer/rdconsole
name = "R&D Console"
icon_state = "rdcomp"
@@ -14,9 +42,9 @@ also contains the /datum/research holder with all the known/possible technology
obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk.
obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk.
obj/machinery/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer
obj/machinery/protolathe/linked_lathe = null //Linked Protolathe
obj/machinery/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter
obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer
obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe
obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter
screen = 1.0 //Which screen is currently showing.
sync = 1 //Will it get updated when the R&D console does it's syncing process.
@@ -60,15 +88,21 @@ also contains the /datum/research holder with all the known/possible technology
return return_name
SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
linked_destroy = null
linked_destroy = locate(/obj/machinery/destructive_analyzer, get_step(src, EAST))
if(linked_destroy) linked_destroy.linked_console = src
linked_lathe = null
linked_lathe = locate(/obj/machinery/protolathe, get_step(src, WEST))
if(linked_lathe) linked_lathe.linked_console = src
linked_imprinter = null
linked_imprinter = locate(/obj/machinery/circuit_imprinter/, get_step(src, WEST))
if(linked_imprinter) linked_imprinter.linked_console = src
for(var/obj/machinery/r_n_d/D in orange(3,src))
if(D.linked_console != null)
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
@@ -182,28 +216,39 @@ also contains the /datum/research holder with all the known/possible technology
screen = 1.4
else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
linked_destroy.loaded_item:loc = src.loc
linked_destroy.loaded_item = null
screen = 2.1
if(linked_destroy.busy)
usr << "\red The destructive analyzer is busy at the moment."
else
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.
var/choice = input("Proceeding will destroy loaded item.") in list("Proceed", "Cancel")
if(choice == "Cancel") return
screen = 0.1
updateUsrDialog()
flick("d_analyzer_n", linked_destroy)
spawn(16)
for(var/T in linked_destroy.loaded_item.origin_tech)
files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
if(linked_lathe) //Also sends salvaged materials to a linked autolateh, if any.
linked_lathe.m_amount = min(linked_lathe.max_m_amount, (linked_lathe.m_amount + linked_destroy.loaded_item.m_amt))
linked_lathe.g_amount = min(linked_lathe.max_g_amount, (linked_lathe.g_amount + linked_destroy.loaded_item.g_amt))
linked_destroy.loaded_item = null
for(var/I in contents)
del(I)
linked_destroy.overlays = null
screen = 1.0
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")
linked_destroy.busy = 1
if(choice == "Cancel") return
screen = 0.1
updateUsrDialog()
flick("d_analyzer_process", linked_destroy)
spawn(24)
linked_destroy.busy = 0
for(var/T in linked_destroy.loaded_item.origin_tech)
files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
if(linked_lathe) //Also sends salvaged materials to a linked autolateh, if any.
linked_lathe.m_amount = min(linked_lathe.max_m_amount, (linked_lathe.m_amount + linked_destroy.loaded_item.m_amt))
linked_lathe.g_amount = min(linked_lathe.max_g_amount, (linked_lathe.g_amount + linked_destroy.loaded_item.g_amt))
linked_destroy.loaded_item = null
for(var/I in contents)
del(I)
linked_destroy.icon_state = "d_analyzer"
screen = 1.0
updateUsrDialog()
else if(href_list["lock"]) //Lock the console from use by anyone without tox access.
if(src.allowed(usr))
@@ -247,12 +292,12 @@ also contains the /datum/research holder with all the known/possible technology
if(linked_lathe.g_amount < 0)
linked_lathe.g_amount = 0
var/obj/new_item = new being_built.build_path(src)
new_item.loc = src.loc
new_item.loc = linked_destroy.loc
linked_lathe.busy = 0
screen = 3.1
updateUsrDialog()
else if(href_list["imprint"])
else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something.
linked_imprinter.busy = 1
screen = 0.4
updateUsrDialog()
@@ -277,17 +322,36 @@ also contains the /datum/research holder with all the known/possible technology
linked_imprinter.reagents.remove_reagent(I, being_built.materials[I])
power += being_built.materials[I]
var/obj/new_item = new being_built.build_path(src)
new_item.loc = src.loc
new_item.loc = linked_destroy.loc
linked_imprinter.busy = 0
screen = 4.1
updateUsrDialog()
else if(href_list["dispose"])
else if(href_list["dispose"]) //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["disposeall"])
else if(href_list["disposeall"]) //Causes the circuit imprinter to dispose of all it's reagents.
linked_imprinter.reagents.clear_reagents()
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.6
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
updateUsrDialog()
return
@@ -296,7 +360,6 @@ also contains the /datum/research holder with all the known/possible technology
return
user.machine = src
var/dat = ""
SyncRDevices()
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)
@@ -409,9 +472,25 @@ also contains the /datum/research holder with all the known/possible technology
dat += "<A href='?src=\ref[src];sync=1'>Sync Database with Network</A><BR>"
if(sync) dat += "<A href='?src=\ref[src];togglesync=1'>Disconnect from Research Network</A><BR>"
else dat += "<A href='?src=\ref[src];togglesync=1'>Connect to Research Network</A><BR>"
dat += "<A href='?src=\ref[src];menu=1.7'>Device Linkage Menu</A><BR>"
dat += "<A href='?src=\ref[src];lock=0.2'>Lock Console</A><BR>"
dat += "<HR><A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
if(1.7) //R&D device linkage
dat += "R&D Console Device Linkage Menu:<BR><BR>"
dat += "<A href='?src=\ref[src];find_device=1'>Re-sync with Nearby Devices</A><BR>"
dat += "Linked Devices:<BR>"
if(!linked_destroy && !linked_lathe && !linked_imprinter)
dat += "No devices connected<BR>"
else
if(linked_destroy)
dat += "* Destructive Analyzer <A href='?src=\ref[src];disconnect=destroy'>(Disconnect)</A><BR>"
if(linked_lathe)
dat += "* Protolathe <A href='?src=\ref[src];disconnect=lathe'>(Disconnect)</A><BR>"
if(linked_imprinter)
dat += "* Circuit Imprinter <A href='?src=\ref[src];disconnect=imprinter'>(Disconnect)</A><BR>"
dat += "<HR><A href='?src=\ref[src];menu=1.6'>Settings Menu</A>"
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
////////////////////DESTRUCTIVE ANALYZER SCREENS////////////////////////////
if(2.0)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 625 B

After

Width:  |  Height:  |  Size: 0 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

+3 -3
View File
@@ -5467,9 +5467,9 @@
"cbg" = (/obj/stool/chair{dir = 1},/turf/unsimulated/floor{tag = "icon-grimy"; icon_state = "grimy"},/area/centcom/creed)
"cbh" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/turf/unsimulated/floor{tag = "icon-grimy"; icon_state = "grimy"},/area/centcom/creed)
"cbi" = (/obj/grille,/obj/window/reinforced/west{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/window/reinforced/west,/obj/window/reinforced/west{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom)
"cbj" = (/obj/machinery/protolathe,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/centcom)
"cbj" = (/obj/machinery/r_n_d/protolathe,/turf/unsimulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/centcom)
"cbk" = (/obj/machinery/computer/rdconsole,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/centcom)
"cbl" = (/obj/machinery/destructive_analyzer,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/centcom)
"cbl" = (/obj/machinery/r_n_d/destructive_analyzer,/turf/unsimulated/floor{tag = "icon-floor"; icon_state = "floor"},/area/centcom)
"cbm" = (/obj/machinery/shieldwallgen{attached = 1; locked = 1; pixel_y = 0},/turf/unsimulated/floor{tag = "icon-green (SOUTHEAST)"; icon_state = "green"; dir = 6},/area/centcom)
"cbn" = (/obj/grille,/obj/window/reinforced/west{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/window/reinforced/west{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/window/reinforced/west{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/window/reinforced{dir = 8; icon_state = "rwindow"; name = "tinted window"; opacity = 1; tag = "icon-rwindow (WEST)"},/turf/unsimulated/floor{name = "plating"},/area/centcom)
"cbo" = (/obj/grille,/obj/window/reinforced/west,/obj/window/reinforced/west{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/window/reinforced/west{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/window/reinforced/west{dir = 4; icon_state = "rwindow"; name = "tinted window"; opacity = 1; tag = "icon-rwindow (EAST)"},/turf/unsimulated/floor{name = "plating"},/area/centcom)
@@ -5486,7 +5486,7 @@
"cbz" = (/obj/window/reinforced/east{dir = 5},/turf/unsimulated/floor{tag = "icon-grimy"; icon_state = "grimy"},/area/centcom/creed)
"cbA" = (/obj/item/weapon/secstorage/ssafe{pixel_x = 4; pixel_y = -25},/turf/unsimulated/floor{tag = "icon-grimy"; icon_state = "grimy"},/area/centcom/creed)
"cbB" = (/obj/grille,/obj/window/reinforced/west{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/window/reinforced/west{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/window/reinforced/west,/turf/unsimulated/floor{name = "plating"},/area/centcom)
"cbC" = (/obj/machinery/circuit_imprinter,/turf/unsimulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/centcom)
"cbC" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/unsimulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/centcom)
"cbD" = (/obj/machinery/computer/rdconsole,/turf/unsimulated/floor{tag = "icon-green"; icon_state = "green"},/area/centcom)
"cbE" = (/turf/unsimulated/floor{tag = "icon-green (NORTHEAST)"; icon_state = "green"; dir = 5},/area/centcom)
"cbF" = (/obj/secure_closet/engineering_electrical,/turf/unsimulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/centcom)
+1
View File
@@ -352,6 +352,7 @@
#include "code\game\machinery\blender.dm"
#include "code\game\machinery\camera.dm"
#include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\constructable_frame.dm"
#include "code\game\machinery\cryo.dm"
#include "code\game\machinery\deployable.dm"
#include "code\game\machinery\dispenser.dm"