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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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 )
|
||||
..()
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 625 B After Width: | Height: | Size: 0 B |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 3.6 KiB |
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||