diff --git a/baystation12.dme b/baystation12.dme
index 1da6e16ab99..62204e566d4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -791,6 +791,7 @@
#include "code\js\byjax.dm"
#include "code\js\menus.dm"
#include "code\modules\admin\admin.dm"
+#include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_memo.dm"
#include "code\modules\admin\admin_verbs.dm"
#include "code\modules\admin\banjob.dm"
@@ -1082,6 +1083,7 @@
#include "code\modules\power\singularity\emitter.dm"
#include "code\modules\power\singularity\field_generator.dm"
#include "code\modules\power\singularity\generator.dm"
+#include "code\modules\power\singularity\investigate.dm"
#include "code\modules\power\singularity\singularity.dm"
#include "code\modules\power\singularity\particle_accelerator\particle.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm
index 71b46fe5bf5..3e7bc8a0977 100644
--- a/code/game/cellautomata.dm
+++ b/code/game/cellautomata.dm
@@ -85,13 +85,13 @@
src.load_motd()
src.load_rules()
src.load_admins()
+ investigate_reset()
if (config.usealienwhitelist)
load_alienwhitelist()
if (config.usewhitelist)
load_whitelist()
LoadBansjob()
src.update_status()
-
makepowernets()
sun = new /datum/sun()
@@ -196,4 +196,4 @@
/obj/effect/decal/point/point()
set src in oview()
set hidden = 1
- return
+ return
\ No newline at end of file
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index c744d9fd1e3..42ae74c5cae 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -79,7 +79,7 @@
/obj/machinery/nuclearbomb/Topic(href, href_list)
..()
- if (usr.stat || usr.restrained())
+ if (!usr.canmove || usr.stat || usr.restrained())
return
if (!ishuman(usr))
usr << "\red You don't have the dexterity to do this!"
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 20323f858ea..53365eea928 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -44,7 +44,7 @@
/obj/machinery/pipedispenser/Topic(href, href_list)
if(..())
return
- if(unwrenched)
+ if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=pipedispenser")
return
usr.machine = src
@@ -135,6 +135,9 @@
usr.machine = src
src.add_fingerprint(usr)
if(href_list["dmake"])
+ if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=pipedispenser")
+ return
if(!wait)
var/p_type = text2num(href_list["dmake"])
var/obj/structure/disposalconstruct/C = new (src.loc)
diff --git a/code/game/objects/storage/backpack.dm b/code/game/objects/storage/backpack.dm
index a6eb10e6fe7..7e5b3ff895f 100644
--- a/code/game/objects/storage/backpack.dm
+++ b/code/game/objects/storage/backpack.dm
@@ -47,6 +47,7 @@
return
/* Remove these comments to re-enable BoH BoH Singuloths.-Hawk.
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
+ investigate_log("has become a singularity. Caused by [user.key]","singulo")
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
del(W)
var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm
new file mode 100644
index 00000000000..4f2956cf9bf
--- /dev/null
+++ b/code/modules/admin/admin_investigate.dm
@@ -0,0 +1,43 @@
+//By Carnwennan
+
+//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game.
+//lists and variables are great. However, they have several major flaws:
+//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches.
+//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that
+//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine!
+#define INVESTIGATE_DIR "data/investigate/"
+
+//SYSTEM
+/proc/investigate_subject2file(var/subject)
+ switch(subject)
+ if("singulo")
+ return file("[INVESTIGATE_DIR]singulo.html")
+ if("silicon")
+ return file("[INVESTIGATE_DIR]silicon.html")
+ else
+ return
+
+/proc/investigate_reset()
+ if(fdel(INVESTIGATE_DIR)) return 1
+ return 0
+
+/atom/proc/investigate_log(var/message, var/subject)
+ if(!message) return
+ var/F = investigate_subject2file(subject)
+ if(!F) return
+ F << "[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z]) || [src] [message]
"
+
+
+
+//ADMINVERBS
+/client/proc/investigate_show( subject in list("singulo","silicon") )
+ set name = "Investigate"
+ set category = "Admin"
+ if(!holder) return
+ var/F = investigate_subject2file(subject)
+ if(!F)
+ src << "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed."
+ return
+ src << browse(F,"window=investigate;size=800x300")
+
+
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 733d6c1bccf..bc32786d082 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -105,6 +105,7 @@
//Admin Observer
if (holder.level >= -1)
+ verbs += /client/proc/investigate_show
verbs += /client/proc/cmd_admin_say
verbs += /client/proc/cmd_admin_gib_self
verbs += /client/proc/deadmin_self
@@ -423,10 +424,11 @@
verbs -= /client/proc/deadmin_self
verbs -= /client/proc/jumptocoord
verbs -= /client/proc/everyone_random
- verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
+ verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
verbs -= /client/proc/getserverlog
verbs -= /client/proc/cinematic //show a cinematic sequence
verbs -= /client/proc/admin_memo
+ verbs -= /client/proc/investigate_show
verbs -= /client/proc/cmd_admin_change_custom_event
verbs -= /client/proc/admin_invis
verbs -= /client/proc/callprocgen
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 8a4514cfee7..a00d1940f41 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -9,16 +9,16 @@
directwired = 1
req_access = list(access_engine)
// use_power = 0
- var
- obj/item/weapon/tank/plasma/P = null
- last_power = 0
- active = 0
- locked = 0
- drainratio = 1
+ var/obj/item/weapon/tank/plasma/P = null
+ var/last_power = 0
+ var/active = 0
+ var/locked = 0
+ var/drainratio = 1
process()
if(P)
if(P.air_contents.toxins <= 0)
+ investigate_log("out of fuel.","singulo")
P.air_contents.toxins = 0
eject()
else
@@ -32,6 +32,7 @@
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"You turn the [src.name] [active? "on":"off"].")
+ investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo")
return
else
user << "\red The controls are locked!"
@@ -96,48 +97,47 @@
return ..()
- proc
- eject()
- var/obj/item/weapon/tank/plasma/Z = src.P
- if (!Z)
- return
- Z.loc = get_turf(src)
- Z.layer = initial(Z.layer)
- src.P = null
- if(active)
- toggle_power()
- else
- updateicon()
-
- receive_pulse(var/pulse_strength)
- if(P && active)
- var/power_produced = 0
- power_produced = P.air_contents.toxins*pulse_strength*20
- add_avail(power_produced)
- last_power = power_produced
- return
+ proc/eject()
+ locked = 0
+ var/obj/item/weapon/tank/plasma/Z = src.P
+ if (!Z)
return
-
-
- updateicon()
- overlays = null
- if(P)
- overlays += image('singularity.dmi', "ptank")
- if(stat & (NOPOWER|BROKEN))
- return
- if(active)
- overlays += image('singularity.dmi', "on")
-
-
- toggle_power()
- active = !active
- if(active)
- icon_state = "ca_on"
- flick("ca_active", src)
-
- else
- icon_state = "ca"
- flick("ca_deactive", src)
+ Z.loc = get_turf(src)
+ Z.layer = initial(Z.layer)
+ src.P = null
+ if(active)
+ toggle_power()
+ else
updateicon()
- return
+
+ proc/receive_pulse(var/pulse_strength)
+ if(P && active)
+ var/power_produced = 0
+ power_produced = P.air_contents.toxins*pulse_strength*20
+ add_avail(power_produced)
+ last_power = power_produced
+ return
+ return
+
+
+ proc/updateicon()
+ overlays = null
+ if(P)
+ overlays += image('singularity.dmi', "ptank")
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(active)
+ overlays += image('singularity.dmi', "on")
+
+
+ proc/toggle_power()
+ active = !active
+ if(active)
+ icon_state = "ca_on"
+ flick("ca_active", src)
+ else
+ icon_state = "ca"
+ flick("ca_deactive", src)
+ updateicon()
+ return
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index e8ce8d4a364..cb11bdeb6b5 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -11,16 +11,15 @@
idle_power_usage = 10
active_power_usage = 300
- var
- frequency = 1
- active = 0
- fire_delay = 100
- last_shot = 0
- shot_number = 0
- state = 0
- locked = 0
- energy = 0
- mega_energy = 0
+ var/frequency = 1
+ var/active = 0
+ var/fire_delay = 100
+ var/last_shot = 0
+ var/shot_number = 0
+ var/state = 0
+ var/locked = 0
+ var/energy = 0
+ var/mega_energy = 0
verb/rotate()
@@ -39,6 +38,9 @@
..()
return
+ Del()
+ investigate_log("deleted at ([x],[y],[z])","singulo")
+ ..()
update_icon()
if (active && !(stat & (NOPOWER|BROKEN)))
@@ -55,12 +57,14 @@
src.active = 0
user << "You turn off the [src]."
src.use_power = 1
+ investigate_log("turned off by [user.key]","singulo")
else
src.active = 1
user << "You turn on the [src]."
src.shot_number = 0
src.fire_delay = 100
src.use_power = 2
+ investigate_log("turned on by [user.key]","singulo")
update_icon()
else
user << "\red The controls are locked!"
@@ -207,4 +211,4 @@
power_change()
..()
update_icon()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index ccefe0cf57a..39ef5212feb 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -20,17 +20,16 @@ field_generator power level display
anchored = 0
density = 1
use_power = 0
- var
- const/num_power_levels = 6 // Total number of power level icon has
- Varedit_start = 0
- Varpower = 0
- active = 0
- power = 20 // Current amount of power
- state = 0
- warming_up = 0
- list/obj/machinery/containment_field/fields
- list/obj/machinery/field_generator/connected_gens
- clean_up = 0
+ var/const/num_power_levels = 6 // Total number of power level icon has
+ var/Varedit_start = 0
+ var/Varpower = 0
+ var/active = 0
+ var/power = 20 // Current amount of power
+ var/state = 0
+ var/warming_up = 0
+ var/list/obj/machinery/containment_field/fields
+ var/list/obj/machinery/field_generator/connected_gens
+ var/clean_up = 0
update_icon()
@@ -87,6 +86,8 @@ field_generator power level display
"You turn on the [src.name].", \
"You hear heavy droning")
turn_on()
+ investigate_log("activated by [user.key].","singulo")
+
src.add_fingerprint(user)
else
user << "The [src] needs to be firmly secured to the floor first."
@@ -214,6 +215,7 @@ field_generator power level display
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] shuts down!")
turn_off()
+ investigate_log("ran out of power and deactivated","singulo")
src.power = 0
return 0
diff --git a/code/modules/power/singularity/investigate.dm b/code/modules/power/singularity/investigate.dm
new file mode 100644
index 00000000000..6389f10707c
--- /dev/null
+++ b/code/modules/power/singularity/investigate.dm
@@ -0,0 +1,4 @@
+/area/engine/engineering/poweralert(var/state, var/source)
+ if (state != poweralm)
+ investigate_log("has a power alarm!","singulo")
+ ..()
\ No newline at end of file
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index ed1f0b3e193..fe50a6cec32 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -62,13 +62,12 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
icon_state = "none"
anchored = 0
density = 1
- var
- obj/machinery/particle_accelerator/control_box/master = null
- construction_state = 0
- reference = null
- powered = 0
- strength = null
- desc_holder = null
+ var/obj/machinery/particle_accelerator/control_box/master = null
+ var/construction_state = 0
+ var/reference = null
+ var/powered = 0
+ var/strength = null
+ var/desc_holder = null
end_cap
name = "Alpha Particle Generation Array"
@@ -151,6 +150,12 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
+ Move()
+ ..()
+ if(master && master.active)
+ master.toggle_power()
+ investigate_log("was moved whilst active; it powered down.","singulo")
+
ex_act(severity)
switch(severity)
if(1.0)
@@ -181,9 +186,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
update_icon()
switch(construction_state)
- if(0)
- icon_state="[reference]"
- if(1)
+ if(0,1)
icon_state="[reference]"
if(2)
icon_state="[reference]w"
@@ -291,13 +294,12 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
use_power = 0
idle_power_usage = 0
active_power_usage = 0
- var
- construction_state = 0
- active = 0
- reference = null
- powered = null
- strength = 0
- desc_holder = null
+ var/construction_state = 0
+ var/active = 0
+ var/reference = null
+ var/powered = null
+ var/strength = 0
+ var/desc_holder = null
verb/rotate()
@@ -376,7 +378,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
del(src)
return
-
proc
update_state()
return 0
@@ -440,4 +441,4 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
use_power = 1
update_icon()
return 1
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 758a27eb4ac..05db10ef9dc 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -11,10 +11,9 @@
active_power_usage = 10000
construction_state = 0
active = 0
- var
- list/obj/structure/particle_accelerator/connected_parts
- assembled = 0
- parts = null
+ var/list/obj/structure/particle_accelerator/connected_parts
+ var/assembled = 0
+ var/parts = null
New()
@@ -48,7 +47,6 @@
if(use_power)
icon_state = "[reference]p"
else
- icon_state = "[reference]c"
switch(construction_state)
if(0)
icon_state = "[reference]"
@@ -56,7 +54,7 @@
icon_state = "[reference]"
if(2)
icon_state = "[reference]w"
- if(3)
+ else
icon_state = "[reference]c"
return
@@ -78,34 +76,34 @@
return
if(href_list["togglep"])
src.toggle_power()
+ investigate_log("turned [active?"ON":"OFF"] by [usr.key]","singulo")
message_admins("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
log_admin("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
- if(href_list["scan"])
+ else if(href_list["scan"])
src.part_scan()
- if(href_list["strengthup"])
- src.strength++
+ else if(href_list["strengthup"])
+ strength++
+ if(strength > 2)
+ strength = 2
+ else
+ investigate_log("increased to [strength] by [usr.key]","singulo")
+ message_admins("[usr] increased particle accelerator power to [strength].")
+ log_admin("[usr] increased particle accelerator power to [strength].")
for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength++
+ part.strength = strength
part.update_icon()
- if(src.strength > 2)
- src.strength = 2
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = 2
- part.update_icon()
- message_admins("[usr] increased particle accelerator power to [strength].")
- log_admin("[usr] increased particle accelerator power to [strength].")
- if(href_list["strengthdown"])
- src.strength--
+
+ else if(href_list["strengthdown"])
+ strength--
+ if(strength < 0)
+ strength = 0
+ else
+ message_admins("[usr] decreased particle accelerator power to [strength].")
+ log_admin("[usr] decreased particle accelerator power to [strength].")
+ investigate_log("decreased to [strength] by [usr.key]","singulo")
for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength--
+ part.strength = strength
part.update_icon()
- if(src.strength < 0)
- src.strength = 0
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = 0
- part.update_icon()
- message_admins("[usr] decreased particle accelerator power to [strength].")
- log_admin("[usr] decreased particle accelerator power to [strength].")
src.updateDialog()
src.update_icon()
return
@@ -123,14 +121,15 @@
process()
if(src.active)
+ //a part is missing!
+ if( length(connected_parts) < 6 )
+ investigate_log("lost a connected part; It powered down.","singulo")
+ src.toggle_power()
+ return
+ //emit some particles
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
if(PE)
PE.emit_particle(src.strength)
-// for(var/obj/structure/particle_accelerator/fuel_chamber/PF in connected_parts)
-// PF.doshit()
-// for(var/obj/structure/particle_accelerator/power_box/PB in connected_parts)
-// PB.doshit()
- //finish up putting the fuel run and power use things in here
return
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 668b969d3f2..4c57ccfec07 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -15,23 +15,22 @@ var/global/list/uneatable = list(
layer = 6
unacidable = 1 //Don't comment this out.
use_power = 0
- var
- current_size = 1
- allowed_size = 1
- contained = 1 //Are we going to move around?
- energy = 100 //How strong are we?
- dissipate = 1 //Do we lose energy over time?
- dissipate_delay = 10
- dissipate_track = 0
- dissipate_strength = 1 //How much energy do we lose?
- move_self = 1 //Do we move on our own?
- grav_pull = 4 //How many tiles out do we pull?
- consume_range = 0 //How many tiles out do we eat
- event_chance = 15 //Prob for event each tick
- target = null //its target. moves towards the target if it has one
- last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing
- teleport_del = 0
- last_warning
+ var/current_size = 1
+ var/allowed_size = 1
+ var/contained = 1 //Are we going to move around?
+ var/energy = 100 //How strong are we?
+ var/dissipate = 1 //Do we lose energy over time?
+ var/dissipate_delay = 10
+ var/dissipate_track = 0
+ var/dissipate_strength = 1 //How much energy do we lose?
+ var/move_self = 1 //Do we move on our own?
+ var/grav_pull = 4 //How many tiles out do we pull?
+ var/consume_range = 0 //How many tiles out do we eat
+ var/event_chance = 15 //Prob for event each tick
+ var/target = null //its target. moves towards the target if it has one
+ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing
+ var/teleport_del = 0
+ var/last_warning
New(loc, var/starting_energy = 50, var/temp = 0)
//CARN: admin-alert for chuckle-fuckery.
@@ -41,6 +40,7 @@ var/global/list/uneatable = list(
count = 1
break
if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
+ investigate_log("was created. [count?"":"No containment fields were active"]","singulo")
src.energy = starting_energy
if(temp)
@@ -93,17 +93,16 @@ var/global/list/uneatable = list(
process()
- spawn(0)
- eat()
- dissipate()
- check_energy()
- if(current_size >= 3)
- move()
- if(current_size <= 7)
- pulse()
- if(current_size >= 5)
- if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit
- event()
+ eat()
+ dissipate()
+ check_energy()
+ if(current_size >= 3)
+ move()
+ if(current_size <= 7)
+ pulse()
+ if(current_size >= 5)
+ if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit
+ event()
return
@@ -183,6 +182,7 @@ var/global/list/uneatable = list(
consume_range = 4
dissipate = 0 //It cant go smaller due to e loss
if(current_size == allowed_size)
+ investigate_log("grew to size [current_size]","singulo")
return 1
else if(current_size < (--temp_allowed_size))
expand(temp_allowed_size)
@@ -552,4 +552,4 @@ var/global/list/uneatable = list(
consume(X)
if(defer_powernet_rebuild != 2)
defer_powernet_rebuild = 0
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index fa4b1988f3c..6e4ffec7ed1 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -294,7 +294,7 @@
output += d
output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
-
+ investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
src.updateUsrDialog()
else
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index a309ea13b39..3fac4a86564 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -32,18 +32,17 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole
name = "R&D Console"
icon_state = "rdcomp"
- var
- datum/research/files //Stores all the collected research data.
- 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.
+ var/datum/research/files //Stores all the collected research data.
+ var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk.
+ var/obj/item/weapon/disk/design_disk/d_disk = null //Stores the design disk.
- 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
+ var/obj/machinery/r_n_d/destructive_analyzer/linked_destroy = null //Linked Destructive Analyzer
+ var/obj/machinery/r_n_d/protolathe/linked_lathe = null //Linked Protolathe
+ var/obj/machinery/r_n_d/circuit_imprinter/linked_imprinter = null //Linked Circuit Imprinter
- screen = 1.0 //Which screen is currently showing.
- id = 0 //ID of the computer (for server restrictions).
- sync = 1 //If sync = 0, it doesn't show up on Server Control Console
+ var/screen = 1.0 //Which screen is currently showing.
+ var/id = 0 //ID of the computer (for server restrictions).
+ var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console
req_access = list(access_tox) //Data and setting manipulation requires scientist access.
@@ -351,6 +350,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.3
linked_lathe.busy = 1
flick("protolathe_n",linked_lathe)
+ var/key = usr.key //so we don't lose the info during the spawn delay
spawn(16)
use_power(power)
spawn(16)
@@ -379,6 +379,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(being_built.build_path)
var/obj/new_item = new being_built.build_path(src)
+ if( new_item.type == /obj/item/weapon/storage/backpack/holding )
+ new_item.investigate_log("built by [key]","singulo")
new_item.reliability = being_built.reliability
if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0)
if(being_built.locked)
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 7c834f10c98..79e2ea2368a 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ