diff --git a/baystation12.dme b/baystation12.dme
index 44d3553bcb..bc352f8f24 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -176,6 +176,7 @@
#include "code\datums\wires\radio.dm"
#include "code\datums\wires\robot.dm"
#include "code\datums\wires\smartfridge.dm"
+#include "code\datums\wires\smes.dm"
#include "code\datums\wires\suit_storage_unit.dm"
#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
@@ -387,12 +388,14 @@
#include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\prisoner.dm"
#include "code\game\machinery\computer\prisonshuttle.dm"
+#include "code\game\machinery\computer\RCON_Console.dm"
#include "code\game\machinery\computer\robot.dm"
#include "code\game\machinery\computer\security.dm"
#include "code\game\machinery\computer\shuttle.dm"
#include "code\game\machinery\computer\skills.dm"
#include "code\game\machinery\computer\specops_shuttle.dm"
#include "code\game\machinery\computer\station_alert.dm"
+#include "code\game\machinery\computer\supply.dm"
#include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_control.dm"
@@ -583,6 +586,23 @@
#include "code\game\objects\items\weapons\twohanded.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\wires.dm"
+#include "code\game\objects\items\weapons\circuitboards\broken.dm"
+#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm"
+#include "code\game\objects\items\weapons\circuitboards\mecha.dm"
+#include "code\game\objects\items\weapons\circuitboards\other.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm"
+#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm"
+#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
@@ -1017,15 +1037,22 @@
#include "code\modules\mob\living\carbon\human\login.dm"
#include "code\modules\mob\living\carbon\human\logout.dm"
#include "code\modules\mob\living\carbon\human\say.dm"
-#include "code\modules\mob\living\carbon\human\species.dm"
-#include "code\modules\mob\living\carbon\human\species_attack.dm"
+#include "code\modules\mob\living\carbon\human\unarmed_attack.dm"
#include "code\modules\mob\living\carbon\human\update_icons.dm"
#include "code\modules\mob\living\carbon\human\whisper.dm"
-#include "code\modules\mob\living\carbon\human\alien\alien.dm"
-#include "code\modules\mob\living\carbon\human\alien\alien_embryo.dm"
-#include "code\modules\mob\living\carbon\human\alien\alien_facehugger.dm"
-#include "code\modules\mob\living\carbon\human\alien\alien_powers.dm"
-#include "code\modules\mob\living\carbon\human\alien\alien_species.dm"
+#include "code\modules\mob\living\carbon\human\species\species.dm"
+#include "code\modules\mob\living\carbon\human\species\species_attack.dm"
+#include "code\modules\mob\living\carbon\human\species\species_hud.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\shadow.dm"
+#include "code\modules\mob\living\carbon\human\species\outsider\vox.dm"
+#include "code\modules\mob\living\carbon\human\species\station\golem.dm"
+#include "code\modules\mob\living\carbon\human\species\station\slime.dm"
+#include "code\modules\mob\living\carbon\human\species\station\station.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_embryo.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_facehugger.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm"
+#include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm"
#include "code\modules\mob\living\carbon\metroid\death.dm"
#include "code\modules\mob\living\carbon\metroid\emote.dm"
#include "code\modules\mob\living\carbon\metroid\examine.dm"
@@ -1370,7 +1397,6 @@
#include "code\modules\scripting\Scanner\Tokens.dm"
#include "code\modules\security levels\keycard authentication.dm"
#include "code\modules\security levels\security levels.dm"
-#include "code\modules\shieldgen\circuits_and_designs.dm"
#include "code\modules\shieldgen\emergency_shield.dm"
#include "code\modules\shieldgen\energy_field.dm"
#include "code\modules\shieldgen\sheldwallgen.dm"
diff --git a/code/ATMOSPHERICS/_atmos_setup.dm b/code/ATMOSPHERICS/_atmos_setup.dm
index 6f38eb6089..14efbb7de1 100644
--- a/code/ATMOSPHERICS/_atmos_setup.dm
+++ b/code/ATMOSPHERICS/_atmos_setup.dm
@@ -14,6 +14,10 @@
#define PIPE_COLOR_YELLOW "#ffcc00"
#define PIPE_COLOR_PURPLE "#5c1ec0"
+#define CONNECT_TYPE_REGULAR 1
+#define CONNECT_TYPE_SUPPLY 2
+#define CONNECT_TYPE_SCRUBBER 4
+
var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE)
/proc/pipe_color_lookup(var/color)
diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 43d7d0fe4c..3558e5a9d6 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -18,8 +18,7 @@ Pipelines + Other Objects -> Pipe network
layer = 2.4 //under wires with their 2.44
- var/connect_types[] = list(1) //1=regular, 2=supply, 3=scrubber
- var/connected_to = 1 //same as above, currently not used for anything
+ var/connect_types = CONNECT_TYPE_REGULAR
var/icon_connect_type = "" //"-supply" or "-scrubbers"
var/initialize_directions = 0
@@ -63,29 +62,10 @@ Pipelines + Other Objects -> Pipe network
return 0
obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/atmos1, obj/machinery/atmospherics/atmos2)
- var/i
- var/list1[] = atmos1.connect_types
- var/list2[] = atmos2.connect_types
- for(i=1,i<=list1.len,i++)
- var/j
- for(j=1,j<=list2.len,j++)
- if(list1[i] == list2[j])
- var/n = list1[i]
- return n
- return 0
-
-obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2)
- var/i
- var/list1[] = atmos1.connect_types
- var/list2[] = pipe2.connect_types
- for(i=1,i<=list1.len,i++)
- var/j
- for(j=1,j<=list2.len,j++)
- if(list1[i] == list2[j])
- var/n = list1[i]
- return n
- return 0
+ return (atmos1.connect_types & atmos2.connect_types)
+/obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2)
+ return (atmos1.connect_types & pipe2.connect_types)
/obj/machinery/atmospherics/proc/check_icon_cache(var/safety = 0)
if(!istype(icon_manager))
diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
index 649972297a..7d57ea6c8f 100644
--- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
@@ -67,19 +67,13 @@ obj/machinery/atmospherics/binary
for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
index 632803cd3b..5ddedd42c8 100644
--- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
@@ -27,7 +27,7 @@
active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP
var/last_power_draw = 0
- connect_types = list(1,2,3) //connects to regular, supply and scrubbers pipes
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER //connects to regular, supply and scrubbers pipes
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
index dda2e707a7..60206d54bf 100644
--- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm
@@ -248,10 +248,7 @@
continue
for(var/obj/machinery/atmospherics/target in get_step(src, P.dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
P.node = target
break
diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm
index 4bfd61a0a2..315de2ce7c 100644
--- a/code/ATMOSPHERICS/components/portables_connector.dm
+++ b/code/ATMOSPHERICS/components/portables_connector.dm
@@ -81,10 +81,7 @@
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node = target
break
diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
index 822c9a4d6d..934e1802ec 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
@@ -82,27 +82,18 @@ obj/machinery/atmospherics/trinary
for(var/obj/machinery/atmospherics/target in get_step(src,node1_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node3_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node3 = target
break
diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm
index 39ca1e25fd..68a1036a78 100644
--- a/code/ATMOSPHERICS/components/tvalve.dm
+++ b/code/ATMOSPHERICS/components/tvalve.dm
@@ -199,26 +199,17 @@
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node3 = target
break
diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm
index 8af26e51eb..6635631f2d 100644
--- a/code/ATMOSPHERICS/components/unary/unary_base.dm
+++ b/code/ATMOSPHERICS/components/unary/unary_base.dm
@@ -46,10 +46,7 @@
for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node = target
break
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index ff43e91385..a602c553d7 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -19,7 +19,7 @@
idle_power_usage = 150 //internal circuitry, friction losses and stuff
active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP
- connect_types = list(1,2) //connects to regular and supply pipes
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY //connects to regular and supply pipes
var/area/initial_loc
level = 1
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 6c71e72e27..8ba175cb9a 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -9,7 +9,7 @@
active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP
var/last_power_draw = 0
- connect_types = list(1,3) //connects to regular and scrubber pipes
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SCRUBBER //connects to regular and scrubber pipes
level = 1
diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index aa6ac1bf11..9cc6f7451c 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -160,18 +160,12 @@
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
@@ -316,4 +310,8 @@
"\blue You have unfastened \the [src].", \
"You hear ratchet.")
new /obj/item/pipe(loc, make_from=src)
- del(src)
\ No newline at end of file
+ del(src)
+
+/obj/machinery/atmospherics/valve/examine(mob/user)
+ ..()
+ user << "It is [open ? "open" : "closed"]."
diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index 34ece52777..808e3580f7 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -277,18 +277,12 @@
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
@@ -324,7 +318,7 @@
name = "Scrubbers pipe"
desc = "A one meter section of scrubbers pipe"
icon_state = "intact-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -333,7 +327,7 @@
name = "Air supply pipe"
desc = "A one meter section of supply pipe"
icon_state = "intact-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -359,7 +353,7 @@
name = "Scrubbers pipe"
desc = "A one meter section of scrubbers pipe"
icon_state = "intact-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -368,7 +362,7 @@
name = "Air supply pipe"
desc = "A one meter section of supply pipe"
icon_state = "intact-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -532,10 +526,7 @@
if(direction&connect_directions)
for(var/obj/machinery/atmospherics/target in get_step(src,direction))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
connect_directions &= ~direction
break
@@ -547,10 +538,7 @@
if(direction&connect_directions)
for(var/obj/machinery/atmospherics/target in get_step(src,direction))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
connect_directions &= ~direction
break
@@ -562,10 +550,7 @@
if(direction&connect_directions)
for(var/obj/machinery/atmospherics/target in get_step(src,direction))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node3 = target
connect_directions &= ~direction
break
@@ -589,7 +574,7 @@
name="Scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes"
icon_state = "map-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -598,7 +583,7 @@
name="Air supply pipe manifold"
desc = "A manifold composed of supply pipes"
icon_state = "map-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -624,7 +609,7 @@
name="Scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes"
icon_state = "map-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -633,7 +618,7 @@
name="Air supply pipe manifold"
desc = "A manifold composed of supply pipes"
icon_state = "map-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -796,37 +781,25 @@
for(var/obj/machinery/atmospherics/target in get_step(src,1))
if(target.initialize_directions & 2)
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,2))
if(target.initialize_directions & 1)
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,4))
if(target.initialize_directions & 8)
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node3 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,8))
if(target.initialize_directions & 4)
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node4 = target
break
@@ -847,7 +820,7 @@
name="4-way scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes"
icon_state = "map_4way-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -856,7 +829,7 @@
name="4-way air supply pipe manifold"
desc = "A manifold composed of supply pipes"
icon_state = "map_4way-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -882,7 +855,7 @@
name="4-way scrubbers pipe manifold"
desc = "A manifold composed of scrubbers pipes"
icon_state = "map_4way-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -891,7 +864,7 @@
name="4-way air supply pipe manifold"
desc = "A manifold composed of supply pipes"
icon_state = "map_4way-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -974,10 +947,7 @@
/obj/machinery/atmospherics/pipe/cap/initialize()
for(var/obj/machinery/atmospherics/target in get_step(src, dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node = target
break
@@ -993,7 +963,7 @@
name = "scrubbers pipe endcap"
desc = "An endcap for scrubbers pipes"
icon_state = "cap-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -1002,7 +972,7 @@
name = "supply pipe endcap"
desc = "An endcap for supply pipes"
icon_state = "cap-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -1016,7 +986,7 @@
name = "scrubbers pipe endcap"
desc = "An endcap for scrubbers pipes"
icon_state = "cap-f-scrubbers"
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -1025,7 +995,7 @@
name = "supply pipe endcap"
desc = "An endcap for supply pipes"
icon_state = "cap-f-supply"
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -1084,10 +1054,7 @@
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
@@ -1269,10 +1236,7 @@
for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
@@ -1299,7 +1263,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/universal
name="Universal pipe adapter"
desc = "An adapter for regular, supply and scrubbers pipes"
- connect_types = list(1,2,3)
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
icon_state = "map_universal"
/obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0)
@@ -1334,7 +1298,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/universal
name="Universal pipe adapter"
desc = "An adapter for regular, supply and scrubbers pipes"
- connect_types = list(1,2,3)
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
icon_state = "map_universal"
/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0)
diff --git a/code/TriDimension/Pipes.dm b/code/TriDimension/Pipes.dm
index 776716f567..d6b87f2909 100644
--- a/code/TriDimension/Pipes.dm
+++ b/code/TriDimension/Pipes.dm
@@ -134,10 +134,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize()
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
@@ -148,10 +145,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/initialize()
if(above)
for(var/obj/machinery/atmospherics/target in above)
if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/down))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
@@ -181,10 +175,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize()
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node1 = target
break
@@ -195,10 +186,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/initialize()
if(below)
for(var/obj/machinery/atmospherics/target in below)
if(target.initialize_directions && istype(target, /obj/machinery/atmospherics/pipe/zpipe/up))
- var/c = check_connect_types(target,src)
- if (c)
- target.connected_to = c
- src.connected_to = c
+ if (check_connect_types(target,src))
node2 = target
break
@@ -214,7 +202,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers
icon_state = "up-scrubbers"
name = "upwards scrubbers pipe"
desc = "A scrubbers pipe segment to connect upwards."
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -223,7 +211,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply
icon_state = "up-supply"
name = "upwards supply pipe"
desc = "A supply pipe segment to connect upwards."
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -232,7 +220,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers
icon_state = "down-scrubbers"
name = "downwards scrubbers pipe"
desc = "A scrubbers pipe segment to connect downwards."
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -241,7 +229,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply
icon_state = "down-supply"
name = "downwards supply pipe"
desc = "A supply pipe segment to connect downwards."
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm
index 41f2c4cdf9..87873775b0 100644
--- a/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm
+++ b/code/WorkInProgress/Chinsky/overmap/ships/computers/engine_control.dm
@@ -1,7 +1,7 @@
//Engine control and monitoring console
/obj/machinery/computer/engines
- name = "engines control console"
+ name = "engine control console"
icon_state = "id"
var/state = "status"
var/list/engines = list()
diff --git a/code/WorkInProgress/computer3/computers/atmos_alert.dm b/code/WorkInProgress/computer3/computers/atmos_alert.dm
index 6596b76d7c..00d6f87438 100644
--- a/code/WorkInProgress/computer3/computers/atmos_alert.dm
+++ b/code/WorkInProgress/computer3/computers/atmos_alert.dm
@@ -8,9 +8,6 @@
desc = "Recieves alerts over the radio."
active_state = "alert:2"
refresh = 1
- var/list/priority_alarms = list()
- var/list/minor_alarms = list()
-
execute(var/datum/file/program/source)
..(source)
@@ -20,14 +17,6 @@
computer.radio.set_frequency(1437,RADIO_ATMOSIA)
-
- Reset()
- ..()
- // Never save your work
- priority_alarms.Cut()
- minor_alarms.Cut()
-
-
// This will be called as long as the program is running on the parent computer
// and the computer has the radio peripheral
receive_signal(datum/signal/signal)
@@ -37,12 +26,12 @@
var/severity = signal.data["alert"]
if(!zone || !severity) return
- minor_alarms -= zone
- priority_alarms -= zone
+ minor_air_alarms -= zone
+ priority_air_alarms -= zone
if(severity=="severe")
- priority_alarms += zone
+ priority_air_alarms += zone
else if (severity=="minor")
- minor_alarms += zone
+ minor_air_alarms += zone
update_icon()
return
@@ -59,9 +48,9 @@
update_icon()
..()
- if(priority_alarms.len > 0)
+ if(priority_air_alarms.len > 0)
overlay.icon_state = "alert:2"
- else if(minor_alarms.len > 0)
+ else if(minor_air_alarms.len > 0)
overlay.icon_state = "alert:1"
else
overlay.icon_state = "alert:0"
@@ -74,14 +63,14 @@
var/priority_text = "
Priority Alerts: "
var/minor_text = "Minor Alerts: "
- if(priority_alarms.len)
- for(var/zone in priority_alarms)
+ if(priority_air_alarms.len)
+ for(var/zone in priority_air_alarms)
priority_text += "[format_text(zone)] [topic_link(src,"priority_clear=[ckey(zone)]","X")] "
else
priority_text += "No priority alerts detected. "
- if(minor_alarms.len)
- for(var/zone in minor_alarms)
+ if(minor_air_alarms.len)
+ for(var/zone in minor_air_alarms)
minor_text += "[format_text(zone)] [topic_link(src,"minor_clear=[ckey(zone)]","X")] "
else
minor_text += "No minor alerts detected. "
@@ -95,16 +84,16 @@
if("priority_clear" in href_list)
var/removing_zone = href_list["priority_clear"]
- for(var/zone in priority_alarms)
+ for(var/zone in priority_air_alarms)
if(ckey(zone) == removing_zone)
usr << "\green Priority Alert for area [zone] cleared."
- priority_alarms -= zone
+ priority_air_alarms -= zone
if("minor_clear" in href_list)
var/removing_zone = href_list["minor_clear"]
- for(var/zone in minor_alarms)
+ for(var/zone in minor_air_alarms)
if(ckey(zone) == removing_zone)
usr << "\green Minor Alert for area [zone] cleared."
- minor_alarms -= zone
+ minor_air_alarms -= zone
computer.updateUsrDialog()
diff --git a/code/WorkInProgress/computer3/computers/scanconsole.dm b/code/WorkInProgress/computer3/computers/scanconsole.dm
index 3092f51fb8..446fb5c8ff 100644
--- a/code/WorkInProgress/computer3/computers/scanconsole.dm
+++ b/code/WorkInProgress/computer3/computers/scanconsole.dm
@@ -189,17 +189,10 @@
target.unique_enzymes = md5(target.real_name)
updateappearance(scanner.occupant,target.uni_identity)
domutcheck(scanner.occupant, scanner, 1)
-
- if(ishuman(scanner.occupant))
- target.mutantrace = buffer.mutantrace
- scanner.occupant:update_mutantrace()
if("se")
if(buffer.struc_enzymes)
target.struc_enzymes = buffer.struc_enzymes
domutcheck(scanner.occupant, scanner, 1)
- if(ishuman(scanner.occupant))
- target.mutantrace = buffer.mutantrace
- scanner.occupant:update_mutantrace()
if("ui")
if(buffer.uni_identity)
target.uni_identity = buffer.uni_identity
diff --git a/code/WorkInProgress/computer3/file.dm b/code/WorkInProgress/computer3/file.dm
index 849312ec50..1cbb363894 100644
--- a/code/WorkInProgress/computer3/file.dm
+++ b/code/WorkInProgress/computer3/file.dm
@@ -140,7 +140,6 @@
/datum/file/data/genome/SE
name = "Structural Enzymes"
- var/mutantrace = null
/datum/file/data/genome/UE
name = "Unique Enzymes"
diff --git a/code/ZAS/ConnectionGroup.dm b/code/ZAS/ConnectionGroup.dm
index 94731228a6..f377efe74f 100644
--- a/code/ZAS/ConnectionGroup.dm
+++ b/code/ZAS/ConnectionGroup.dm
@@ -62,6 +62,7 @@ Class Procs:
/connection_edge/var/list/connecting_turfs = list()
/connection_edge/var/direct = 0
+/connection_edge/var/sleeping = 1
/connection_edge/var/coefficient = 0
@@ -88,6 +89,8 @@ Class Procs:
/connection_edge/proc/tick()
+/connection_edge/proc/recheck()
+
/connection_edge/proc/flow(list/movable, differential, repelled)
for(var/i = 1; i <= movable.len; i++)
var/atom/movable/M = movable[i]
@@ -147,35 +150,38 @@ Class Procs:
if(A.invalid || B.invalid)
erase()
return
- //world << "[id]: Tick [air_master.current_cycle]: \..."
- if(direct)
- if(air_master.equivalent_pressure(A, B))
- //world << "merged."
- erase()
- air_master.merge(A, B)
- //world << "zones merged."
- return
- //air_master.equalize(A, B)
- A.air.share_ratio(B.air, coefficient)
- air_master.mark_zone_update(A)
- air_master.mark_zone_update(B)
- //world << "equalized."
+ var/equiv = A.air.share_ratio(B.air, coefficient)
var/differential = A.air.return_pressure() - B.air.return_pressure()
- if(abs(differential) < vsc.airflow_lightest_pressure) return
+ if(abs(differential) >= vsc.airflow_lightest_pressure)
+ var/list/attracted
+ var/list/repelled
+ if(differential > 0)
+ attracted = A.movables()
+ repelled = B.movables()
+ else
+ attracted = B.movables()
+ repelled = A.movables()
- var/list/attracted
- var/list/repelled
- if(differential > 0)
- attracted = A.movables()
- repelled = B.movables()
- else
- attracted = B.movables()
- repelled = A.movables()
+ flow(attracted, abs(differential), 0)
+ flow(repelled, abs(differential), 1)
- flow(attracted, abs(differential), 0)
- flow(repelled, abs(differential), 1)
+ if(equiv)
+ if(direct)
+ erase()
+ air_master.merge(A, B)
+ return
+ else
+ A.air.equalize(B.air)
+ air_master.mark_edge_sleeping(src)
+
+ air_master.mark_zone_update(A)
+ air_master.mark_zone_update(B)
+
+/connection_edge/zone/recheck()
+ if(!A.air.compare(B.air))
+ air_master.mark_edge_active(src)
//Helper proc to get connections for a zone.
/connection_edge/zone/proc/get_connected_zone(zone/from)
@@ -214,20 +220,27 @@ Class Procs:
if(A.invalid)
erase()
return
- //world << "[id]: Tick [air_master.current_cycle]: To [B]!"
- //A.air.mimic(B, coefficient)
- A.air.share_space(air, dbg_out)
- air_master.mark_zone_update(A)
+
+ var/equiv = A.air.share_space(air)
var/differential = A.air.return_pressure() - air.return_pressure()
- if(abs(differential) < vsc.airflow_lightest_pressure) return
+ if(abs(differential) >= vsc.airflow_lightest_pressure)
+ var/list/attracted = A.movables()
+ flow(attracted, abs(differential), differential < 0)
- var/list/attracted = A.movables()
- flow(attracted, abs(differential), differential < 0)
+ if(equiv)
+ A.air.copy_from(air)
+ air_master.mark_edge_sleeping(src)
+
+ air_master.mark_zone_update(A)
+
+/connection_edge/unsimulated/recheck()
+ if(!A.air.compare(air))
+ air_master.mark_edge_active(src)
proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
//This implements a simplistic version of the Stefan-Boltzmann law.
- var/energy_delta = ((A.temperature - B.temperature) ** 4) * 5.6704e-8 * connecting_tiles * 2.5
+ var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5
var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier))
if(maximum_energy_delta > abs(energy_delta))
if(energy_delta < 0)
@@ -235,4 +248,4 @@ proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
energy_delta = maximum_energy_delta
A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier)
- B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier)
\ No newline at end of file
+ B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier)
diff --git a/code/ZAS/Controller.dm b/code/ZAS/Controller.dm
index 756887cc09..4ba30f47b3 100644
--- a/code/ZAS/Controller.dm
+++ b/code/ZAS/Controller.dm
@@ -75,6 +75,7 @@ Class Procs:
/datum/controller/air_system/var/list/zones_to_update = list()
/datum/controller/air_system/var/list/active_fire_zones = list()
/datum/controller/air_system/var/list/active_hotspots = list()
+/datum/controller/air_system/var/list/active_edges = list()
/datum/controller/air_system/var/active_zones = 0
@@ -97,7 +98,7 @@ Class Procs:
set background = 1
#endif
- world << "\red \b Processing Geometry..."
+ world << "Processing Geometry... "
sleep(-1)
var/start_time = world.timeofday
@@ -108,10 +109,15 @@ Class Procs:
simulated_turf_count++
S.update_air_properties()
- world << {"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds.
+ world << {"Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds.
+
Total Simulated Turfs: [simulated_turf_count]
Total Zones: [zones.len]
-Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count] "}
+Total Edges: [edges.len]
+Total Active Edges: [active_edges.len ? "[active_edges.len] " : "None"]
+Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_count]
+"}
+
// spawn Start()
@@ -169,7 +175,7 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
if(.)
tick_progress = "processing edges"
- for(var/connection_edge/edge in edges)
+ for(var/connection_edge/edge in active_edges)
edge.tick()
//Process fire zones.
@@ -299,6 +305,22 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
zones_to_update.Add(Z)
Z.needs_update = 1
+/datum/controller/air_system/proc/mark_edge_sleeping(connection_edge/E)
+ #ifdef ZASDBG
+ ASSERT(istype(E)
+ #endif
+ if(E.sleeping) return
+ active_edges.Remove(E)
+ E.sleeping = 1
+
+/datum/controller/air_system/proc/mark_edge_active(connection_edge/E)
+ #ifdef ZASDBG
+ ASSERT(istype(E)
+ #endif
+ if(!E.sleeping) return
+ active_edges.Add(E)
+ E.sleeping = 0
+
/datum/controller/air_system/proc/equivalent_pressure(zone/A, zone/B)
return A.air.compare(B.air)
@@ -309,12 +331,14 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
if(edge.contains_zone(B)) return edge
var/connection_edge/edge = new/connection_edge/zone(A,B)
edges.Add(edge)
+ edge.recheck()
return edge
else
for(var/connection_edge/unsimulated/edge in A.edges)
if(has_same_air(edge.B,B)) return edge
var/connection_edge/edge = new/connection_edge/unsimulated(A,B)
edges.Add(edge)
+ edge.recheck()
return edge
/datum/controller/air_system/proc/has_same_air(turf/A, turf/B)
@@ -325,5 +349,6 @@ Total Unsimulated Turfs: [world.maxx*world.maxy*world.maxz - simulated_turf_coun
if(A.temperature != B.temperature) return 0
return 1
-/datum/controller/air_system/proc/remove_edge(connection/c)
- edges.Remove(c)
\ No newline at end of file
+/datum/controller/air_system/proc/remove_edge(connection_edge/E)
+ edges.Remove(E)
+ if(!E.sleeping) active_edges.Remove(E)
\ No newline at end of file
diff --git a/code/ZAS/Zone.dm b/code/ZAS/Zone.dm
index 1f2cbee8d3..7c9c5f32ed 100644
--- a/code/ZAS/Zone.dm
+++ b/code/ZAS/Zone.dm
@@ -138,6 +138,10 @@ Class Procs:
graphic_add.len = 0
graphic_remove.len = 0
+ for(var/connection_edge/E in edges)
+ if(E.sleeping)
+ E.recheck()
+
/zone/proc/dbg_data(mob/M)
M << name
for(var/g in air.gas)
diff --git a/code/ZAS/_gas_mixture_xgm.dm b/code/ZAS/_gas_mixture_xgm.dm
index 01f95ee9a5..3390cb9fd3 100644
--- a/code/ZAS/_gas_mixture_xgm.dm
+++ b/code/ZAS/_gas_mixture_xgm.dm
@@ -17,7 +17,8 @@
//List of active tile overlays for this gas_mixture. Updated by check_tile_graphic()
var/list/graphic = list()
-//Takes a gas string, and the amount of moles to adjust by. Calls update_values() if update isn't 0.
+
+//Takes a gas string and the amount of moles to adjust by. Calls update_values() if update isn't 0.
/datum/gas_mixture/proc/adjust_gas(gasid, moles, update = 1)
if(moles == 0)
return
@@ -30,6 +31,7 @@
if(update)
update_values()
+
//Same as adjust_gas(), but takes a temperature which is mixed in with the gas.
/datum/gas_mixture/proc/adjust_gas_temp(gasid, moles, temp, update = 1)
if(moles == 0)
@@ -50,7 +52,8 @@
if(update)
update_values()
-//Variadic version of adjust_gas(). Takes any number of gas and mole pairs, and applies them.
+
+//Variadic version of adjust_gas(). Takes any number of gas and mole pairs and applies them.
/datum/gas_mixture/proc/adjust_multi()
ASSERT(!(args.len % 2))
@@ -59,7 +62,8 @@
update_values()
-//Variadic version of adjust_gas_temp(). Takes any number of gas, mole, and temperature tuples, and applies them.
+
+//Variadic version of adjust_gas_temp(). Takes any number of gas, mole and temperature associations and applies them.
/datum/gas_mixture/proc/adjust_multi_temp()
ASSERT(!(args.len % 3))
@@ -68,8 +72,10 @@
update_values()
+
//Merges all the gas from another mixture into this one. Respects group_multipliers and adjusts temperature correctly.
-/datum/gas_mixture/proc/merge(datum/gas_mixture/giver)
+//Does not modify giver in any way.
+/datum/gas_mixture/proc/merge(const/datum/gas_mixture/giver)
if(!giver)
return
@@ -89,6 +95,25 @@
update_values()
+
+/datum/gas_mixture/proc/equalize(datum/gas_mixture/sharer)
+ for(var/g in sharer.gas)
+ var/comb = gas[g] + sharer.gas[g]
+ comb /= volume + sharer.volume
+ gas[g] = comb * volume
+ sharer.gas[g] = comb * sharer.volume
+
+ var/our_heatcap = heat_capacity()
+ var/share_heatcap = sharer.heat_capacity()
+
+ temperature = 0
+ if(our_heatcap + share_heatcap)
+ temperature = ((temperature * our_heatcap) + (sharer.temperature * share_heatcap)) / (our_heatcap + share_heatcap)
+ sharer.temperature = temperature
+
+ return 1
+
+
//Returns the heat capacity of the gas mix based on the specific heat of the gases.
/datum/gas_mixture/proc/heat_capacity()
. = 0
@@ -96,11 +121,12 @@
. += gas_data.specific_heat[g] * gas[g]
. *= group_multiplier
+
//Adds or removes thermal energy. Returns the actual thermal energy change, as in the case of removing energy we can't go below TCMB.
/datum/gas_mixture/proc/add_thermal_energy(var/thermal_energy)
if (total_moles == 0)
return 0
-
+
var/heat_capacity = heat_capacity()
if (thermal_energy < 0)
if (temperature < TCMB)
@@ -114,43 +140,47 @@
/datum/gas_mixture/proc/get_thermal_energy_change(var/new_temperature)
return heat_capacity()*(max(new_temperature, 0) - temperature)
+
//Technically vacuum doesn't have a specific entropy. Just use a really big number (infinity would be ideal) here so that it's easy to add gas to vacuum and hard to take gas out.
#define SPECIFIC_ENTROPY_VACUUM 150000
+
//Returns the ideal gas specific entropy of the whole mix. This is the entropy per mole of /mixed/ gas.
/datum/gas_mixture/proc/specific_entropy()
if (!gas.len || total_moles == 0)
return SPECIFIC_ENTROPY_VACUUM
-
+
. = 0
for(var/g in gas)
. += gas[g] * specific_entropy_gas(g)
. /= total_moles
+
/*
It's arguable whether this should even be called entropy anymore. It's more "based on" entropy than actually entropy now.
-
+
Returns the ideal gas specific entropy of a specific gas in the mix. This is the entropy due to that gas per mole of /that/ gas in the mixture, not the entropy due to that gas per mole of gas mixture.
-
+
For the purposes of SS13, the specific entropy is just a number that tells you how hard it is to move gas. You can replace this with whatever you want.
Just remember that returning a SMALL number == adding gas to this gas mix is HARD, taking gas away is EASY, and that returning a LARGE number means the opposite (so a vacuum should approach infinity).
- So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way
+ So returning a constant/(partial pressure) would probably do what most players expect. Although the version I have implemented below is a bit more nuanced than simply 1/P in that it scales in a way
which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures.
*/
/datum/gas_mixture/proc/specific_entropy_gas(var/gasid)
if (!(gasid in gas) || gas[gasid] == 0)
return SPECIFIC_ENTROPY_VACUUM //that gas isn't here
-
+
//group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure)
var/molar_mass = gas_data.molar_mass[gasid]
var/specific_heat = gas_data.specific_heat[gasid]
return R_IDEAL_GAS_EQUATION * ( log( (IDEAL_GAS_ENTROPY_CONSTANT*volume/(gas[gasid] * temperature)) * (molar_mass*specific_heat*temperature)**(2/3) + 1 ) + 15 )
-
+
//alternative, simpler equation
//var/partial_pressure = gas[gasid] * R_IDEAL_GAS_EQUATION * temperature / volume
//return R_IDEAL_GAS_EQUATION * ( log (1 + IDEAL_GAS_ENTROPY_CONSTANT/partial_pressure) + 20 )
+
//Updates the total_moles count and trims any empty gases.
/datum/gas_mixture/proc/update_values()
total_moles = 0
@@ -160,12 +190,14 @@
else
total_moles += gas[g]
+
//Returns the pressure of the gas mix. Only accurate if there have been no gas modifications since update_values() has been called.
/datum/gas_mixture/proc/return_pressure()
if(volume)
return total_moles * R_IDEAL_GAS_EQUATION * temperature / volume
return 0
+
//Removes moles from the gas mixture and returns a gas_mixture containing the removed air.
/datum/gas_mixture/proc/remove(amount)
amount = min(amount, total_moles * group_multiplier) //Can not take more air than the gas mixture has!
@@ -184,6 +216,7 @@
return removed
+
//Removes a ratio of gas from the mixture and returns a gas_mixture containing the removed air.
/datum/gas_mixture/proc/remove_ratio(ratio, out_group_multiplier = 1)
if(ratio <= 0)
@@ -205,6 +238,7 @@
return removed
+
//Removes moles from the gas mixture, limited by a given flag. Returns a gax_mixture containing the removed air.
/datum/gas_mixture/proc/remove_by_flag(flag, amount)
if(!flag || amount <= 0)
@@ -228,8 +262,9 @@
return removed
+
//Copies gas and temperature from another gas_mixture.
-/datum/gas_mixture/proc/copy_from(datum/gas_mixture/sample)
+/datum/gas_mixture/proc/copy_from(const/datum/gas_mixture/sample)
gas = sample.gas.Copy()
temperature = sample.temperature
@@ -237,8 +272,9 @@
return 1
+
//Checks if we are within acceptable range of another gas_mixture to suspend processing or merge.
-/datum/gas_mixture/proc/compare(datum/gas_mixture/sample)
+/datum/gas_mixture/proc/compare(const/datum/gas_mixture/sample)
if(!sample) return 0
var/list/marked = list()
@@ -264,9 +300,11 @@
return 1
+
/datum/gas_mixture/proc/react(atom/dump_location)
zburn(null)
+
//Rechecks the gas_mixture and adjusts the graphic list if needed.
//Two lists can be passed by reference if you need know specifically which graphics were added and removed.
/datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null)
@@ -293,6 +331,7 @@
graphic -= graphic_remove
. = 1
+
//Simpler version of merge(), adjusts gas amounts directly and doesn't account for temperature or group_multiplier.
/datum/gas_mixture/proc/add(datum/gas_mixture/right_side)
for(var/g in right_side.gas)
@@ -301,6 +340,7 @@
update_values()
return 1
+
//Simpler version of remove(), adjusts gas amounts directly and doesn't account for group_multiplier.
/datum/gas_mixture/proc/subtract(datum/gas_mixture/right_side)
for(var/g in right_side.gas)
@@ -309,6 +349,7 @@
update_values()
return 1
+
//Multiply all gas amounts by a factor.
/datum/gas_mixture/proc/multiply(factor)
for(var/g in gas)
@@ -317,6 +358,7 @@
update_values()
return 1
+
//Divide all gas amounts by a factor.
/datum/gas_mixture/proc/divide(factor)
for(var/g in gas)
@@ -325,6 +367,7 @@
update_values()
return 1
+
//Shares gas with another gas_mixture based on the amount of connecting tiles and a fixed lookup table.
/datum/gas_mixture/proc/share_ratio(datum/gas_mixture/other, connecting_tiles, share_size = null, one_way = 0)
var/static/list/sharing_lookup_table = list(0.30, 0.40, 0.48, 0.54, 0.60, 0.66)
@@ -369,19 +412,13 @@
update_values()
other.update_values()
- if(compare(other)) return 1
- else return 0
+ return compare(other)
+
//A wrapper around share_ratio for spacing gas at the same rate as if it were going into a large airless room.
/datum/gas_mixture/proc/share_space(datum/gas_mixture/unsim_air)
- if(!unsim_air)
- return 0
+ return share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
- var/old_pressure = return_pressure()
-
- share_ratio(unsim_air, unsim_air.group_multiplier, max(1, max(group_multiplier + 3, 1) + unsim_air.group_multiplier), one_way = 1)
-
- return abs(old_pressure - return_pressure())
//Equalizes a list of gas mixtures. Used for pipe networks.
/proc/equalize_gases(datum/gas_mixture/list/gases)
diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index c0fa2370ef..67e7dd2948 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -22,8 +22,9 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
//Languages/species/whitelist.
var/global/list/all_species[0]
var/global/list/all_languages[0]
-var/global/list/language_keys[0] //table of say codes for all languages
-var/global/list/whitelisted_species = list("Human")
+var/global/list/language_keys[0] // Table of say codes for all languages
+var/global/list/whitelisted_species = list("Human") // Species that require a whitelist check.
+var/global/list/playable_species = list("Human") // A list of ALL playable species, whitelisted, latejoin or otherwise.
// Posters
var/global/list/poster_designs = list()
@@ -106,9 +107,10 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
for (var/language_name in all_languages)
var/datum/language/L = all_languages[language_name]
- language_keys[":[lowertext(L.key)]"] = L
- language_keys[".[lowertext(L.key)]"] = L
- language_keys["#[lowertext(L.key)]"] = L
+ if(!(L.flags & NONGLOBAL))
+ language_keys[":[lowertext(L.key)]"] = L
+ language_keys[".[lowertext(L.key)]"] = L
+ language_keys["#[lowertext(L.key)]"] = L
var/rkey = 0
paths = typesof(/datum/species)-/datum/species
@@ -118,6 +120,8 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
S.race_key = rkey //Used in mob icon caching.
all_species[S.name] = S
+ if(!(S.flags & IS_RESTRICTED))
+ playable_species += S.name
if(S.flags & IS_WHITELISTED)
whitelisted_species += S.name
@@ -126,7 +130,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
for(var/T in paths)
var/datum/poster/P = new T
poster_designs += P
-
+
return 1
/* // Uncomment to debug chemical reaction list.
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index 3c7582b816..32838765e8 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -38,8 +38,18 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style
proc/random_name(gender, species = "Human")
- if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
- else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
+
+ var/datum/species/current_species
+ if(species)
+ current_species = all_species[species]
+
+ if(!current_species || current_species.name == "Human")
+ if(gender==FEMALE)
+ return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
+ else
+ return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
+ else
+ return current_species.get_random_name(gender)
proc/random_skin_tone()
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 9e05a1e39a..365865543f 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -23,14 +23,8 @@
/obj/item/proc/attack(mob/living/M as mob, mob/living/user as mob, def_zone)
- if (!istype(M)) // not sure if this is the right thing...
- return 0
- var/messagesource = M
- if (can_operate(M)) //Checks if mob is lying down on table for surgery
- if (do_surgery(M,user,src))
- return 0
- if (istype(M,/mob/living/carbon/brain))
- messagesource = M:container
+ if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0
+
/////////////////////////
user.lastattacked = M
M.lastattacker = user
@@ -38,125 +32,29 @@
user.attack_log += "\[[time_stamp()]\] Attacked [M.name] ([M.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)]) "
M.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)]) "
msg_admin_attack("[key_name(user)] attacked [key_name(M)] with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(damtype)])" )
-
- //spawn(1800) // this wont work right
- // M.lastattacker = null
/////////////////////////
var/power = force
if(HULK in user.mutations)
power *= 2
- if(!istype(M, /mob/living/carbon/human))
- if(istype(M, /mob/living/carbon/slime))
- var/mob/living/carbon/slime/slime = M
- if(prob(25))
- user << "\red [src] passes right through [M]!"
- return
-
- if(power > 0)
- slime.attacked += 10
-
- if(slime.Discipline && prob(50)) // wow, buddy, why am I getting attacked??
- slime.Discipline = 0
-
- if(power >= 3)
- if(slime.is_adult)
- if(prob(5 + round(power/2)))
-
- if(slime.Victim)
- if(prob(80) && !slime.client)
- slime.Discipline++
- slime.Victim = null
- slime.anchored = 0
-
- spawn()
- if(slime)
- slime.SStun = 1
- sleep(rand(5,20))
- if(slime)
- slime.SStun = 0
-
- spawn(0)
- if(slime)
- slime.canmove = 0
- step_away(slime, user)
- if(prob(25 + power))
- sleep(2)
- if(slime && user)
- step_away(slime, user)
- slime.canmove = 1
-
- else
- if(prob(10 + power*2))
- if(slime)
- if(slime.Victim)
- if(prob(80) && !slime.client)
- slime.Discipline++
-
- if(slime.Discipline == 1)
- slime.attacked = 0
-
- spawn()
- if(slime)
- slime.SStun = 1
- sleep(rand(5,20))
- if(slime)
- slime.SStun = 0
-
- slime.Victim = null
- slime.anchored = 0
-
-
- spawn(0)
- if(slime && user)
- step_away(slime, user)
- slime.canmove = 0
- if(prob(25 + power*4))
- sleep(2)
- if(slime && user)
- step_away(slime, user)
- slime.canmove = 1
-
-
- var/showname = "."
- if(user)
- showname = " by [user]."
- if(!(user in viewers(M, null)))
- showname = "."
-
- for(var/mob/O in viewers(messagesource, null))
- if(attack_verb.len)
- O.show_message("\red [M] has been [pick(attack_verb)] with [src][showname] ", 1)
- else
- O.show_message("\red [M] has been attacked with [src][showname] ", 1)
-
- if(!showname && user)
- if(user.client)
- user << "\red You attack [M] with [src]. "
-
-
-
+ // TODO: needs to be refactored into a mob/living level attacked_by() proc. ~Z
if(istype(M, /mob/living/carbon/human))
- var/hit = M:attacked_by(src, user, def_zone)
- if (hit && hitsound)
+ var/mob/living/carbon/human/H = M
+ var/hit = H.attacked_by(src, user, def_zone)
+ if(hit && hitsound)
playsound(loc, hitsound, 50, 1, -1)
return hit
else
+ user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]! ")
if (hitsound)
playsound(loc, hitsound, 50, 1, -1)
switch(damtype)
if("brute")
- if(istype(src, /mob/living/carbon/slime))
- M.adjustBrainLoss(power)
-
- else
-
- M.take_organ_damage(power)
- if (prob(33)) // Added blood for whacking non-humans too
- var/turf/location = M.loc
- if (istype(location, /turf/simulated))
- location:add_blood_floor(M)
+ M.take_organ_damage(power)
+ if(prob(33)) // Added blood for whacking non-humans too
+ var/turf/simulated/location = get_turf(M)
+ if(istype(location)) location.add_blood_floor(M)
if("fire")
if (!(COLD_RESISTANCE in M.mutations))
M.take_organ_damage(0, power)
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 3532bf7bcd..a2d2ed352d 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -83,6 +83,7 @@
var/limitalienplayers = 0
var/alien_to_human_ratio = 0.5
+ var/guests_allowed = 1
var/debugparanoid = 0
var/server
@@ -118,6 +119,8 @@
var/use_loyalty_implants = 0
+ var/welder_vision = 1
+
//Used for modifying movement speed for mobs.
//Unversal modifiers
var/run_speed = 0
@@ -145,6 +148,8 @@
var/comms_password = ""
+ var/enter_allowed = 1
+
var/use_irc_bot = 0
var/irc_bot_host = ""
var/main_irc = ""
@@ -170,6 +175,12 @@
// 15, 45, 70 minutes respectively
var/list/event_delay_upper = list(EVENT_LEVEL_MUNDANE = 9000, EVENT_LEVEL_MODERATE = 27000, EVENT_LEVEL_MAJOR = 42000)
+ var/aliens_allowed = 0
+ var/ninjas_allowed = 0
+ var/abandon_allowed = 1
+ var/ooc_allowed = 1
+ var/dooc_allowed = 1
+ var/dsay_allowed = 1
/datum/configuration/New()
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
@@ -367,7 +378,22 @@
config.guest_jobban = 1
if ("guest_ban")
- guests_allowed = 0
+ config.guests_allowed = 0
+
+ if ("disable_ooc")
+ config.ooc_allowed = 0
+
+ if ("disable_entry")
+ config.enter_allowed = 0
+
+ if ("disable_dead_ooc")
+ config.dooc_allowed = 0
+
+ if ("disable_dsay")
+ config.dsay_allowed = 0
+
+ if ("disable_respawn")
+ config.abandon_allowed = 0
if ("usewhitelist")
config.usewhitelist = 1
@@ -381,6 +407,12 @@
if ("traitor_scaling")
config.traitor_scaling = 1
+ if ("aliens_allowed")
+ config.aliens_allowed = 1
+
+ if ("ninjas_allowed")
+ config.ninjas_allowed = 1
+
if ("objectives_disabled")
config.objectives_disabled = 1
@@ -544,6 +576,9 @@
if("expected_round_length")
config.expected_round_length = MinutesToTicks(text2num(value))
+ if("disable_welder_vision")
+ config.welder_vision = 0
+
if("event_custom_start_mundane")
var/values = text2numlist(value, ";")
config.event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2]))
diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm
index 08c29e1a07..b59d3c73d6 100644
--- a/code/controllers/lighting_controller.dm
+++ b/code/controllers/lighting_controller.dm
@@ -65,7 +65,7 @@ datum/controller/lighting/proc/process()
//Does not loop. Should be run prior to process() being called for the first time.
//Note: if we get additional z-levels at runtime (e.g. if the gateway thin ever gets finished) we can initialize specific
//z-levels with the z_level argument
-datum/controller/lighting/proc/Initialize(var/z_level)
+datum/controller/lighting/proc/initializeLighting(var/z_level)
processing = 0
spawn(-1)
set background = 1
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 0a7c6c1a23..1e972dd46d 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -84,7 +84,7 @@ datum/controller/game_controller/proc/setup()
if(ticker)
ticker.pregame()
- lighting_controller.Initialize()
+ lighting_controller.initializeLighting()
datum/controller/game_controller/proc/setup_objects()
diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm
index d5503890a2..679c7a09bc 100644
--- a/code/controllers/voting.dm
+++ b/code/controllers/voting.dm
@@ -67,14 +67,6 @@ datum/controller/vote
current_votes.Cut()
additional_text.Cut()
- /* if(auto_muted && !ooc_allowed)
- auto_muted = 0
- ooc_allowed = !( ooc_allowed )
- world << "The OOC channel has been automatically enabled due to vote end. "
- log_admin("OOC was toggled automatically due to vote end.")
- message_admins("OOC has been toggled on automatically.")
- */
-
proc/get_result()
//get the highest number of votes
var/greatest_votes = 0
@@ -262,27 +254,6 @@ datum/controller/vote
if(mode == "gamemode" && going)
going = 0
world << "Round start has been delayed. "
- /* if(mode == "crew_transfer" && ooc_allowed)
- auto_muted = 1
- ooc_allowed = !( ooc_allowed )
- world << "The OOC channel has been automatically disabled due to a crew transfer vote. "
- log_admin("OOC was toggled automatically due to crew_transfer vote.")
- message_admins("OOC has been toggled off automatically.")
- if(mode == "gamemode" && ooc_allowed)
- auto_muted = 1
- ooc_allowed = !( ooc_allowed )
- world << "The OOC channel has been automatically disabled due to the gamemode vote. "
- log_admin("OOC was toggled automatically due to gamemode vote.")
- message_admins("OOC has been toggled off automatically.")
- if(mode == "custom" && ooc_allowed)
- auto_muted = 1
- ooc_allowed = !( ooc_allowed )
- world << "The OOC channel has been automatically disabled due to a custom vote. "
- log_admin("OOC was toggled automatically due to custom vote.")
- message_admins("OOC has been toggled off automatically.")
- */
-
-
time_remaining = round(config.vote_period/10)
return 1
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 3df48454de..e666a03653 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -268,7 +268,6 @@ client
body += "Remove Verb "
if(ishuman(D))
body += "--- "
- body += "Set Mutantrace "
body += "Set Species "
body += "Make AI "
body += "Make cyborg "
@@ -582,7 +581,7 @@ client
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
- H.makeSkeleton()
+ H.ChangeToSkeleton()
href_list["datumrefresh"] = href_list["make_skeleton"]
else if(href_list["delall"])
@@ -744,27 +743,6 @@ client
return
holder.Topic(href, list("makeai"=href_list["makeai"]))
- else if(href_list["setmutantrace"])
- if(!check_rights(R_SPAWN)) return
-
- var/mob/living/carbon/human/H = locate(href_list["setmutantrace"])
- if(!istype(H))
- usr << "This can only be done to instances of type /mob/living/carbon/human"
- return
-
- var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox")
- switch(new_mutantrace)
- if(null)
- return
- if("NONE")
- new_mutantrace = ""
- if(!H)
- usr << "Mob doesn't exist anymore"
- return
- if(H.dna)
- H.dna.mutantrace = new_mutantrace
- H.update_mutantrace()
-
else if(href_list["setspecies"])
if(!check_rights(R_SPAWN)) return
@@ -921,6 +899,7 @@ client
del(I)
return
+ H.internal_organs |= I
H.internal_organs_by_name[organ_slot] = I
usr << "Added new [new_organ] to [H] as slot [organ_slot]."
else
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 0d817b7c8d..4ff625defb 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -16,11 +16,11 @@
New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null)
..()
- if(!Init(arglist(args)))
+ if(!initTeleport(arglist(args)))
return 0
return 1
- proc/Init(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout)
+ proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout)
if(!setTeleatom(ateleatom))
return 0
if(!setDestination(adestination))
diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm
new file mode 100644
index 0000000000..17b232dd54
--- /dev/null
+++ b/code/datums/wires/smes.dm
@@ -0,0 +1,60 @@
+/datum/wires/smes
+ holder_type = /obj/machinery/power/smes/buildable
+ wire_count = 5
+
+var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable
+var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s
+var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s
+var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks
+var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
+
+
+/datum/wires/smes/CanUse(var/mob/living/L)
+ var/obj/machinery/power/smes/buildable/S = holder
+ if(S.open_hatch)
+ return 1
+ return 0
+
+
+/datum/wires/smes/GetInteractWindow()
+ var/obj/machinery/power/smes/buildable/S = holder
+ . += ..()
+ . += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"] "
+ . += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"] "
+ . += "The blue light is [S.RCon ? "on" : "off"]"
+
+
+/datum/wires/smes/UpdateCut(var/index, var/mended)
+ var/obj/machinery/power/smes/buildable/S = holder
+ switch(index)
+ if(SMES_WIRE_RCON)
+ S.RCon = mended
+ if(SMES_WIRE_INPUT)
+ S.input_cut = !mended
+ if(SMES_WIRE_OUTPUT)
+ S.output_cut = !mended
+ if(SMES_WIRE_GROUNDING)
+ S.grounding = mended
+ if(SMES_WIRE_FAILSAFES)
+ S.safeties_enabled = mended
+
+
+/datum/wires/smes/UpdatePulsed(var/index)
+ var/obj/machinery/power/smes/buildable/S = holder
+ switch(index)
+ if(SMES_WIRE_RCON)
+ if(S.RCon)
+ S.RCon = 0
+ spawn(10)
+ S.RCon = 1
+ if(SMES_WIRE_INPUT)
+ S.toggle_input()
+ if(SMES_WIRE_OUTPUT)
+ S.toggle_output()
+ if(SMES_WIRE_GROUNDING)
+ S.grounding = 0
+ if(SMES_WIRE_FAILSAFES)
+ if(S.safeties_enabled)
+ S.safeties_enabled = 0
+ spawn(10)
+ S.safeties_enabled = 1
\ No newline at end of file
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 79074cfbe6..0921cfabd9 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -206,14 +206,6 @@
name = "warning cone"
icon_state = "cone"
-/obj/item/weapon/rack_parts
- name = "rack parts"
- desc = "Parts of a rack."
- icon = 'icons/obj/items.dmi'
- icon_state = "rack_parts"
- flags = FPRINT | TABLEPASS| CONDUCT
- matter = list("metal" = 3750)
-
/*/obj/item/weapon/syndicate_uplink
name = "station bounced radio"
desc = "Remain silent about this..."
@@ -292,36 +284,6 @@
w_class = 2.0
flags = FPRINT | TABLEPASS | NOSHIELD
-/obj/item/weapon/table_parts
- name = "table parts"
- desc = "Parts of a table. Poor table."
- gender = PLURAL
- icon = 'icons/obj/items.dmi'
- icon_state = "table_parts"
- matter = list("metal" = 3750)
- flags = FPRINT | TABLEPASS| CONDUCT
- attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
-
-/obj/item/weapon/table_parts/reinforced
- name = "reinforced table parts"
- desc = "Hard table parts. Well...harder..."
- icon = 'icons/obj/items.dmi'
- icon_state = "reinf_tableparts"
- matter = list("metal" = 7500)
- flags = FPRINT | TABLEPASS| CONDUCT
-
-/obj/item/weapon/table_parts/wood
- name = "wooden table parts"
- desc = "Keep away from fire."
- icon_state = "wood_tableparts"
- flags = null
-
-/obj/item/weapon/table_parts/gambling
- name = "gamble table parts"
- desc = "Keep away from security."
- icon_state = "gamble_tableparts"
- flags = null
-
/obj/item/weapon/wire
desc = "This is just a simple piece of regular insulated wire."
name = "wire"
@@ -629,9 +591,9 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
-/obj/item/weapon/research//Makes testing much less of a pain -Sieve
- name = "research"
+/obj/item/weapon/research
+ name = "research debugging device"
+ desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi'
- icon_state = "capacitor"
- desc = "A debug item for research."
- origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;phorontech=8;engineering=8"
+ icon_state = "smes_coil"
+ origin_tech = "materials=19;programming=19;magnets=19;powerstorage=19;bluespace=19;combat=19;biotech=19;syndicate=19;phorontech=19;engineering=19"
diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm
index 0af47ba12c..1aef60bf05 100644
--- a/code/defines/procs/AStar.dm
+++ b/code/defines/procs/AStar.dm
@@ -38,148 +38,144 @@ length to avoid portals or something i guess?? Not that they're counted right no
PriorityQueue
- var/L[]
- var/cmp
+ var/list/queue
+ var/proc/comparison_function
+
New(compare)
- L = new()
- cmp = compare
- proc
- IsEmpty()
- return !L.len
- Enqueue(d)
- var/i
- var/j
- L.Add(d)
- i = L.len
- j = i>>1
- while(i > 1 && call(cmp)(L[j],L[i]) > 0)
- L.Swap(i,j)
- i = j
- j >>= 1
+ queue = list()
+ comparison_function = compare
- Dequeue()
- if(!L.len) return 0
- . = L[1]
- Remove(1)
+ proc/IsEmpty()
+ return !queue.len
- Remove(i)
- if(i > L.len) return 0
- L.Swap(i,L.len)
- L.Cut(L.len)
- if(i < L.len)
- _Fix(i)
- _Fix(i)
- var/child = i + i
- var/item = L[i]
- while(child <= L.len)
- if(child + 1 <= L.len && call(cmp)(L[child],L[child + 1]) > 0)
- child++
- if(call(cmp)(item,L[child]) > 0)
- L[i] = L[child]
- i = child
- else
- break
- child = i + i
- L[i] = item
- List()
- var/ret[] = new()
- var/copy = L.Copy()
- while(!IsEmpty())
- ret.Add(Dequeue())
- L = copy
- return ret
- RemoveItem(i)
- var/ind = L.Find(i)
- if(ind)
- Remove(ind)
-PathNode
- var/datum/source
- var/PathNode/prevNode
- var/f
- var/g
- var/h
- var/nt // Nodes traversed
- New(s,p,pg,ph,pnt)
- source = s
- prevNode = p
- g = pg
- h = ph
- f = g + h
- source.bestF = f
- nt = pnt
+ proc/Enqueue(var/data)
+ queue.Add(data)
+ var/index = queue.len
-datum
- var/bestF
-proc
- PathWeightCompare(PathNode/a, PathNode/b)
- return a.f - b.f
+ //From what I can tell, this automagically sorts the added data into the correct location.
+ while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0)
+ queue.Swap(index, index / 2)
+ index /= 2
- AStar(start,end,adjacent,dist,maxnodes,maxnodedepth = 30,mintargetdist,minnodedist,id=null, var/turf/exclude=null)
+ proc/Dequeue()
+ if(!queue.len)
+ return 0
+ return Remove(1)
-// world << "A*: [start] [end] [adjacent] [dist] [maxnodes] [maxnodedepth] [mintargetdist], [minnodedist] [id]"
- var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare)
- var/closed[] = new()
- var/path[]
- start = get_turf(start)
- if(!start) return 0
+ proc/Remove(var/index)
+ if(index > queue.len)
+ return 0
- open.Enqueue(new /PathNode(start,null,0,call(start,dist)(end)))
+ var/thing = queue[index]
+ queue.Swap(index, queue.len)
+ queue.Cut(queue.len)
+ if(index < queue.len)
+ FixQueue(index)
+ return thing
- while(!open.IsEmpty() && !path)
- {
- var/PathNode/cur = open.Dequeue()
- closed.Add(cur.source)
+ proc/FixQueue(var/index)
+ var/child = 2 * index
+ var/item = queue[index]
- var/closeenough
- if(mintargetdist)
- closeenough = call(cur.source,dist)(end) <= mintargetdist
-
- if(cur.source == end || closeenough)
- path = new()
- path.Add(cur.source)
- while(cur.prevNode)
- cur = cur.prevNode
- path.Add(cur.source)
+ while(child <= queue.len)
+ if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
+ child++
+ if(call(comparison_function)(item, queue[child]) > 0)
+ queue[index] = queue[child]
+ index = child
+ else
break
+ child = 2 * index
+ queue[index] = item
- var/L[] = call(cur.source,adjacent)(id)
- if(minnodedist && maxnodedepth)
- if(call(cur.source,minnodedist)(end) + cur.nt >= maxnodedepth)
- continue
- else if(maxnodedepth)
- if(cur.nt >= maxnodedepth)
- continue
+ proc/List()
+ return queue.Copy()
- for(var/datum/d in L)
- if(d == exclude)
- continue
- var/ng = cur.g + call(cur.source,dist)(d)
- if(d.bestF)
- if(ng + call(d,dist)(end) < d.bestF)
- for(var/i = 1; i <= open.L.len; i++)
- var/PathNode/n = open.L[i]
- if(n.source == d)
- open.Remove(i)
- break
+ proc/Length()
+ return queue.len
+
+ proc/RemoveItem(data)
+ var/index = queue.Find(data)
+ if(index)
+ return Remove(index)
+
+PathNode
+ var/datum/position
+ var/PathNode/previous_node
+
+ var/best_estimated_cost
+ var/estimated_cost
+ var/known_cost
+ var/cost
+ var/nodes_traversed
+
+ New(_position, _previous_node, _known_cost, _cost, _nodes_traversed)
+ position = _position
+ previous_node = _previous_node
+
+ known_cost = _known_cost
+ cost = _cost
+ estimated_cost = cost + known_cost
+
+ best_estimated_cost = estimated_cost
+ nodes_traversed = _nodes_traversed
+
+proc/PathWeightCompare(PathNode/a, PathNode/b)
+ return a.estimated_cost - b.estimated_cost
+
+proc/AStar(var/start, var/end, var/proc/adjacent, var/proc/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
+ var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare)
+ var/list/closed = list()
+ var/list/path
+ var/list/path_node_by_position = list()
+ start = get_turf(start)
+ if(!start)
+ return 0
+
+ open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0))
+
+ while(!open.IsEmpty() && !path)
+ var/PathNode/current = open.Dequeue()
+ closed.Add(current.position)
+
+ if(current.position == end || call(current.position, dist)(end) <= min_target_dist)
+ path = new /list(current.nodes_traversed + 1)
+ path[path.len] = current.position
+ var/index = path.len - 1
+
+ while(current.previous_node)
+ current = current.previous_node
+ path[index--] = current.position
+ break
+
+ if(min_node_dist && max_node_depth)
+ if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth)
+ continue
+
+ if(max_node_depth)
+ if(current.nodes_traversed >= max_node_depth)
+ continue
+
+ for(var/datum/datum in call(current.position, adjacent)(id))
+ if(datum == exclude)
+ continue
+
+ var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum)
+
+ //handle removal of sub-par positions
+ if(datum in path_node_by_position)
+ var/PathNode/target = path_node_by_position[datum]
+ if(target.best_estimated_cost)
+ if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost)
+ open.RemoveItem(target)
else
continue
- open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1))
- if(maxnodes && open.L.len > maxnodes)
- open.L.Cut(open.L.len)
- }
+ var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1)
+ path_node_by_position[datum] = next_node
+ open.Enqueue(next_node)
- var/PathNode/temp
- while(!open.IsEmpty())
- temp = open.Dequeue()
- temp.source.bestF = 0
- while(closed.len)
- temp = closed[closed.len]
- temp.bestF = 0
- closed.Cut(closed.len)
+ if(max_nodes && open.Length() > max_nodes)
+ open.Remove(open.Length())
- if(path)
- for(var/i = 1; i <= path.len/2; i++)
- path.Swap(i,path.len-i+1)
-
- return path
+ return path
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 7f115404b3..f875b9975c 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -770,9 +770,16 @@ var/list/ghostteleportlocs = list()
/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets.
name = "Engineering Substation"
+// No longer used:
/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room.
name = "Medical Research Substation"
+/area/maintenance/substation/medical // Medbay
+ name = "Medical Substation"
+
+/area/maintenance/substation/research // Research
+ name = "Research Substation"
+
/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ...
name = "Civilian East Substation"
@@ -1040,6 +1047,7 @@ var/list/ghostteleportlocs = list()
/area/holodeck/source_space
name = "\improper Holodeck - Space"
+ has_gravity = 0
diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm
index 32c7ef1dd6..e30de18f4e 100644
--- a/code/game/dna/dna2.dm
+++ b/code/game/dna/dna2.dm
@@ -80,7 +80,6 @@ var/global/list/datum/dna/gene/dna_genes[0]
// From old dna.
var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy.
- var/mutantrace = null // The type of mutant race the player is, if applicable (i.e. potato-man)
var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings,
// New stuff
@@ -92,7 +91,6 @@ var/global/list/datum/dna/gene/dna_genes[0]
var/datum/dna/new_dna = new()
new_dna.unique_enzymes=unique_enzymes
new_dna.b_type=b_type
- new_dna.mutantrace=mutantrace
new_dna.real_name=real_name
new_dna.species=species
for(var/b=1;b<=DNA_SE_LENGTH;b++)
diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm
index 534d6d109c..e2c41fcbb4 100644
--- a/code/game/gamemodes/autotraitor/autotraitor.dm
+++ b/code/game/gamemodes/autotraitor/autotraitor.dm
@@ -70,7 +70,6 @@
/datum/game_mode/traitor/autotraitor/post_setup()
..()
- abandon_allowed = 1
traitorcheckloop()
/datum/game_mode/traitor/autotraitor/proc/traitorcheckloop()
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 59aede3ac9..26e38476b7 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -26,7 +26,7 @@
var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events.
- if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
+ if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
eventNumbersToPickFrom += 3
switch(pick(eventNumbersToPickFrom))
if(1)
@@ -74,7 +74,7 @@
del(P)
*/
if(3)
- if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
+ if((world.time/10)>=3600 && config.ninjas_allowed && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
if(4)
mini_blob_event()
diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm
index 3dac9f2148..d8b22e629c 100644
--- a/code/game/gamemodes/events/space_ninja.dm
+++ b/code/game/gamemodes/events/space_ninja.dm
@@ -90,7 +90,6 @@ I decided to scrap round-specific objectives since keeping track of them would r
When I already created about 4 new objectives, this doesn't seem terribly important or needed.
*/
-/var/global/toggle_space_ninja = 0//If ninjas can spawn or not.
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
var/ninja_selection_id = 1
@@ -437,7 +436,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
if(!ticker)
alert("Wait until the game starts")
return
- if(!toggle_space_ninja)
+ if(!config.ninjas_allowed)
alert("Space Ninjas spawning is disabled.")
return
@@ -467,7 +466,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
if(!ticker.mode)
alert("The game hasn't started yet!")
return
- if(!toggle_space_ninja)
+ if(!config.ninjas_allowed)
alert("Space Ninjas spawning is disabled.")
return
if(alert("Are you sure you want to send in a space ninja?",,"Yes","No")=="No")
@@ -531,7 +530,6 @@ As such, it's hard-coded for now. No reason for it not to be, really.
else
equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform)
- equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt)
var/obj/item/weapon/rig/light/ninja/ninjasuit = new(src)
@@ -546,16 +544,16 @@ As such, it's hard-coded for now. No reason for it not to be, really.
equip_to_slot_or_del(ninjasuit,slot_back)
- if(istype(wear_suit,/obj/item/weapon/rig))
- var/obj/item/weapon/rig/rig = wear_suit
- if(rig.air_supply)
- internal = rig.air_supply
- if(!internal && s_store)
- internal = s_store
- if(internal)
- internals.icon_state = "internal1"
-
spawn(10)
ninjasuit.toggle_seals(src,1)
+ if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = back
+ if(rig.air_supply)
+ internal = rig.air_supply
+ if(!internal && s_store)
+ internal = s_store
+ if(internal)
+ internals.icon_state = "internal1"
+
return 1
\ No newline at end of file
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 3534c5f63e..e90b65a333 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -56,7 +56,7 @@
"Devices and Tools" = list(
new/datum/uplink_item(/obj/item/weapon/card/emag, 3, "Cryptographic Sequencer", "EC"),
new/datum/uplink_item(/obj/item/weapon/storage/toolbox/syndicate, 1, "Fully Loaded Toolbox", "ST"),
- new/datum/uplink_item(/obj/item/weapon/stamp/chameleon, 3, "Morphic Chameleon Stmap", "CS"),
+ new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/clerical, 3, "Morphic Clerical Kit", "CK"),
new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/space, 3, "Space Suit", "SS"),
new/datum/uplink_item(/obj/item/clothing/glasses/thermal/syndi, 3, "Thermal Imaging Glasses", "TM"),
new/datum/uplink_item(/obj/item/device/encryptionkey/binary, 3, "Binary Translator Key", "BT"),
diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm
index 14e1b5a30e..8157acc1a0 100644
--- a/code/game/gamemodes/heist/heist.dm
+++ b/code/game/gamemodes/heist/heist.dm
@@ -102,7 +102,6 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
vox.name = vox.real_name
newraider.name = vox.name
vox.age = rand(12,20)
- vox.dna.mutantrace = "vox"
vox.set_species("Vox")
vox.languages = list() // Removing language from chargen.
vox.flavor_text = ""
diff --git a/code/game/gamemodes/malfunction/malfunction.dm b/code/game/gamemodes/malfunction/malfunction.dm
index 1c8f8b9b40..77b6d67357 100644
--- a/code/game/gamemodes/malfunction/malfunction.dm
+++ b/code/game/gamemodes/malfunction/malfunction.dm
@@ -181,7 +181,7 @@
usr << "You are unable to access the self-destruct system as you don't control the station yet."
return
- if(ticker.mode:explosion_in_progress || ticker.mode:station_was_nuked)
+ if(ticker.mode.explosion_in_progress || ticker.mode:station_was_nuked)
usr << "The self-destruct countdown is already triggered!"
return
@@ -192,7 +192,7 @@
usr << "\red Self-Destruct sequence initialised!"
ticker.mode:to_nuke_or_not_to_nuke = 0
- ticker.mode:explosion_in_progress = 1
+ ticker.mode.explosion_in_progress = 1
for(var/mob/M in player_list)
M << 'sound/machines/Alarm.ogg'
@@ -235,16 +235,15 @@
R.autosay(msg, AN)
if(abort)
- ticker.mode:explosion_in_progress = 0
+ ticker.mode.explosion_in_progress = 0
set_security_level("red") //Delta's over
return
- enter_allowed = 0
if(ticker)
ticker.station_explosion_cinematic(0,null)
if(ticker.mode)
ticker.mode:station_was_nuked = 1
- ticker.mode:explosion_in_progress = 0
+ ticker.mode.explosion_in_progress = 0
return
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index cc57ccd855..ef78dd4286 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -389,8 +389,6 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
ticker.mode.explosion_in_progress = 1
sleep(100)
- enter_allowed = 0
-
var/off_station = 0
var/turf/bomb_location = get_turf(src)
if(bomb_location && (bomb_location.z in config.station_levels))
diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm
index 48f0a94faf..19f2216272 100644
--- a/code/game/machinery/camera/camera_assembly.dm
+++ b/code/game/machinery/camera/camera_assembly.dm
@@ -100,7 +100,7 @@
C.auto_turn()
C.network = uniquelist(tempnetwork)
- tempnetwork = difflist(C.network,RESTRICTED_CAMERA_NETWORKS)
+ tempnetwork = difflist(C.network,restricted_camera_networks)
if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility.
cameranet.removeCamera(C)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index aa5d7a02f1..454e6e44fc 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -33,7 +33,7 @@
var/datum/dna2/record/buf=null
var/read_only = 0 //Well,it's still a floppy disk
-/obj/item/weapon/disk/data/proc/Initialize()
+/obj/item/weapon/disk/data/proc/initializeDisk()
buf = new
buf.dna=new
@@ -42,7 +42,7 @@
read_only = 1
New()
- Initialize()
+ initializeDisk()
buf.types=DNA2_BUF_UE|DNA2_BUF_UI
//data = "066000033000000000AF00330660FF4DB002690"
//data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff
@@ -57,7 +57,7 @@
read_only = 1
New()
- Initialize()
+ initializeDisk()
buf.types=DNA2_BUF_SE
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4)
for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++)
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 726a84cb1f..abcdb51a51 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -16,14 +16,22 @@ var/global/list/holodeck_programs = list(
)
/obj/machinery/computer/HolodeckControl
- name = "Holodeck Control Computer"
+ name = "holodeck control console"
desc = "A computer used to control a nearby holodeck."
icon_state = "holocontrol"
+
+ use_power = 1
+ active_power_usage = 8000 //8kW for the scenery + 500W per holoitem
+ var/item_power_usage = 500
+
var/area/linkedholodeck = null
var/area/target = null
var/active = 0
var/list/holographic_items = list()
+ var/list/holographic_mobs = list()
var/damaged = 0
+ var/safety_disabled = 0
+ var/mob/last_to_emag = null
var/last_change = 0
var/list/supported_programs = list( \
"Empty Court" = "emptycourt", \
@@ -38,84 +46,111 @@ var/global/list/holodeck_programs = list(
"Theatre" = "theatre", \
"Meeting Hall" = "meetinghall" \
)
- var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "ildlife Simulation" = "wildlifecarp")
+ var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp")
- attack_ai(var/mob/user as mob)
- return src.attack_hand(user)
+/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
+ return src.attack_hand(user)
- attack_hand(var/mob/user as mob)
+/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
- if(..())
- return
- user.set_machine(src)
- var/dat
+ if(..())
+ return
+ user.set_machine(src)
+ var/dat
- dat += "Holodeck Control System "
- dat += " Current Loaded Programs: "
- for(var/prog in supported_programs)
- dat += "(([prog])) "
+ dat += "Holodeck Control System "
+ dat += " Current Loaded Programs: "
+ for(var/prog in supported_programs)
+ dat += "(([prog])) "
- dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded. "
+ dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded. "
- if(issilicon(user))
- if(emagged)
- dat += "(Re-Enable Safety Protocols? ) "
+ if(issilicon(user))
+ if(safety_disabled)
+ if (emagged)
+ dat += "ERROR : Cannot re-enable Safety Protocols. "
else
- dat += "(Override Safety Protocols? ) "
-
- if(emagged)
- for(var/prog in restricted_programs)
- dat += "(Begin [prog] ) "
- dat += "Ensure the holodeck is empty before testing. "
- dat += " "
- dat += "Safety Protocols are DISABLED "
+ dat += "(Re-Enable Safety Protocols? ) "
else
- dat += "Safety Protocols are ENABLED "
+ dat += "(Override Safety Protocols? ) "
- user << browse(dat, "window=computer;size=400x500")
- onclose(user, "computer")
+ if(safety_disabled)
+ for(var/prog in restricted_programs)
+ dat += "(Begin [prog] ) "
+ dat += "Ensure the holodeck is empty before testing. "
+ dat += " "
+ dat += "Safety Protocols are DISABLED "
+ else
+ dat += "Safety Protocols are ENABLED "
+ user << browse(dat, "window=computer;size=400x500")
+ onclose(user, "computer")
+
+ return
+
+
+/obj/machinery/computer/HolodeckControl/Topic(href, href_list)
+ if(..())
return
+ if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ usr.set_machine(src)
+ if(href_list["program"])
+ var/prog = href_list["program"]
+ if(prog in holodeck_programs)
+ target = locate(holodeck_programs[prog])
+ if(target)
+ loadProgram(target)
- Topic(href, href_list)
- if(..())
- return
- if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
- usr.set_machine(src)
+ else if(href_list["AIoverride"])
+ if(!issilicon(usr))
+ return
- if(href_list["program"])
- var/prog = href_list["program"]
- if(prog in holodeck_programs)
- target = locate(holodeck_programs[prog])
- if(target)
- loadProgram(target)
+ if(safety_disabled && emagged)
+ return //if a traitor has gone through the trouble to emag the thing, let them keep it.
- else if(href_list["AIoverride"])
- if(!issilicon(usr)) return
- emagged = !emagged
- if(emagged)
- message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
- log_game("[key_name(usr)] overrided the holodeck's safeties")
- else
- message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
- log_game("[key_name(usr)] restored the holodeck's safeties")
+ safety_disabled = !safety_disabled
+ update_projections()
+ if(safety_disabled)
+ message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
+ log_game("[key_name(usr)] overrided the holodeck's safeties")
+ else
+ message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
+ log_game("[key_name(usr)] restored the holodeck's safeties")
- src.add_fingerprint(usr)
- src.updateUsrDialog()
- return
-
-
-/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
- if(istype(D, /obj/item/weapon/card/emag) && !emagged)
- playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
- emagged = 1
- user << "\blue You vastly increase projector power and override the safety and security protocols."
- user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
- log_game("[key_name(usr)] emagged the Holodeck Control Computer")
+ src.add_fingerprint(usr)
src.updateUsrDialog()
return
+/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
+ if(istype(D, /obj/item/weapon/card/emag))
+ playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
+ last_to_emag = user //emag again to change the owner
+ if (!emagged)
+ emagged = 1
+ safety_disabled = 1
+ update_projections()
+ user << "You vastly increase projector power and override the safety and security protocols. "
+ user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
+ log_game("[key_name(usr)] emagged the Holodeck Control Computer")
+ src.updateUsrDialog()
+ return
+
+/obj/machinery/computer/HolodeckControl/proc/update_projections()
+ if (safety_disabled)
+ item_power_usage = 2500
+ for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
+ H.damtype = BRUTE
+ else
+ item_power_usage = initial(item_power_usage)
+ for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
+ H.damtype = initial(H.damtype)
+
+ for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ C.set_safety(!safety_disabled)
+ if (last_to_emag)
+ C.friends = list(last_to_emag)
+
/obj/machinery/computer/HolodeckControl/New()
..()
linkedholodeck = locate(/area/holodeck/alphadeck)
@@ -148,14 +183,27 @@ var/global/list/holodeck_programs = list(
emergencyShutdown()
..()
+/obj/machinery/computer/HolodeckControl/power_change()
+ var/oldstat
+ ..()
+ if (stat != oldstat && active && (stat & NOPOWER))
+ emergencyShutdown()
+
/obj/machinery/computer/HolodeckControl/process()
for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down.
if(!(get_turf(item) in linkedholodeck))
derez(item, 0)
+ if (!safety_disabled)
+ for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ if (get_area(C.loc) != linkedholodeck)
+ holographic_mobs -= C
+ C.derez()
+
if(!..())
return
if(active)
+ use_power(item_power_usage * (holographic_items.len + holographic_mobs.len))
if(!checkInteg(linkedholodeck))
damaged = 1
@@ -163,6 +211,7 @@ var/global/list/holodeck_programs = list(
if(target)
loadProgram(target)
active = 0
+ use_power = 1
for(var/mob/M in range(10,src))
M.show_message("The holodeck overloads!")
@@ -199,6 +248,7 @@ var/global/list/holodeck_programs = list(
return 1
+//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
@@ -218,12 +268,14 @@ var/global/list/holodeck_programs = list(
T.hotspot_expose(50000,50000,1)
active = 1
+ use_power = 2
else
for(var/item in holographic_items)
derez(item)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
+ use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
@@ -238,22 +290,20 @@ var/global/list/holodeck_programs = list(
last_change = world.time
active = 1
+ use_power = 2
for(var/item in holographic_items)
derez(item)
+ for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ holographic_mobs -= C
+ C.derez()
+
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
del(B)
- for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
- del(C)
-
holographic_items = A.copy_contents_to(linkedholodeck , 1)
- if(emagged)
- for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
- H.damtype = BRUTE
-
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
@@ -266,13 +316,22 @@ var/global/list/holodeck_programs = list(
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn")
- new /mob/living/simple_animal/hostile/carp(L.loc)
+ holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
+
+ if(L.name=="Holocarp Spawn Random")
+ if (prob(4)) //With 4 spawn points, carp should only appear 15% of the time.
+ holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
+
+ update_projections()
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items
for(var/item in holographic_items)
derez(item)
+ for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ holographic_mobs -= C
+ C.derez()
//Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating)
if(target)
@@ -281,6 +340,7 @@ var/global/list/holodeck_programs = list(
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
+ use_power = 1
@@ -308,6 +368,16 @@ var/global/list/holodeck_programs = list(
var/turf/simulated/floor/FF = get_step(src,direction)
FF.update_icon() //so siding get updated properly
+/turf/simulated/floor/holofloor/desert
+ name = "desert sand"
+ desc = "Uncomfortably gritty for a hologram."
+ icon_state = "asteroid"
+
+/turf/simulated/floor/holofloor/desert/New()
+ ..()
+ if(prob(10))
+ overlays += "asteroid[rand(0,9)]"
+
/turf/simulated/floor/holofloor/attackby(obj/item/weapon/W as obj, mob/user as mob)
return
// HOLOFLOOR DOES NOT GIVE A FUCK
@@ -327,17 +397,6 @@ var/global/list/holodeck_programs = list(
/obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
- var/obj/item/weapon/grab/G = W
- if(G.state<2)
- user << "\red You need a better grip to do that!"
- return
- G.affecting.loc = src.loc
- G.affecting.Weaken(5)
- visible_message("\red [G.assailant] puts [G.affecting] on the table.")
- del(W)
- return
-
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holotable! There are no bolts!"
return
@@ -424,13 +483,13 @@ var/global/list/holodeck_programs = list(
icon_state = "sword[item_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
- user << "\blue [src] is now active."
+ user << "[src] is now active. "
else
force = 3
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
- user << "\blue [src] can now be concealed."
+ user << "[src] can now be concealed. "
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
@@ -463,16 +522,16 @@ var/global/list/holodeck_programs = list(
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
- user << "\red You need a better grip to do that!"
+ user << "You need a better grip to do that! "
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
- visible_message("\red [G.assailant] dunks [G.affecting] into the [src]!", 3)
+ visible_message("[G.assailant] dunks [G.affecting] into the [src]! ", 3)
del(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
- visible_message("\blue [user] dunks [W] into the [src]!", 3)
+ visible_message("[user] dunks [W] into the [src]! ", 3)
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -482,9 +541,9 @@ var/global/list/holodeck_programs = list(
return
if(prob(50))
I.loc = src.loc
- visible_message("\blue Swish! \the [I] lands in \the [src].", 3)
+ visible_message("Swish! \the [I] lands in \the [src]. ", 3)
else
- visible_message("\red \the [I] bounces off of \the [src]'s rim!", 3)
+ visible_message("\The [I] bounces off of \the [src]'s rim! ", 3)
return 0
else
return ..(mover, target, height, air_group)
@@ -565,16 +624,52 @@ var/global/list/holodeck_programs = list(
//Holorack
-/obj/structure/rack/holorack
+/obj/structure/table/rack/holorack
name = "rack"
desc = "Different from the Middle Ages version."
icon = 'icons/obj/objects.dmi'
icon_state = "rack"
-/obj/structure/rack/holorack/attack_hand(mob/user as mob)
+/obj/structure/table/rack/holorack/attack_hand(mob/user as mob)
return
-/obj/structure/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob)
+/obj/structure/table/rack/holorack/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holorack! You can't unwrench it!"
return
+
+//Holocarp
+
+/mob/living/simple_animal/hostile/carp/holodeck
+ icon = 'icons/mob/AI.dmi'
+ icon_state = "holo4"
+ icon_living = "holo4"
+ icon_dead = "holo4"
+ icon_gib = null
+ meat_amount = 0
+ meat_type = null
+
+/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
+ if (safe)
+ faction = "neutral"
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ wall_smash = 0
+ destroy_surroundings = 0
+ else
+ faction = "carp"
+ melee_damage_lower = initial(melee_damage_lower)
+ melee_damage_upper = initial(melee_damage_upper)
+ wall_smash = initial(wall_smash)
+ destroy_surroundings = initial(destroy_surroundings)
+
+/mob/living/simple_animal/hostile/carp/holodeck/gib()
+ derez() //holograms can't gib
+
+/mob/living/simple_animal/hostile/carp/holodeck/death()
+ ..()
+ derez()
+
+/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
+ visible_message("\The [src] fades away! ")
+ del(src)
diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm
index f1a1f02db7..bcd7beda08 100644
--- a/code/game/machinery/computer/Operating.dm
+++ b/code/game/machinery/computer/Operating.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/operating
- name = "Operating Computer"
+ name = "patient monitoring console"
density = 1
anchored = 1.0
icon_state = "operating"
diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm
new file mode 100644
index 0000000000..e88de45c94
--- /dev/null
+++ b/code/game/machinery/computer/RCON_Console.dm
@@ -0,0 +1,107 @@
+/obj/machinery/computer/rcon
+ name = "\improper RCON remote control console"
+ desc = "Console used to remotely control machinery on the station."
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "ai-fixer"
+ circuit = /obj/item/weapon/circuitboard/rcon_console
+ req_one_access = list(access_engine)
+ var/current_tag = null
+ var/list/known_SMESs = null
+ var/list/known_breakers = null
+
+/obj/machinery/computer/rcon/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+/obj/machinery/computer/rcon/attack_hand(var/mob/user as mob)
+ ..()
+ ui_interact(user)
+
+/obj/machinery/computer/rcon/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ FindDevices() // Update our devices list
+ var/data[0]
+
+ // SMES DATA (simplified view)
+ var/list/smeslist[0]
+ for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs)
+ smeslist.Add(list(list(
+ "charge" = round(SMES.Percentage()),
+ "input_set" = SMES.input_attempt,
+ "input_val" = round(SMES.input_level),
+ "output_set" = SMES.output_attempt,
+ "output_val" = round(SMES.output_level),
+ "output_load" = round(SMES.output_used),
+ "RCON_tag" = SMES.RCon_tag
+ )))
+ data["smes_info"] = smeslist
+
+ // BREAKER DATA (simplified view)
+ var/list/breakerlist[0]
+ for(var/obj/machinery/power/breakerbox/BR in known_breakers)
+ breakerlist.Add(list(list(
+ "RCON_tag" = BR.RCon_tag,
+ "enabled" = BR.on
+ )))
+ data["breaker_info"] = breakerlist
+
+ // update the ui if it exists, returns null if no ui is passed/found
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ // the ui does not exist, so we'll create a new() one
+ // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
+ ui = new(user, src, ui_key, "rcon.tmpl", "RCON Control Console", 600, 400)
+ // when the ui is first opened this is the data it will use
+ ui.set_initial_data(data)
+ // open the new ui window
+ ui.open()
+ // auto update every Master Controller tick
+ ui.set_auto_update(1)
+
+/obj/machinery/computer/rcon/Topic(href, href_list)
+ if(href_list["smes_in_toggle"])
+ var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_toggle"])
+ if(SMES)
+ SMES.toggle_input()
+ if(href_list["smes_out_toggle"])
+ var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_toggle"])
+ if(SMES)
+ SMES.toggle_output()
+ if(href_list["smes_in_set"])
+ var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_set"])
+ if(SMES)
+ var/inputset = input(usr, "Enter new input level (0-[SMES.input_level_max])", "SMES Input Power Control") as num
+ SMES.set_input(inputset)
+ if(href_list["smes_out_set"])
+ var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_set"])
+ if(SMES)
+ var/outputset = input(usr, "Enter new output level (0-[SMES.output_level_max])", "SMES Input Power Control") as num
+ SMES.set_output(outputset)
+
+ if(href_list["toggle_breaker"])
+ var/obj/machinery/power/breakerbox/toggle = null
+ for(var/obj/machinery/power/breakerbox/breaker in known_breakers)
+ if(breaker.RCon_tag == href_list["toggle_breaker"])
+ toggle = breaker
+ if(toggle)
+ if(toggle.update_locked)
+ usr << "The breaker box was recently toggled. Please wait before toggling it again."
+ else
+ toggle.auto_toggle()
+
+/obj/machinery/computer/rcon/proc/GetSMESByTag(var/tag)
+ if(!tag)
+ return
+
+ for(var/obj/machinery/power/smes/buildable/S in known_SMESs)
+ if(S.RCon_tag == tag)
+ return S
+
+/obj/machinery/computer/rcon/proc/FindDevices()
+ known_SMESs = new /list()
+ for(var/obj/machinery/power/smes/buildable/SMES in machines)
+ if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
+ known_SMESs.Add(SMES)
+
+ known_breakers = new /list()
+ for(var/obj/machinery/power/breakerbox/breaker in machines)
+ if(breaker.RCon_tag != "NO_TAG")
+ known_breakers.Add(breaker)
\ No newline at end of file
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 2dbfcd9620..69c884ec70 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -1,7 +1,7 @@
/obj/structure/AIcore
density = 1
anchored = 0
- name = "AI core"
+ name = "\improper AI core"
icon = 'icons/mob/AI.dmi'
icon_state = "0"
var/state = 0
@@ -175,7 +175,7 @@
del(src)
/obj/structure/AIcore/deactivated
- name = "Inactive AI"
+ name = "inactive AI"
icon = 'icons/mob/AI.dmi'
icon_state = "ai-empty"
anchored = 1
diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm
index 2182d989dc..223f9523cc 100644
--- a/code/game/machinery/computer/aifixer.dm
+++ b/code/game/machinery/computer/aifixer.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/aifixer
- name = "AI System Integrity Restorer"
+ name = "\improper AI system integrity restorer"
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
circuit = /obj/item/weapon/circuitboard/aifixer
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 6047b221b8..8e978853c4 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -1,13 +1,16 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+// Converting these to global lists may be a bit laggy when removal procs are called. Consider
+// rewriting this properly to fix the update bug, rather than unifying all monitors. ~Z
+
+var/global/list/priority_air_alarms = list()
+var/global/list/minor_air_alarms = list()
/obj/machinery/computer/atmos_alert
- name = "Atmospheric Alert Computer"
+ name = "atmospheric alert computer"
desc = "Used to access the station's atmospheric sensors."
circuit = "/obj/item/weapon/circuitboard/atmos_alert"
icon_state = "alert:0"
- var/list/priority_alarms = list()
- var/list/minor_alarms = list()
var/receive_frequency = 1437
var/datum/radio_frequency/radio_connection
@@ -24,12 +27,12 @@
if(!zone || !severity) return
- minor_alarms -= zone
- priority_alarms -= zone
+ minor_air_alarms -= zone
+ priority_air_alarms -= zone
if(severity=="severe")
- priority_alarms += zone
+ priority_air_alarms |= zone
else if (severity=="minor")
- minor_alarms += zone
+ minor_air_alarms |= zone
update_icon()
return
@@ -55,10 +58,10 @@
..()
if(stat & (NOPOWER|BROKEN))
return
- if(priority_alarms.len)
+ if(priority_air_alarms.len)
icon_state = "alert:2"
- else if(minor_alarms.len)
+ else if(minor_air_alarms.len)
icon_state = "alert:1"
else
@@ -70,14 +73,14 @@
var/priority_text
var/minor_text
- if(priority_alarms.len)
- for(var/zone in priority_alarms)
+ if(priority_air_alarms.len)
+ for(var/zone in priority_air_alarms)
priority_text += "[zone] X "
else
priority_text = "No priority alerts detected. "
- if(minor_alarms.len)
- for(var/zone in minor_alarms)
+ if(minor_air_alarms.len)
+ for(var/zone in minor_air_alarms)
minor_text += "[zone] X "
else
minor_text = "No minor alerts detected. "
@@ -100,14 +103,14 @@
if(href_list["priority_clear"])
var/removing_zone = href_list["priority_clear"]
- for(var/zone in priority_alarms)
+ for(var/zone in priority_air_alarms)
if(ckey(zone) == removing_zone)
- priority_alarms -= zone
+ priority_air_alarms -= zone
if(href_list["minor_clear"])
var/removing_zone = href_list["minor_clear"]
- for(var/zone in minor_alarms)
+ for(var/zone in minor_air_alarms)
if(ckey(zone) == removing_zone)
- minor_alarms -= zone
+ minor_air_alarms -= zone
update_icon()
return
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index 3c30ffa198..ac648624f2 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -3,363 +3,13 @@
/obj/structure/computerframe
density = 1
anchored = 0
- name = "Computer-frame"
+ name = "computer frame"
icon = 'icons/obj/stock_parts.dmi'
icon_state = "0"
var/state = 0
var/obj/item/weapon/circuitboard/circuit = null
// weight = 1.0E8
-/obj/item/weapon/circuitboard
- density = 0
- anchored = 0
- w_class = 2.0
- name = "Circuit board"
- icon = 'icons/obj/module.dmi'
- icon_state = "id_mod"
- item_state = "electronic"
- origin_tech = "programming=2"
- var/build_path = null
- var/board_type = "computer"
- var/list/req_components = null
- var/frame_desc = null
- var/contain_parts = 1
-
-//Not sure where else to put this
-/obj/item/weapon/circuitboard/broken
- name = "broken electronics"
- icon = 'icons/obj/doors/door_assembly.dmi'
- icon_state = "door_electronics_smoked"
- origin_tech = null
- board_type = "other"
-
-//Called when the circuitboard is used to contruct a new machine.
-/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
- if (istype(M, build_path))
- return 1
- return 0
-
-//Called when a computer is deconstructed to produce a circuitboard.
-//Only used by computers, as other machines store their circuitboard instance.
-/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M)
- if (istype(M, build_path))
- return 1
- return 0
-
-/*
- Circuit Board Definitions
-*/
-
-/obj/item/weapon/circuitboard/message_monitor
- name = "Circuit board (Message Monitor)"
- build_path = /obj/machinery/computer/message_monitor
- origin_tech = "programming=3"
-
-//TODO: Move these into computer/camera.dm
-/obj/item/weapon/circuitboard/security
- name = "Circuit board (Security Camera Monitor)"
- build_path = /obj/machinery/computer/security
- var/network = list("SS13")
- req_access = list(access_security)
- var/locked = 1
- var/emagged = 0
-
-/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
- if (..(C))
- C.network = network
-
-/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
- if (..(C))
- network = C.network
-
-/obj/item/weapon/circuitboard/security/engineering
- name = "Circuit board (Engineering Camera Monitor)"
- build_path = /obj/machinery/computer/security/engineering
- network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
- req_access = list()
-/obj/item/weapon/circuitboard/security/mining
- name = "Circuit board (Mining Camera Monitor)"
- build_path = /obj/machinery/computer/security/mining
- network = list("MINE")
- req_access = list()
-/obj/item/weapon/circuitboard/aicore
- name = "Circuit board (AI Core)"
- origin_tech = "programming=4;biotech=2"
- board_type = "other"
-/obj/item/weapon/circuitboard/aiupload
- name = "Circuit board (AI Upload)"
- build_path = /obj/machinery/computer/aiupload
- origin_tech = "programming=4"
-/obj/item/weapon/circuitboard/borgupload
- name = "Circuit board (Cyborg Upload)"
- build_path = /obj/machinery/computer/borgupload
- origin_tech = "programming=4"
-/obj/item/weapon/circuitboard/med_data
- name = "Circuit board (Medical Records)"
- build_path = /obj/machinery/computer/med_data
-/obj/item/weapon/circuitboard/pandemic
- name = "Circuit board (PanD.E.M.I.C. 2200)"
- build_path = /obj/machinery/computer/pandemic
- origin_tech = "programming=2;biotech=2"
-/obj/item/weapon/circuitboard/scan_consolenew
- name = "Circuit board (DNA Machine)"
- build_path = /obj/machinery/computer/scan_consolenew
- origin_tech = "programming=2;biotech=2"
-/obj/item/weapon/circuitboard/communications
- name = "Circuit board (Communications)"
- build_path = /obj/machinery/computer/communications
- origin_tech = "programming=2;magnets=2"
-/obj/item/weapon/circuitboard/card
- name = "Circuit board (ID Computer)"
- build_path = /obj/machinery/computer/card
-/obj/item/weapon/circuitboard/card/centcom
- name = "Circuit board (CentCom ID Computer)"
- build_path = /obj/machinery/computer/card/centcom
-//obj/item/weapon/circuitboard/shield
-// name = "Circuit board (Shield Control)"
-// build_path = "/obj/machinery/computer/stationshield"
-/obj/item/weapon/circuitboard/teleporter
- name = "Circuit board (Teleporter)"
- build_path = /obj/machinery/computer/teleporter
- origin_tech = "programming=2;bluespace=2"
-/obj/item/weapon/circuitboard/secure_data
- name = "Circuit board (Security Records)"
- build_path = /obj/machinery/computer/secure_data
-/obj/item/weapon/circuitboard/skills
- name = "Circuit board (Employment Records)"
- build_path = /obj/machinery/computer/skills
-/obj/item/weapon/circuitboard/stationalert
- name = "Circuit board (Station Alerts)"
- build_path = /obj/machinery/computer/station_alert
-///obj/item/weapon/circuitboard/atmospheresiphonswitch
-// name = "Circuit board (Atmosphere Siphon Control)"
-// build_path = /obj/machinery/computer/atmosphere/siphonswitch
-/obj/item/weapon/circuitboard/air_management
- name = "Circuit board (Atmospheric Monitor)"
- build_path = /obj/machinery/computer/general_air_control
- var/frequency = 1439
-/obj/item/weapon/circuitboard/air_management/tank_control
- name = "Circuit board (Tank Control)"
- build_path = /obj/machinery/computer/general_air_control/large_tank_control
- frequency = 1441
-/obj/item/weapon/circuitboard/air_management/supermatter_core
- name = "Circuit board (Core Control)"
- build_path = /obj/machinery/computer/general_air_control/supermatter_core
- frequency = 1438
-/obj/item/weapon/circuitboard/air_management/injector_control
- name = "Circuit board (Injector Control)"
- build_path = /obj/machinery/computer/general_air_control/fuel_injection
-
-/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C)
- if (..(C))
- C.frequency = frequency
-
-/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C)
- if (..(C))
- frequency = C.frequency
-
-/obj/item/weapon/circuitboard/atmos_alert
- name = "Circuit board (Atmospheric Alert)"
- build_path = /obj/machinery/computer/atmos_alert
-/obj/item/weapon/circuitboard/pod
- name = "Circuit board (Massdriver control)"
- build_path = /obj/machinery/computer/pod
-/obj/item/weapon/circuitboard/robotics
- name = "Circuit board (Robotics Control)"
- build_path = /obj/machinery/computer/robotics
- origin_tech = "programming=3"
-/obj/item/weapon/circuitboard/drone_control
- name = "Circuit board (Drone Control)"
- build_path = /obj/machinery/computer/drone_control
- origin_tech = "programming=3"
-/obj/item/weapon/circuitboard/cloning
- name = "Circuit board (Cloning)"
- build_path = /obj/machinery/computer/cloning
- origin_tech = "programming=3;biotech=3"
-/obj/item/weapon/circuitboard/arcade
- name = "Circuit board (Arcade)"
- build_path = /obj/machinery/computer/arcade
- origin_tech = "programming=1"
-/obj/item/weapon/circuitboard/turbine_control
- name = "Circuit board (Turbine control)"
- build_path = /obj/machinery/computer/turbine_computer
-/obj/item/weapon/circuitboard/solar_control
- name = "Circuit board (Solar Control)"
- build_path = /obj/machinery/power/solar_control
- origin_tech = "programming=2;powerstorage=2"
-/obj/item/weapon/circuitboard/powermonitor
- name = "Circuit board (Power Monitor)"
- build_path = /obj/machinery/computer/power_monitor
-/obj/item/weapon/circuitboard/olddoor
- name = "Circuit board (DoorMex)"
- build_path = /obj/machinery/computer/pod/old
-/obj/item/weapon/circuitboard/syndicatedoor
- name = "Circuit board (ProComp Executive)"
- build_path = /obj/machinery/computer/pod/old/syndicate
-/obj/item/weapon/circuitboard/swfdoor
- name = "Circuit board (Magix)"
- build_path = /obj/machinery/computer/pod/old/swf
-/obj/item/weapon/circuitboard/prisoner
- name = "Circuit board (Prisoner Management)"
- build_path = /obj/machinery/computer/prisoner
-/obj/item/weapon/circuitboard/rdconsole
- name = "Circuit Board (RD Console)"
- build_path = /obj/machinery/computer/rdconsole/core
-/obj/item/weapon/circuitboard/mecha_control
- name = "Circuit Board (Exosuit Control Console)"
- build_path = /obj/machinery/computer/mecha
-/obj/item/weapon/circuitboard/rdservercontrol
- name = "Circuit Board (R&D Server Control)"
- build_path = /obj/machinery/computer/rdservercontrol
-/obj/item/weapon/circuitboard/crew
- name = "Circuit board (Crew monitoring computer)"
- build_path = /obj/machinery/computer/crew
- origin_tech = "programming=3;biotech=2;magnets=2"
-/obj/item/weapon/circuitboard/mech_bay_power_console
- name = "Circuit board (Mech Bay Power Control Console)"
- build_path = /obj/machinery/computer/mech_bay_power_console
- origin_tech = "programming=2;powerstorage=3"
-/obj/item/weapon/circuitboard/ordercomp
- name = "Circuit board (Supply ordering console)"
- build_path = /obj/machinery/computer/ordercomp
- origin_tech = "programming=2"
-
-/obj/item/weapon/circuitboard/supplycomp
- name = "Circuit board (Supply shuttle console)"
- build_path = /obj/machinery/computer/supplycomp
- origin_tech = "programming=3"
- var/contraband_enabled = 0
-
-/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
- if (..(SC))
- SC.can_order_contraband = contraband_enabled
-
-/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC)
- if (..(SC))
- contraband_enabled = SC.can_order_contraband
-
-/obj/item/weapon/circuitboard/operating
- name = "Circuit board (Operating Computer)"
- build_path = /obj/machinery/computer/operating
- origin_tech = "programming=2;biotech=2"
-/obj/item/weapon/circuitboard/comm_monitor
- name = "Circuit board (Telecommunications Monitor)"
- build_path = /obj/machinery/computer/telecomms/monitor
- origin_tech = "programming=3"
-/obj/item/weapon/circuitboard/comm_server
- name = "Circuit board (Telecommunications Server Monitor)"
- build_path = /obj/machinery/computer/telecomms/server
- origin_tech = "programming=3"
-/obj/item/weapon/circuitboard/comm_traffic
- name = "Circuitboard (Telecommunications Traffic Control)"
- build_path = /obj/machinery/computer/telecomms/traffic
- origin_tech = "programming=3"
-
-/obj/item/weapon/circuitboard/curefab
- name = "Circuit board (Cure fab)"
- build_path = /obj/machinery/computer/curer
-/obj/item/weapon/circuitboard/splicer
- name = "Circuit board (Disease Splicer)"
- build_path = /obj/machinery/computer/diseasesplicer
-/obj/item/weapon/circuitboard/mining_shuttle
- name = "Circuit board (Mining Shuttle)"
- build_path = /obj/machinery/computer/shuttle_control/mining
- origin_tech = "programming=2"
-/obj/item/weapon/circuitboard/engineering_shuttle
- name = "Circuit board (Engineering Shuttle)"
- build_path = /obj/machinery/computer/shuttle_control/engineering
- origin_tech = "programming=2"
-/obj/item/weapon/circuitboard/research_shuttle
- name = "Circuit board (Research Shuttle)"
- build_path = /obj/machinery/computer/shuttle_control/research
- origin_tech = "programming=2"
-/obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future
- name = "Circuit board (Holodeck Control)"
- build_path = /obj/machinery/computer/HolodeckControl
- origin_tech = "programming=4"
-/obj/item/weapon/circuitboard/aifixer
- name = "Circuit board (AI Integrity Restorer)"
- build_path = /obj/machinery/computer/aifixer
- origin_tech = "programming=3;biotech=2"
-/obj/item/weapon/circuitboard/area_atmos
- name = "Circuit board (Area Air Control)"
- build_path = /obj/machinery/computer/area_atmos
- origin_tech = "programming=2"
-/obj/item/weapon/circuitboard/prison_shuttle
- name = "Circuit board (Prison Shuttle)"
- build_path = /obj/machinery/computer/prison_shuttle
- origin_tech = "programming=2"
-
-
-/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/device/multitool))
- var/catastasis = src.contraband_enabled
- var/opposite_catastasis
- if(catastasis)
- opposite_catastasis = "STANDARD"
- catastasis = "BROAD"
- else
- opposite_catastasis = "BROAD"
- catastasis = "STANDARD"
-
- switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
- //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
- if("Switch to STANDARD","Switch to BROAD")
- src.contraband_enabled = !src.contraband_enabled
-
- if("Cancel")
- return
- else
- user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
- return
-
-/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/card/emag))
- if(emagged)
- user << "Circuit lock is already removed."
- return
- user << "\blue You override the circuit lock and open controls."
- emagged = 1
- locked = 0
- else if(istype(I,/obj/item/weapon/card/id))
- if(emagged)
- user << "\red Circuit lock does not respond."
- return
- if(check_access(I))
- locked = !locked
- user << "\blue You [locked ? "" : "un"]lock the circuit controls."
- else
- user << "\red Access denied."
- else if(istype(I,/obj/item/device/multitool))
- if(locked)
- user << "\red Circuit controls are locked."
- return
- var/existing_networks = list2text(network,",")
- var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
- if(!input)
- usr << "No input found please hang up and try your call again."
- return
- var/list/tempnetwork = text2list(input, ",")
- tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1)
- if(tempnetwork.len < 1)
- usr << "No network found please hang up and try your call again."
- return
- network = tempnetwork
- return
-
-/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/screwdriver))
- user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
- if(src.build_path == /obj/machinery/computer/rdconsole/core)
- src.name = "Circuit Board (RD Console - Robotics)"
- src.build_path = /obj/machinery/computer/rdconsole/robotics
- user << "\blue Access protocols set to robotics."
- else
- src.name = "Circuit Board (RD Console)"
- src.build_path = /obj/machinery/computer/rdconsole/core
- user << "\blue Access protocols set to default."
- return
-
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(0)
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 14c7847c6a..0a7f27d701 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -2,7 +2,7 @@
/obj/machinery/computer/security
- name = "Security Cameras"
+ name = "security camera monitor"
desc = "Used to access the various cameras on the station."
icon_state = "cameras"
var/obj/machinery/camera/current = null
@@ -23,6 +23,69 @@
user.reset_view(current)
return 1
+ ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
+ if(src.z > 6) return
+ if(stat & (NOPOWER|BROKEN)) return
+ if(user.stat) return
+
+ var/data[0]
+
+ data["current"] = null
+
+ var/list/L = list()
+ for (var/obj/machinery/camera/C in cameranet.cameras)
+ if(can_access_camera(C))
+ L.Add(C)
+
+ camera_sort(L)
+
+ var/cameras[0]
+ for(var/obj/machinery/camera/C in L)
+ var/cam[0]
+ cam["name"] = C.c_tag
+ cam["deact"] = !C.can_use()
+ cam["camera"] = "\ref[C]"
+ cam["x"] = C.x
+ cam["y"] = C.y
+ cam["z"] = C.z
+
+ cameras[++cameras.len] = cam
+
+ if(C == current)
+ data["current"] = cam
+
+ data["cameras"] = cameras
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800)
+
+ // adding a template with the key "mapContent" enables the map ui functionality
+ ui.add_template("mapContent", "sec_camera_map_content.tmpl")
+ // adding a template with the key "mapHeader" replaces the map header content
+ ui.add_template("mapHeader", "sec_camera_map_header.tmpl")
+
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+ Topic(href, href_list)
+ if(href_list["switchTo"])
+ if(src.z>6 || stat&(NOPOWER|BROKEN)) return
+ if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return
+ var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras
+ if(!C) return
+
+ switch_to_camera(usr, C)
+ return 1
+ else if(href_list["reset"])
+ if(src.z>6 || stat&(NOPOWER|BROKEN)) return
+ if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return
+ current = null
+ usr.check_eye(current)
+ return 1
+ else
+ . = ..()
attack_hand(var/mob/user as mob)
if (src.z > 6)
@@ -32,35 +95,7 @@
if(!isAI(user))
user.set_machine(src)
-
- var/list/L = list()
- for (var/obj/machinery/camera/C in cameranet.cameras)
- L.Add(C)
-
- camera_sort(L)
-
- var/list/D = list()
- D["Cancel"] = "Cancel"
- for(var/obj/machinery/camera/C in L)
- if(can_access_camera(C))
- D[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
-
- var/t = input(user, "Which camera should you change to?") as null|anything in D
- if(!t)
- user.unset_machine()
- return 0
-
- var/obj/machinery/camera/C = D[t]
-
- if(t == "Cancel")
- user.unset_machine()
- return 0
-
- if(C)
- switch_to_camera(user, C)
- spawn(5)
- attack_hand(user)
- return
+ ui_interact(user)
proc/can_access_camera(var/obj/machinery/camera/C)
var/list/shared_networks = src.network & C.network
@@ -79,6 +114,7 @@
if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon)))
return 0
src.current = C
+ check_eye(user)
use_power(50)
return 1
@@ -151,28 +187,28 @@
circuit = null
/obj/machinery/computer/security/wooden_tv
- name = "Security Cameras"
+ name = "security camera monitor"
desc = "An old TV hooked into the stations camera network."
icon_state = "security_det"
circuit = null
/obj/machinery/computer/security/mining
- name = "Outpost Cameras"
+ name = "outpost camera monitor"
desc = "Used to access the various cameras on the outpost."
icon_state = "miningcameras"
network = list("MINE")
circuit = /obj/item/weapon/circuitboard/security/mining
/obj/machinery/computer/security/engineering
- name = "Engineering Cameras"
+ name = "engineering camera monitor"
desc = "Used to monitor fires and breaches."
icon_state = "engineeringcameras"
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
circuit = /obj/item/weapon/circuitboard/security/engineering
/obj/machinery/computer/security/nuclear
- name = "Mission Monitor"
+ name = "head mounted camera monitor"
desc = "Used to access the built-in cameras in helmets."
icon_state = "syndicam"
network = list("NUKE")
diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm
index 76d1e0fb93..fddc863575 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/card
- name = "Identification Computer"
+ name = "\improper ID card modification console"
desc = "Terminal for programming NanoTrasen employee ID cards to access parts of the station."
icon_state = "id"
req_access = list(access_change_ids)
@@ -282,7 +282,7 @@
return 1
/obj/machinery/computer/card/centcom
- name = "CentCom Identification Computer"
+ name = "\improper CentCom ID card modification console"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index dadda5cfd7..484f39df25 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/cloning
- name = "Cloning console"
+ name = "cloning control console"
icon = 'icons/obj/computer.dmi'
icon_state = "dna"
circuit = "/obj/item/weapon/circuitboard/cloning"
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 0af60a14c7..f187957f5b 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -2,8 +2,8 @@
// The communications computer
/obj/machinery/computer/communications
- name = "Communications Console"
- desc = "This can be used for various important functions. Still under developement."
+ name = "command and communications console"
+ desc = "Used to command and control the station. Can relay long-range communications."
icon_state = "comm"
req_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/communications"
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index 5e7ce344f3..fdbaae21cc 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/crew
- name = "Crew monitoring computer"
+ name = "crew monitoring computer"
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_state = "crew"
use_power = 1
diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm
index e57aa56fe7..e0ceb33c17 100644
--- a/code/game/machinery/computer/hologram.dm
+++ b/code/game/machinery/computer/hologram.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/hologram_comp
- name = "Hologram Computer"
+ name = "hologram computer"
desc = "Rumoured to control holograms."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "holo_console0"
diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm
index b77e483203..5c970f9d67 100644
--- a/code/game/machinery/computer/law.dm
+++ b/code/game/machinery/computer/law.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/aiupload
- name = "AI Upload"
+ name = "\improper AI upload console"
desc = "Used to upload laws to the AI."
icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/aiupload"
@@ -54,7 +54,7 @@
/obj/machinery/computer/borgupload
- name = "Cyborg Upload"
+ name = "cyborg upload console"
desc = "Used to upload laws to Cyborgs."
icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/borgupload"
diff --git a/code/game/machinery/computer/lockdown.dm b/code/game/machinery/computer/lockdown.dm
index 1e81af168a..bb1fff338d 100644
--- a/code/game/machinery/computer/lockdown.dm
+++ b/code/game/machinery/computer/lockdown.dm
@@ -3,7 +3,7 @@
/obj/machinery/computer/lockdown
//for reference
- /*name = "Lockdown Control"
+ /*name = "lockdown control"
desc = "Used to control blast doors."
icon_state = "lockdown"
circuit = "/obj/item/weapon/circuitboard/lockdown"
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 1a7a8ea33a..b8fb87bc31 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/med_data//TODO:SANITY
- name = "Medical Records"
- desc = "This can be used to check medical records."
+ name = "medical records console"
+ desc = "Used to view, edit and maintain medical records."
icon_state = "medcomp"
req_one_access = list(access_medical, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/med_data"
@@ -551,4 +551,4 @@
/obj/machinery/computer/med_data/laptop
name = "Medical Laptop"
desc = "Cheap Nanotrasen Laptop."
- icon_state = "medlaptop"
\ No newline at end of file
+ icon_state = "medlaptop"
diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm
index 9a5ad3ed3b..8cdd7f10fe 100644
--- a/code/game/machinery/computer/message.dm
+++ b/code/game/machinery/computer/message.dm
@@ -1,12 +1,8 @@
-
// Allows you to monitor messages that passes the server.
-
-
-
/obj/machinery/computer/message_monitor
- name = "Message Monitor Console"
- desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages."
+ name = "messaging monitor console"
+ desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and request console messages."
icon_state = "comm_logs"
var/hack_icon = "comm_logsc"
var/normal_icon = "comm_logs"
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index 042555fe00..f707f8ffb7 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/pod
- name = "Pod Launch Control"
- desc = "A controll for launching pods. Some people prefer firing Mechas."
+ name = "pod launch control console"
+ desc = "A control console for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic"
circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index 56f093276a..cdbdfe048f 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/prisoner
- name = "Prisoner Management"
+ name = "prisoner management console"
icon = 'icons/obj/computer.dmi'
icon_state = "explosive"
req_access = list(access_armory)
@@ -100,5 +100,3 @@
src.add_fingerprint(usr)
src.updateUsrDialog()
return
-
-
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index f1c57104cc..84ba06fa02 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -11,7 +11,7 @@ var/prison_shuttle_time = 0
var/prison_shuttle_timeleft = 0
/obj/machinery/computer/prison_shuttle
- name = "Prison Shuttle Console"
+ name = "prison shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
req_access = list(access_security)
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index 43e65b1273..b429c70306 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -1,9 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
-
/obj/machinery/computer/robotics
- name = "Robotics Control"
- desc = "Used to remotely lockdown or detonate linked Cyborgs."
+ name = "robotics control console"
+ desc = "Used to remotely lockdown or detonate linked cyborgs."
icon = 'icons/obj/computer.dmi'
icon_state = "robot"
req_access = list(access_robotics)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 76c9790c5d..e14c277981 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/secure_data//TODO:SANITY
- name = "Security Records"
- desc = "Used to view and edit personnel's security records"
+ name = "security records console"
+ desc = "Used to view, edit and maintain security records"
icon_state = "security"
req_one_access = list(access_security, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/secure_data"
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 98c75daf57..aa573e39aa 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/skills//TODO:SANITY
- name = "Employment Records"
- desc = "Used to view personnel's employment records"
+ name = "employment records console"
+ desc = "Used to view, edit and maintain employment records."
icon_state = "medlaptop"
req_one_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/skills"
diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm
index ba44553b16..bc1f3427ee 100644
--- a/code/game/machinery/computer/specops_shuttle.dm
+++ b/code/game/machinery/computer/specops_shuttle.dm
@@ -12,7 +12,7 @@ var/specops_shuttle_time = 0
var/specops_shuttle_timeleft = 0
/obj/machinery/computer/specops_shuttle
- name = "Spec. Ops. Shuttle Console"
+ name = "special operations shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
req_access = list(access_cent_specops)
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index 35e80f54e7..028be6e3a3 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -1,6 +1,6 @@
/obj/machinery/computer/station_alert
- name = "Station Alert Computer"
+ name = "Station Alert Console"
desc = "Used to access the station's automated alert system."
icon_state = "alert:0"
circuit = "/obj/item/weapon/circuitboard/stationalert"
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
new file mode 100644
index 0000000000..fe109c4771
--- /dev/null
+++ b/code/game/machinery/computer/supply.dm
@@ -0,0 +1,416 @@
+/obj/machinery/computer/supplycomp
+ name = "supply control console"
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "supply"
+ req_access = list(access_cargo)
+ circuit = "/obj/item/weapon/circuitboard/supplycomp"
+ var/temp = null
+ var/reqtime = 0 //Cooldown for requisitions - Quarxink
+ var/hacked = 0
+ var/can_order_contraband = 0
+ var/last_viewed_group = "categories"
+
+/obj/machinery/computer/ordercomp
+ name = "supply ordering console"
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "request"
+ circuit = "/obj/item/weapon/circuitboard/ordercomp"
+ var/temp = null
+ var/reqtime = 0 //Cooldown for requisitions - Quarxink
+ var/last_viewed_group = "categories"
+
+/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
+/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+ user.set_machine(src)
+ var/dat
+ if(temp)
+ dat = temp
+ else
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ if (shuttle)
+ dat += {"Supply shuttle
+ Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
+ Supply points: [supply_controller.points]
+ \nRequest items
+ View approved orders
+ View requests
+ Close "}
+
+ user << browse(dat, "window=computer;size=575x450")
+ onclose(user, "computer")
+ return
+
+/obj/machinery/computer/ordercomp/Topic(href, href_list)
+ if(..())
+ return
+
+ if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) )
+ usr.set_machine(src)
+
+ if(href_list["order"])
+ if(href_list["order"] == "categories")
+ //all_supply_groups
+ //Request what?
+ last_viewed_group = "categories"
+ temp = "Supply points: [supply_controller.points] "
+ temp += "Main Menu "
+ temp += "Select a category "
+ for(var/supply_group_name in all_supply_groups )
+ temp += "[supply_group_name] "
+ else
+ last_viewed_group = href_list["order"]
+ temp = "Supply points: [supply_controller.points] "
+ temp += "Back to all categories "
+ temp += "Request from: [last_viewed_group] "
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
+ temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
+
+ else if (href_list["doorder"])
+ if(world.time < reqtime)
+ for(var/mob/V in hearers(src))
+ V.show_message("[src] 's monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
+ return
+
+ //Find the correct supply_pack datum
+ var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
+ if(!istype(P)) return
+
+ var/timeout = world.time + 600
+ var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
+ if(world.time > timeout) return
+ if(!reason) return
+
+ var/idname = "*None Provided*"
+ var/idrank = "*None Provided*"
+ if(ishuman(usr))
+ var/mob/living/carbon/human/H = usr
+ idname = H.get_authentification_name()
+ idrank = H.get_assignment()
+ else if(issilicon(usr))
+ idname = usr.real_name
+
+ supply_controller.ordernum++
+ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
+ reqform.name = "Requisition Form - [P.name]"
+ reqform.info += "[station_name] Supply Requisition Form "
+ reqform.info += "INDEX: #[supply_controller.ordernum] "
+ reqform.info += "REQUESTED BY: [idname] "
+ reqform.info += "RANK: [idrank] "
+ reqform.info += "REASON: [reason] "
+ reqform.info += "SUPPLY CRATE TYPE: [P.name] "
+ reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
+ reqform.info += "CONTENTS: "
+ reqform.info += P.manifest
+ reqform.info += " "
+ reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION: "
+
+ reqform.update_icon() //Fix for appearing blank when printed.
+ reqtime = (world.time + 5) % 1e5
+
+ //make our supply_order datum
+ var/datum/supply_order/O = new /datum/supply_order()
+ O.ordernum = supply_controller.ordernum
+ O.object = P
+ O.orderedby = idname
+ supply_controller.requestlist += O
+
+ temp = "Thanks for your request. The cargo team will process it as soon as possible. "
+ temp += "Back Main Menu "
+
+ else if (href_list["vieworders"])
+ temp = "Current approved orders: "
+ for(var/S in supply_controller.shoppinglist)
+ var/datum/supply_order/SO = S
+ temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""] "
+ temp += "OK "
+
+ else if (href_list["viewrequests"])
+ temp = "Current requests: "
+ for(var/S in supply_controller.requestlist)
+ var/datum/supply_order/SO = S
+ temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] "
+ temp += "OK "
+
+ else if (href_list["mainmenu"])
+ temp = null
+
+ add_fingerprint(usr)
+ updateUsrDialog()
+ return
+
+/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob)
+ if(!allowed(user))
+ user << "\red Access Denied."
+ return
+
+ if(..())
+ return
+ user.set_machine(src)
+ post_signal("supply")
+ var/dat
+ if (temp)
+ dat = temp
+ else
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ if (shuttle)
+ dat += "Supply shuttle "
+ dat += "\nLocation: "
+ if (shuttle.has_arrive_time())
+ dat += "In transit ([shuttle.eta_minutes()] Mins.) "
+ else
+ if (shuttle.at_station())
+ if (shuttle.docking_controller)
+ switch(shuttle.docking_controller.get_docking_status())
+ if ("docked") dat += "Docked at station "
+ if ("undocked") dat += "Undocked from station "
+ if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch " : ""] "
+ if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch " : ""] "
+ else
+ dat += "Station "
+
+ if (shuttle.can_launch())
+ dat += "Send away "
+ else if (shuttle.can_cancel())
+ dat += "Cancel launch "
+ else
+ dat += "*Shuttle is busy*"
+ dat += " \n "
+ else
+ dat += "Away "
+ if (shuttle.can_launch())
+ dat += "Request supply shuttle "
+ else if (shuttle.can_cancel())
+ dat += "Cancel request "
+ else
+ dat += "*Shuttle is busy*"
+ dat += " \n "
+
+
+ dat += {" \nSupply points: [supply_controller.points] \n
+ \nOrder items \n
+ \nView requests \n
+ \nView orders \n
+ \nClose "}
+
+
+ user << browse(dat, "window=computer;size=575x450")
+ onclose(user, "computer")
+ return
+
+/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
+ if(istype(I,/obj/item/weapon/card/emag) && !hacked)
+ user << "\blue Special supplies unlocked."
+ hacked = 1
+ return
+ else
+ ..()
+ return
+
+/obj/machinery/computer/supplycomp/Topic(href, href_list)
+ if(!supply_controller)
+ world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow."
+ return
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ if (!shuttle)
+ world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow."
+ return
+ if(..())
+ return
+
+ if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) )
+ usr.set_machine(src)
+
+ //Calling the shuttle
+ if(href_list["send"])
+ if(shuttle.at_station())
+ if (shuttle.forbidden_atoms_check())
+ temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.OK "
+ else
+ shuttle.launch(src)
+ temp = "Initiating launch sequence. \[Force Launch \]OK "
+ else
+ shuttle.launch(src)
+ temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.OK "
+ post_signal("supply")
+
+ if (href_list["force_send"])
+ shuttle.force_launch(src)
+
+ if (href_list["cancel_send"])
+ shuttle.cancel_launch(src)
+
+ else if (href_list["order"])
+ //if(!shuttle.idle()) return //this shouldn't be necessary it seems
+ if(href_list["order"] == "categories")
+ //all_supply_groups
+ //Request what?
+ last_viewed_group = "categories"
+ temp = "Supply points: [supply_controller.points] "
+ temp += "Main Menu "
+ temp += "Select a category "
+ for(var/supply_group_name in all_supply_groups )
+ temp += "[supply_group_name] "
+ else
+ last_viewed_group = href_list["order"]
+ temp = "Supply points: [supply_controller.points] "
+ temp += "Back to all categories "
+ temp += "Request from: [last_viewed_group] "
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
+ temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
+
+ /*temp = "Supply points: [supply_controller.points] Request what? "
+
+ for(var/supply_name in supply_controller.supply_packs )
+ var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
+ if(N.hidden && !hacked) continue
+ if(N.contraband && !can_order_contraband) continue
+ temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
+ temp += "OK "*/
+
+ else if (href_list["doorder"])
+ if(world.time < reqtime)
+ for(var/mob/V in hearers(src))
+ V.show_message("[src] 's monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
+ return
+
+ //Find the correct supply_pack datum
+ var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
+ if(!istype(P)) return
+
+ var/timeout = world.time + 600
+ var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
+ if(world.time > timeout) return
+ if(!reason) return
+
+ var/idname = "*None Provided*"
+ var/idrank = "*None Provided*"
+ if(ishuman(usr))
+ var/mob/living/carbon/human/H = usr
+ idname = H.get_authentification_name()
+ idrank = H.get_assignment()
+ else if(issilicon(usr))
+ idname = usr.real_name
+
+ supply_controller.ordernum++
+ var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
+ reqform.name = "Requisition Form - [P.name]"
+ reqform.info += "[station_name] Supply Requisition Form "
+ reqform.info += "INDEX: #[supply_controller.ordernum] "
+ reqform.info += "REQUESTED BY: [idname] "
+ reqform.info += "RANK: [idrank] "
+ reqform.info += "REASON: [reason] "
+ reqform.info += "SUPPLY CRATE TYPE: [P.name] "
+ reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
+ reqform.info += "CONTENTS: "
+ reqform.info += P.manifest
+ reqform.info += " "
+ reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION: "
+
+ reqform.update_icon() //Fix for appearing blank when printed.
+ reqtime = (world.time + 5) % 1e5
+
+ //make our supply_order datum
+ var/datum/supply_order/O = new /datum/supply_order()
+ O.ordernum = supply_controller.ordernum
+ O.object = P
+ O.orderedby = idname
+ supply_controller.requestlist += O
+
+ temp = "Order request placed. "
+ temp += "Back | Main Menu | Authorize Order "
+
+ else if(href_list["confirmorder"])
+ //Find the correct supply_order datum
+ var/ordernum = text2num(href_list["confirmorder"])
+ var/datum/supply_order/O
+ var/datum/supply_packs/P
+ temp = "Invalid Request"
+ for(var/i=1, i<=supply_controller.requestlist.len, i++)
+ var/datum/supply_order/SO = supply_controller.requestlist[i]
+ if(SO.ordernum == ordernum)
+ O = SO
+ P = O.object
+ if(supply_controller.points >= P.cost)
+ supply_controller.requestlist.Cut(i,i+1)
+ supply_controller.points -= P.cost
+ supply_controller.shoppinglist += O
+ temp = "Thanks for your order. "
+ temp += "Back Main Menu "
+ else
+ temp = "Not enough supply points. "
+ temp += "Back Main Menu "
+ break
+
+ else if (href_list["vieworders"])
+ temp = "Current approved orders: "
+ for(var/S in supply_controller.shoppinglist)
+ var/datum/supply_order/SO = S
+ temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] "// (Cancel) "
+ temp += "OK "
+/*
+ else if (href_list["cancelorder"])
+ var/datum/supply_order/remove_supply = href_list["cancelorder"]
+ supply_shuttle_shoppinglist -= remove_supply
+ supply_shuttle_points += remove_supply.object.cost
+ temp += "Canceled: [remove_supply.object.name] "
+
+ for(var/S in supply_shuttle_shoppinglist)
+ var/datum/supply_order/SO = S
+ temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] (Cancel) "
+ temp += "OK "
+*/
+ else if (href_list["viewrequests"])
+ temp = "Current requests: "
+ for(var/S in supply_controller.requestlist)
+ var/datum/supply_order/SO = S
+ temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove "
+
+ temp += "Clear list "
+ temp += "OK "
+
+ else if (href_list["rreq"])
+ var/ordernum = text2num(href_list["rreq"])
+ temp = "Invalid Request. "
+ for(var/i=1, i<=supply_controller.requestlist.len, i++)
+ var/datum/supply_order/SO = supply_controller.requestlist[i]
+ if(SO.ordernum == ordernum)
+ supply_controller.requestlist.Cut(i,i+1)
+ temp = "Request removed. "
+ break
+ temp += "Back Main Menu "
+
+ else if (href_list["clearreq"])
+ supply_controller.requestlist.Cut()
+ temp = "List cleared. "
+ temp += "OK "
+
+ else if (href_list["mainmenu"])
+ temp = null
+
+ add_fingerprint(usr)
+ updateUsrDialog()
+ return
+
+/obj/machinery/computer/supplycomp/proc/post_signal(var/command)
+
+ var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
+
+ if(!frequency) return
+
+ var/datum/signal/status_signal = new
+ status_signal.source = src
+ status_signal.transmission_method = 1
+ status_signal.data["command"] = command
+
+ frequency.post_signal(src, status_signal)
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index 970a68b64a..eb8acc83f5 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -11,7 +11,7 @@ var/syndicate_elite_shuttle_time = 0
var/syndicate_elite_shuttle_timeleft = 0
/obj/machinery/computer/syndicate_elite_shuttle
- name = "Elite Syndicate Squad Shuttle Console"
+ name = "elite syndicate squad shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "syndishuttle"
req_access = list(access_cent_specops)
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 03fa91212f..0f906ad4b2 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -1,5 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/
+
/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
name = "machine frame"
icon = 'icons/obj/stock_parts.dmi'
@@ -113,7 +115,7 @@
break
if(component_check)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
- var/obj/machinery/new_machine = new src.circuit.build_path(src.loc)
+ var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
new_machine.component_parts.Cut()
src.circuit.construct(new_machine)
for(var/obj/O in src)
@@ -154,260 +156,3 @@
user << desc
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil))
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, power cells.
-Note: Once everything is added to the public areas, will add materials 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 = "magnets=2;engineering=2;programming=2"
- frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
- req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1)
-
-/obj/item/weapon/circuitboard/autolathe
- name = "Circuit board (Autolathe)"
- build_path = "/obj/machinery/autolathe"
- board_type = "machine"
- origin_tech = "engineering=2;programming=2"
- frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
- req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 3,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
-
-/obj/item/weapon/circuitboard/protolathe
- name = "Circuit board (Protolathe)"
- build_path = "/obj/machinery/r_n_d/protolathe"
- board_type = "machine"
- origin_tech = "engineering=2;programming=2"
- frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
- req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
-
-
-/obj/item/weapon/circuitboard/circuit_imprinter
- name = "Circuit board (Circuit Imprinter)"
- build_path = "/obj/machinery/r_n_d/circuit_imprinter"
- board_type = "machine"
- origin_tech = "engineering=2;programming=2"
- frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
- req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
-
-/obj/item/weapon/circuitboard/pacman
- name = "Circuit Board (PACMAN-type Generator)"
- build_path = "/obj/machinery/power/port_gen/pacman"
- board_type = "machine"
- origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
- frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
- req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/capacitor" = 1)
-
-/obj/item/weapon/circuitboard/pacman/super
- name = "Circuit Board (SUPERPACMAN-type Generator)"
- build_path = "/obj/machinery/power/port_gen/pacman/super"
- origin_tech = "programming=3;powerstorage=4;engineering=4"
-
-/obj/item/weapon/circuitboard/pacman/mrs
- name = "Circuit Board (MRSPACMAN-type Generator)"
- build_path = "/obj/machinery/power/port_gen/pacman/mrs"
- origin_tech = "programming=3;powerstorage=5;engineering=5"
-
-obj/item/weapon/circuitboard/rdserver
- name = "Circuit Board (R&D Server)"
- build_path = "/obj/machinery/r_n_d/server"
- board_type = "machine"
- origin_tech = "programming=3"
- frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
- req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 1)
-
-/obj/item/weapon/circuitboard/mechfab
- name = "Circuit board (Exosuit Fabricator)"
- build_path = "/obj/machinery/mecha_part_fabricator"
- board_type = "machine"
- origin_tech = "programming=3;engineering=3"
- frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
- req_components = list(
- "/obj/item/weapon/stock_parts/matter_bin" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
-
-/obj/item/weapon/circuitboard/clonepod
- name = "Circuit board (Clone Pod)"
- build_path = "/obj/machinery/clonepod"
- board_type = "machine"
- origin_tech = "programming=3;biotech=3"
- frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen."
- req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/scanning_module" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/stock_parts/console_screen" = 1)
-
-/obj/item/weapon/circuitboard/clonescanner
- name = "Circuit board (Cloning Scanner)"
- build_path = "/obj/machinery/dna_scannernew"
- board_type = "machine"
- origin_tech = "programming=2;biotech=2"
- frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
- req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 1,
- "/obj/item/weapon/stock_parts/micro_laser" = 1,
- "/obj/item/weapon/stock_parts/console_screen" = 1,
- "/obj/item/stack/cable_coil" = 2,)
-
-/obj/item/weapon/circuitboard/unary_atmos
- board_type = "machine"
- var/machine_dir = SOUTH
- var/init_dirs = SOUTH
-
-/obj/item/weapon/circuitboard/unary_atmos/attackby(obj/item/I as obj, mob/user as mob)
- if(istype(I,/obj/item/weapon/screwdriver))
- machine_dir = turn(machine_dir, 90)
- init_dirs = machine_dir
- user.visible_message("\blue \The [user] adjusts the jumper on the [src]'s port configuration pins.", "\blue You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].")
- return
-
-/obj/item/weapon/circuitboard/unary_atmos/examine(mob/user)
- ..(user)
- user << "The jumper is connecting the [dir2text(machine_dir)] pins."
-
-/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
- //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
- U.set_dir(src.machine_dir)
- U.initialize_directions = src.init_dirs
- U.initialize()
- U.build_network()
- if (U.node)
- U.node.initialize()
- U.node.build_network()
-
-/obj/item/weapon/circuitboard/unary_atmos/heater
- name = "Circuit Board (Gas Heating System)"
- build_path = "/obj/machinery/atmospherics/unary/heater"
- origin_tech = "powerstorage=2;engineering=1"
- frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors."
- req_components = list(
- "/obj/item/stack/cable_coil" = 5,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor" = 2)
-
-/obj/item/weapon/circuitboard/unary_atmos/cooler
- name = "Circuit Board (Gas Cooling System)"
- build_path = "/obj/machinery/atmospherics/unary/freezer"
- origin_tech = "magnets=2;engineering=2"
- frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors."
- req_components = list(
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor" = 2,
- "/obj/item/weapon/stock_parts/manipulator" = 1)
-
-// Telecomms circuit boards:
-
-/obj/item/weapon/circuitboard/telecomms/receiver
- name = "Circuit Board (Subspace Receiver)"
- build_path = "/obj/machinery/telecomms/receiver"
- board_type = "machine"
- origin_tech = "programming=4;engineering=3;bluespace=2"
- frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
- req_components = list(
- "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/weapon/stock_parts/micro_laser" = 1)
-
-/obj/item/weapon/circuitboard/telecomms/hub
- name = "Circuit Board (Hub Mainframe)"
- build_path = "/obj/machinery/telecomms/hub"
- board_type = "machine"
- origin_tech = "programming=4;engineering=4"
- frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/filter" = 2)
-
-/obj/item/weapon/circuitboard/telecomms/relay
- name = "Circuit Board (Relay Mainframe)"
- build_path = "/obj/machinery/telecomms/relay"
- board_type = "machine"
- origin_tech = "programming=3;engineering=4;bluespace=3"
- frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/filter" = 2)
-
-/obj/item/weapon/circuitboard/telecomms/bus
- name = "Circuit Board (Bus Mainframe)"
- build_path = "/obj/machinery/telecomms/bus"
- board_type = "machine"
- origin_tech = "programming=4;engineering=4"
- frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1)
-
-/obj/item/weapon/circuitboard/telecomms/processor
- name = "Circuit Board (Processor Unit)"
- build_path = "/obj/machinery/telecomms/processor"
- board_type = "machine"
- origin_tech = "programming=4;engineering=4"
- frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 3,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/subspace/treatment" = 2,
- "/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
- "/obj/item/stack/cable_coil" = 2,
- "/obj/item/weapon/stock_parts/subspace/amplifier" = 1)
-
-/obj/item/weapon/circuitboard/telecomms/server
- name = "Circuit Board (Telecommunication Server)"
- build_path = "/obj/machinery/telecomms/server"
- board_type = "machine"
- origin_tech = "programming=4;engineering=4"
- frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1)
-
-/obj/item/weapon/circuitboard/telecomms/broadcaster
- name = "Circuit Board (Subspace Broadcaster)"
- build_path = "/obj/machinery/telecomms/broadcaster"
- board_type = "machine"
- origin_tech = "programming=4;engineering=4;bluespace=2"
- frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
- req_components = list(
- "/obj/item/weapon/stock_parts/manipulator" = 2,
- "/obj/item/stack/cable_coil" = 1,
- "/obj/item/weapon/stock_parts/subspace/filter" = 1,
- "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
- "/obj/item/weapon/stock_parts/micro_laser/high" = 2)
-
-
-
-
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index d1e3887e4b..4fc82ebf4a 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -381,7 +381,7 @@
// Delete the mob.
del(occupant)
occupant = null
-
+ name = initial(name)
return
@@ -442,7 +442,6 @@
src.add_fingerprint(M)
/obj/machinery/cryopod/verb/eject()
-
set name = "Eject Pod"
set category = "Object"
set src in oview(1)
@@ -464,6 +463,8 @@
src.go_out()
add_fingerprint(usr)
+
+ name = initial(name)
return
/obj/machinery/cryopod/verb/move_inside()
@@ -511,6 +512,7 @@
time_entered = world.time
src.add_fingerprint(usr)
+ name = "[name] ([usr.name])"
return
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index e595cea933..49252eaac6 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -913,9 +913,9 @@ About the new airlock wires panel:
if(operating == -1)
new /obj/item/weapon/circuitboard/broken(src.loc)
operating = 0
- else
+ else
if (!electronics) create_electronics()
-
+
electronics.loc = src.loc
electronics = null
@@ -1059,13 +1059,17 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null)
..()
+ //High-sec airlocks are much harder to completely break by emitters.
+ if(secured_wires)
+ emitter_resistance *= 3
+
//if assembly is given, create the new door from the assembly
if (assembly)
assembly_type = assembly.type
-
+
electronics = assembly.electronics
electronics.loc = src
-
+
//update the door's access to match the electronics'
secured_wires = electronics.secure
if(electronics.one_access)
@@ -1073,7 +1077,7 @@ About the new airlock wires panel:
req_one_access = src.electronics.conf_access
else
req_access = src.electronics.conf_access
-
+
//get the name from the assembly
if(assembly.created_name)
name = assembly.created_name
@@ -1093,8 +1097,8 @@ About the new airlock wires panel:
src.closeOther = A
break
-// Most doors will never be deconstructed over the course of a round,
-// so as an optimization defer the creation of electronics until
+// Most doors will never be deconstructed over the course of a round,
+// so as an optimization defer the creation of electronics until
// the airlock is deconstructed
/obj/machinery/door/airlock/proc/create_electronics()
//create new electronics
@@ -1102,7 +1106,7 @@ About the new airlock wires panel:
src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc )
else
src.electronics = new/obj/item/weapon/airlock_electronics( src.loc )
-
+
//update the electronics to match the door's access
if(!src.req_access)
src.check_access()
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index bc8719060f..c3ab77d74a 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -25,6 +25,8 @@
var/air_properties_vary_with_direction = 0
var/maxhealth = 300
var/health
+ var/emitter_hits = 0 // For use when tracking amount of emitter hits taken.
+ var/emitter_resistance = 10 // Amount of emitter hits doors whistand
var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon
var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon
@@ -133,9 +135,22 @@
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
return
+ // Emitter Blasts - these will eventually completely destroy the door, given enough time.
+ if (istype(Proj, /obj/item/projectile/beam/emitter))
+ if(health > 0)
+ Proj.damage /= 4
+ else
+ emitter_hits ++
+ if(emitter_hits >= emitter_resistance)
+ visible_message("\red [src.name] breaks apart! ", 1)
+ new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes!
+ del(src)
+
if(Proj.damage)
take_damage(Proj.damage)
+
+
/obj/machinery/door/hitby(AM as mob|obj)
..()
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index 474e3b66e2..ae4a147f70 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -2,6 +2,15 @@
/obj/machinery/door/airlock/multi_tile
width = 2
+/obj/machinery/door/airlock/multi_tile/New()
+ ..()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+
/obj/machinery/door/airlock/multi_tile/glass
name = "Glass Airlock"
icon = 'icons/obj/doors/Door2x1glass.dmi'
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 4f5e416d33..9ab7dabb2d 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -6,6 +6,7 @@
var/id = 1.0
dir = 1
explosion_resistance = 25
+ emitter_resistance = 50 // Lots of emitter blasts, it's blast door after all.
/obj/machinery/door/poddoor/New()
. = ..()
@@ -28,6 +29,7 @@
icon_state = "pdoor0"
return
+
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user)
if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))
diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm
index b2f3020879..b70eaffa4a 100644
--- a/code/game/machinery/doors/shutters.dm
+++ b/code/game/machinery/doors/shutters.dm
@@ -24,6 +24,13 @@
return
return
+/obj/machinery/door/poddoor/shutters/update_icon()
+ if(density)
+ icon_state = "shutter1"
+ else
+ icon_state = "shutter0"
+ return
+
/obj/machinery/door/poddoor/shutters/open()
if(operating == 1) //doors can still open when emag-disabled
return
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 66708db7f7..68009eec60 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -81,13 +81,28 @@ var/const/HOLOPAD_MODE = 0
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
-/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb)
+/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb, datum/language/speaking)
if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something.
- if(!master.say_understands(M))//The AI will be able to understand most mobs talking through the holopad.
- text = stars(text)
+ if(!master.say_understands(M, speaking))//The AI will be able to understand most mobs talking through the holopad.
+ if(speaking)
+ text = speaking.scramble(text)
+ else
+ text = stars(text)
var/name_used = M.GetVoice()
//This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only.
- var/rendered = "Holopad received, [name_used] [verb], \"[text]\" "
+ var/rendered
+ if(speaking)
+ rendered = "Holopad received, [name_used] [speaking.format_message(text, verb)] "
+ else
+ rendered = "Holopad received, [name_used] [verb], \"[text]\" "
+ master.show_message(rendered, 2)
+ return
+
+/obj/machinery/hologram/holopad/see_emote(mob/living/M, text)
+ if(M && hologram && master)
+ //var/name_used = M.GetVoice()
+ var/rendered = "Holopad received, [text] "
+ //The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly.
master.show_message(rendered, 2)
return
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index a005d0e9d4..52c1bdc380 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -1,15 +1,19 @@
/obj/machinery/gibber
- name = "Gibber"
+ name = "gibber"
desc = "The name isn't descriptive enough?"
icon = 'icons/obj/kitchen.dmi'
icon_state = "grinder"
density = 1
anchored = 1
+ req_access = list(access_kitchen,access_morgue)
+
var/operating = 0 //Is it on?
var/dirty = 0 // Does it need cleaning?
- var/gibtime = 40 // Time from starting until meat appears
var/mob/living/occupant // Mob who has been put inside
+ var/gib_time = 40 // Time from starting until meat appears
+ var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
+
use_power = 1
idle_power_usage = 2
active_power_usage = 500
@@ -18,31 +22,32 @@
/obj/machinery/gibber/autogibber
var/turf/input_plate
- New()
- ..()
- spawn(5)
- for(var/i in cardinal)
- var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
- if(input_obj)
- if(isturf(input_obj.loc))
- input_plate = input_obj.loc
- del(input_obj)
- break
+/obj/machinery/gibber/autogibber/New()
+ ..()
+ spawn(5)
+ for(var/i in cardinal)
+ var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
+ if(input_obj)
+ if(isturf(input_obj.loc))
+ input_plate = input_obj.loc
+ gib_throw_dir = i
+ del(input_obj)
+ break
- if(!input_plate)
- log_misc("a [src] didn't find an input plate.")
- return
+ if(!input_plate)
+ log_misc("a [src] didn't find an input plate.")
+ return
- Bumped(var/atom/A)
- if(!input_plate) return
+/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
+ if(!input_plate) return
- if(ismob(A))
- var/mob/M = A
+ if(ismob(A))
+ var/mob/M = A
- if(M.loc == input_plate
- )
- M.loc = src
- M.gib()
+ if(M.loc == input_plate
+ )
+ M.loc = src
+ M.gib()
/obj/machinery/gibber/New()
@@ -70,43 +75,74 @@
if(stat & (NOPOWER|BROKEN))
return
if(operating)
- user << "\red It's locked and running"
+ user << "The gibber is locked and running, wait for it to finish. "
return
else
src.startgibbing(user)
-/obj/machinery/gibber/attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
- if(src.occupant)
- user << "\red The gibber is full, empty it first!"
+/obj/machinery/gibber/examine()
+ ..()
+ usr << "The safety guard is [emagged ? "disabled " : "enabled"]."
+
+/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
+
+ if(istype(W,/obj/item/weapon/card))
+ if(!allowed(user) && !istype(W,/obj/item/weapon/card/emag))
+ user << "Access denied. "
+ return
+ emagged = !emagged
+ user << "You [emagged ? "disable" : "enable"] the gibber safety guard. "
return
- if( !(istype(G, /obj/item/weapon/grab)) )
- user << "\red This item is not suitable for the gibber!"
- return
+ var/obj/item/weapon/grab/G = W
- if( !(istype(G.affecting, /mob/living/carbon)) && !(istype(G.affecting, /mob/living/simple_animal)) )
- user << "\red This item is not suitable for the gibber!"
- return
+ if(!istype(G))
+ return ..()
if(G.state < 2)
- user << "\red You need a better grip to do that!"
+ user << "You need a better grip to do that! "
return
- if(G.affecting.abiotic(1))
- user << "\red Subject may not have abiotic items on."
+ move_into_gibber(user,G.affecting)
+ // Grab() process should clean up the grab item, no need to del it.
+
+/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_gibber(user,target)
+
+/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
+
+ if(src.occupant)
+ user << "The gibber is full, empty it first! "
return
- user.visible_message("\red [user] starts to put [G.affecting] into the gibber!")
+ if(operating)
+ user << "The gibber is locked and running, wait for it to finish. "
+ return
+
+ if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) )
+ user << "This is not suitable for the gibber! "
+ return
+
+ if(istype(victim,/mob/living/carbon/human) && !emagged)
+ user << "The gibber safety guard is engaged! "
+ return
+
+
+ if(victim.abiotic(1))
+ user << "Subject may not have abiotic items on. "
+ return
+
+ user.visible_message("\red [user] starts to put [victim] into the gibber!")
src.add_fingerprint(user)
- if(do_after(user, 30) && G && G.affecting && !occupant)
- user.visible_message("\red [user] stuffs [G.affecting] into the gibber!")
- var/mob/M = G.affecting
- if(M.client)
- M.client.perspective = EYE_PERSPECTIVE
- M.client.eye = src
- M.loc = src
- src.occupant = M
- del(G)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("\red [user] stuffs [victim] into the gibber!")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.loc = src
+ src.occupant = victim
update_icon()
/obj/machinery/gibber/verb/eject()
@@ -121,7 +157,7 @@
return
/obj/machinery/gibber/proc/go_out()
- if (!src.occupant)
+ if(operating || !src.occupant)
return
for(var/obj/O in src)
O.loc = src.loc
@@ -138,86 +174,67 @@
if(src.operating)
return
if(!src.occupant)
- visible_message("\red You hear a loud metallic grinding sound.")
+ visible_message("You hear a loud metallic grinding sound. ")
return
use_power(1000)
- visible_message("\red You hear a loud squelchy grinding sound.")
+ visible_message("You hear a loud squelchy grinding sound. ")
src.operating = 1
update_icon()
- var/totalslabs = 3
- var/obj/item/weapon/reagent_containers/food/snacks/meat/allmeat[totalslabs]
+ var/slab_name = occupant.name
+ var/slab_count = 3
+ var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/slab_nutrition = src.occupant.nutrition / 15
- if( istype(src.occupant, /mob/living/carbon/human/) )
- var/sourcename = src.occupant.real_name
- var/sourcejob = src.occupant.job
- var/sourcenutriment = src.occupant.nutrition / 15
- var/sourcetotalreagents = src.occupant.reagents.total_volume
+ // Some mobs have specific meat item types.
+ if(istype(src.occupant,/mob/living/simple_animal))
+ var/mob/living/simple_animal/critter = src.occupant
+ if(critter.meat_amount)
+ slab_count = critter.meat_amount
+ if(critter.meat_type)
+ slab_type = critter.meat_type
+ else if(istype(src.occupant,/mob/living/carbon/human))
+ slab_name = src.occupant.real_name
+ slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
+ else if(istype(src.occupant, /mob/living/carbon/monkey))
+ slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
- for(var/i=1 to totalslabs)
- var/obj/item/weapon/reagent_containers/food/snacks/meat/human/newmeat = new
- newmeat.name = sourcename + newmeat.name
- newmeat.subjectname = sourcename
- newmeat.subjectjob = sourcejob
- newmeat.reagents.add_reagent("nutriment", sourcenutriment / totalslabs) // Thehehe. Fat guys go first
- src.occupant.reagents.trans_to(newmeat, round (sourcetotalreagents / totalslabs, 1)) // Transfer all the reagents from the
- allmeat[i] = newmeat
+ // Small mobs don't give as much nutrition.
+ if(src.occupant.small)
+ slab_nutrition *= 0.5
+ slab_nutrition /= slab_count
- src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey] " //One shall not simply gib a mob unnoticed!
- user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey] "
- msg_admin_attack("[user.name] ([user.ckey]) gibbed [src.occupant] ([src.occupant.ckey]) (JMP )")
+ for(var/i=1 to slab_count)
+ var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src)
+ new_meat.name = "[slab_name] [new_meat.name]"
+ new_meat.reagents.add_reagent("nutriment",slab_nutrition)
- src.occupant.death(1)
- src.occupant.ghostize()
+ if(src.occupant.reagents)
+ src.occupant.reagents.trans_to(new_meat, round(occupant.reagents.total_volume/slab_count,1))
- else if( istype(src.occupant, /mob/living/carbon/) || istype(src.occupant, /mob/living/simple_animal/ ) )
+ src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey] " //One shall not simply gib a mob unnoticed!
+ user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey] "
+ msg_admin_attack("[user.name] ([user.ckey]) gibbed [src.occupant] ([src.occupant.ckey]) (JMP )")
- var/sourcename = src.occupant.name
- var/sourcenutriment = src.occupant.nutrition / 15
- var/sourcetotalreagents = 0
+ src.occupant.ghostize()
- if( istype(src.occupant, /mob/living/carbon/monkey/) || istype(src.occupant, /mob/living/carbon/alien/) ) // why are you gibbing aliens? oh well
- totalslabs = 3
- sourcetotalreagents = src.occupant.reagents.total_volume
- else if( istype(src.occupant, /mob/living/simple_animal/cow) || istype(src.occupant, /mob/living/simple_animal/hostile/bear) )
- totalslabs = 2
- else
- totalslabs = 1
- sourcenutriment = src.occupant.nutrition / 30 // small animals don't have as much nutrition
+ spawn(gib_time)
- for(var/i=1 to totalslabs)
- var/obj/item/weapon/reagent_containers/food/snacks/meat/newmeat = new
- newmeat.name = "[sourcename]-[newmeat.name]"
+ src.operating = 0
+ src.occupant.gib()
+ del(src.occupant)
- newmeat.reagents.add_reagent("nutriment", sourcenutriment / totalslabs)
-
- // Transfer reagents from the old mob to the meat
- if( istype(src.occupant, /mob/living/carbon/) )
- src.occupant.reagents.trans_to(newmeat, round(sourcetotalreagents / totalslabs, 1))
-
- allmeat[i] = newmeat
-
- if(src.occupant.client) // Gibbed a cow with a client in it? log that shit
- src.occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [user]/[user.ckey] "
- user.attack_log += "\[[time_stamp()]\] Gibbed [src.occupant]/[src.occupant.ckey] "
- msg_admin_attack("\[[time_stamp()]\] [key_name(user)] gibbed [key_name(src.occupant)] ")
-
- src.occupant.death(1)
- src.occupant.ghostize()
-
- del(src.occupant)
-
- spawn(src.gibtime)
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
operating = 0
- for (var/i=1 to totalslabs)
- var/obj/item/meatslab = allmeat[i]
- var/turf/Tx = locate(src.x - i, src.y, src.z)
- meatslab.loc = src.loc
- meatslab.throw_at(Tx,i,3,src)
- if (!Tx.density)
- new /obj/effect/decal/cleanable/blood/gibs(Tx,i)
- src.operating = 0
+ for (var/obj/thing in contents)
+ // Todo: unify limbs and internal organs
+ // There's a chance that the gibber will fail to destroy some evidence.
+ if((istype(thing,/obj/item/weapon/organ) || istype(thing,/obj/item/organ)) && prob(80))
+ del(thing)
+ continue
+ thing.loc = get_turf(thing) // Drop it onto the turf for throwing.
+ thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
+
update_icon()
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 519219e96e..616ef4c6c9 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -129,8 +129,10 @@ Class Procs:
return 0
return apc.drain_power()
-/obj/machinery/New()
- ..()
+/obj/machinery/New(l, d=0)
+ ..(l)
+ if(d)
+ set_dir(d)
if(!machinery_sort_required && ticker)
dd_insertObjectList(machines, src)
else
@@ -335,6 +337,7 @@ Class Procs:
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc)
+ M.set_dir(src.dir)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
@@ -375,7 +378,7 @@ Class Procs:
if(istype(perp.belt, /obj/item/weapon/gun) || istype(perp.belt, /obj/item/weapon/melee))
threatcount += 2
- if(perp.dna && perp.dna.mutantrace && perp.dna.mutantrace != "none")
+ if(perp.species.name != "Human") //beepsky so racist.
threatcount += 2
if(check_records || check_arrest)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 210948bbd3..baa5b9f975 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -55,7 +55,7 @@ Buildable meters
var/pipe_type = 0
//var/pipe_dir = 0
var/pipename
- var/connect_types[] = list(1) //1=regular, 2=supply, 3=scrubber
+ var/connect_types = CONNECT_TYPE_REGULAR
force = 7
icon = 'icons/obj/pipe-item.dmi'
icon_state = "simple"
@@ -83,26 +83,26 @@ Buildable meters
src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent
else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/supply))
src.pipe_type = PIPE_SUPPLY_STRAIGHT + is_bent
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_STRAIGHT + is_bent
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/visible/universal) || istype(make_from, /obj/machinery/atmospherics/pipe/simple/hidden/universal))
src.pipe_type = PIPE_UNIVERSAL
- connect_types = list(1,2,3)
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple))
src.pipe_type = PIPE_SIMPLE_STRAIGHT + is_bent
else if(istype(make_from, /obj/machinery/atmospherics/portables_connector))
src.pipe_type = PIPE_CONNECTOR
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold/hidden/supply))
src.pipe_type = PIPE_SUPPLY_MANIFOLD
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_MANIFOLD
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold))
src.pipe_type = PIPE_MANIFOLD
@@ -134,21 +134,21 @@ Buildable meters
src.pipe_type = PIPE_MTVALVE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply))
src.pipe_type = PIPE_SUPPLY_MANIFOLD4W
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_MANIFOLD4W
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold4w))
src.pipe_type = PIPE_MANIFOLD4W
else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap/visible/supply) || istype(make_from, /obj/machinery/atmospherics/pipe/cap/hidden/supply))
src.pipe_type = PIPE_SUPPLY_CAP
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap/visible/scrubbers) || istype(make_from, /obj/machinery/atmospherics/pipe/cap/hidden/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_CAP
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/cap))
src.pipe_type = PIPE_CAP
@@ -159,21 +159,21 @@ Buildable meters
///// Z-Level stuff
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up/supply))
src.pipe_type = PIPE_SUPPLY_UP
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_UP
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/up))
src.pipe_type = PIPE_UP
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down/supply))
src.pipe_type = PIPE_SUPPLY_DOWN
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers))
src.pipe_type = PIPE_SCRUBBERS_DOWN
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if(istype(make_from, /obj/machinery/atmospherics/pipe/zpipe/down))
src.pipe_type = PIPE_DOWN
@@ -182,13 +182,13 @@ Buildable meters
src.pipe_type = pipe_type
src.set_dir(dir)
if (pipe_type == 29 || pipe_type == 30 || pipe_type == 33 || pipe_type == 35 || pipe_type == 37 || pipe_type == 39 || pipe_type == 41)
- connect_types = list(2)
+ connect_types = CONNECT_TYPE_SUPPLY
src.color = PIPE_COLOR_BLUE
else if (pipe_type == 31 || pipe_type == 32 || pipe_type == 34 || pipe_type == 36 || pipe_type == 38 || pipe_type == 40 || pipe_type == 42)
- connect_types = list(3)
+ connect_types = CONNECT_TYPE_SCRUBBER
src.color = PIPE_COLOR_RED
else if (pipe_type == 28)
- connect_types = list(1,2,3)
+ connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
//src.pipe_dir = get_pipe_dir()
update()
src.pixel_x = rand(-5, 5)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index b014ece92a..04b8c5644a 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -1,5 +1,5 @@
/obj/machinery/computer/teleporter
- name = "Teleporter"
+ name = "Teleporter Control Console"
desc = "Used to control a linked teleportation Hub and Station."
icon_state = "teleport"
circuit = "/obj/item/weapon/circuitboard/teleporter"
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 8a527e1b08..08d6f2cca4 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -1,6 +1,6 @@
/obj/item/mecha_parts/mecha_equipment/tool/sleeper
- name = "Mounted Sleeper"
- desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)"
+ name = "mounted sleeper"
+ desc = "A sleeper. Mountable to an exosuit. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_0"
origin_tech = "programming=2;biotech=3"
@@ -373,7 +373,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
- name = "Syringe Gun"
+ name = "syringe gun"
desc = "Exosuit-mounted chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/gun.dmi'
icon_state = "syringegun"
diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index 3d318a891a..999df5b8d5 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -1,5 +1,5 @@
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
- name = "Hydraulic Clamp"
+ name = "hydraulic clamp"
icon_state = "mecha_clamp"
equip_cooldown = 15
energy_drain = 10
@@ -64,7 +64,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill
- name = "Drill"
+ name = "drill"
desc = "This is the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_drill"
equip_cooldown = 30
@@ -115,7 +115,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
- name = "Diamond Drill"
+ name = "diamond drill"
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_diamond_drill"
origin_tech = "materials=4;engineering=3"
@@ -166,7 +166,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher
- name = "Extinguisher"
+ name = "extinguisher"
desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)"
icon_state = "mecha_exting"
equip_cooldown = 5
@@ -240,7 +240,7 @@
/obj/item/mecha_parts/mecha_equipment/tool/rcd
- name = "Mounted RCD"
+ name = "mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
icon_state = "mecha_rcd"
origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
@@ -345,7 +345,7 @@
/obj/item/mecha_parts/mecha_equipment/teleporter
- name = "Teleporter"
+ name = "teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
origin_tech = "bluespace=10"
@@ -365,7 +365,7 @@
/obj/item/mecha_parts/mecha_equipment/wormhole_generator
- name = "Wormhole Generator"
+ name = "wormhole generator"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen"
origin_tech = "bluespace=3"
@@ -415,7 +415,7 @@
return
/obj/item/mecha_parts/mecha_equipment/gravcatapult
- name = "Gravitational Catapult"
+ name = "gravitational catapult"
desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport"
origin_tech = "bluespace=2;magnets=3"
@@ -491,8 +491,8 @@
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants.
- name = "Armor Booster Module (Close Combat Weaponry)"
- desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate."
+ name = "\improper CCW armor booster"
+ desc = "Close-combat armor booster. Boosts exosuit armor against armed melee attacks. Requires energy to operate."
icon_state = "mecha_abooster_ccw"
origin_tech = "materials=3"
equip_cooldown = 10
@@ -541,8 +541,8 @@
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
- name = "Armor Booster Module (Ranged Weaponry)"
- desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate."
+ name = "\improper RW armor booster"
+ desc = "Ranged-weaponry armor booster. Boosts exosuit armor against ranged attacks. Completely blocks taser shots, but requires energy to operate."
icon_state = "mecha_abooster_proj"
origin_tech = "materials=4"
equip_cooldown = 10
@@ -612,8 +612,8 @@
/obj/item/mecha_parts/mecha_equipment/repair_droid
- name = "Repair Droid"
- desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
+ name = "repair droid"
+ desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost any type of external or internal damage."
icon_state = "repair_droid"
origin_tech = "magnets=3;programming=3"
equip_cooldown = 20
@@ -702,7 +702,7 @@
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
- name = "Energy Relay"
+ name = "energy relay"
desc = "Wirelessly drains energy from any available power channel in area. The performance index is quite low."
icon_state = "tesla"
origin_tech = "magnets=4;syndicate=2"
@@ -814,7 +814,7 @@
/obj/item/mecha_parts/mecha_equipment/generator
- name = "Phoron Generator"
+ name = "phoron generator"
desc = "Generates power using solid phoron as fuel. Pollutes the environment."
icon_state = "tesla"
origin_tech = "phorontech=2;powerstorage=2;engineering=1"
@@ -952,7 +952,7 @@
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
- name = "ExoNuclear Reactor"
+ name = "\improper ExoNuclear reactor"
desc = "Generates power using uranium. Pollutes the environment."
icon_state = "tesla"
origin_tech = "powerstorage=3;engineering=3"
@@ -989,7 +989,7 @@
//This is pretty much just for the death-ripley so that it is harmless
/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp
- name = "KILL CLAMP"
+ name = "\improper KILL CLAMP"
icon_state = "mecha_clamp"
equip_cooldown = 15
energy_drain = 0
@@ -1208,4 +1208,4 @@
if (OCCUPIED|LOCKED)
usr << "\red All of the passenger compartments are already occupied or locked!"
if (0)
- usr << "\red \The [src] doesn't have a passenger compartment."
\ No newline at end of file
+ usr << "\red \The [src] doesn't have a passenger compartment."
diff --git a/code/game/mecha/equipment/tools/unused_tools.dm b/code/game/mecha/equipment/tools/unused_tools.dm
index 470159e06f..012d7979e1 100644
--- a/code/game/mecha/equipment/tools/unused_tools.dm
+++ b/code/game/mecha/equipment/tools/unused_tools.dm
@@ -9,7 +9,7 @@
//NEEDS SPRITE! (When this gets ticked in search for 'TODO MECHA JETPACK SPRITE MISSING' through code to uncomment the place where it's missing.)
/obj/item/mecha_parts/mecha_equipment/jetpack
- name = "Jetpack"
+ name = "jetpack"
desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight."
icon_state = "mecha_equip"
equip_cooldown = 5
@@ -108,7 +108,7 @@
/obj/item/mecha_parts/mecha_equipment/defence_shocker
- name = "Exosuit Defence Shocker"
+ name = "exosuit defence shocker"
desc = ""
icon_state = "mecha_teleport"
equip_cooldown = 10
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index da6188263a..bcb907a040 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -58,12 +58,12 @@
P.process()
/obj/item/mecha_parts/mecha_equipment/weapon/energy
- name = "General Energy Weapon"
+ name = "general energy weapon"
auto_rearm = 1
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
equip_cooldown = 8
- name = "CH-PS \"Immolator\" Laser"
+ name = "\improper CH-PS \"Immolator\" laser"
icon_state = "mecha_laser"
energy_drain = 30
projectile = /obj/item/projectile/beam
@@ -71,7 +71,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
equip_cooldown = 30
- name = "Jury-rigged Welder-Laser"
+ name = "jury-rigged welder-laser"
desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times."
icon_state = "mecha_laser"
energy_drain = 80
@@ -81,7 +81,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 15
- name = "CH-LC \"Solaris\" Laser Cannon"
+ name = "\improper CH-LC \"Solaris\" laser cannon"
icon_state = "mecha_laser"
energy_drain = 60
projectile = /obj/item/projectile/beam/heavylaser
@@ -89,7 +89,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
equip_cooldown = 40
- name = "mkIV Ion Heavy Cannon"
+ name = "mkIV ion heavy cannon"
icon_state = "mecha_ion"
energy_drain = 120
projectile = /obj/item/projectile/ion
@@ -97,7 +97,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
equip_cooldown = 30
- name = "eZ-13 mk2 Heavy pulse rifle"
+ name = "eZ-13 mk2 heavy pulse rifle"
icon_state = "mecha_pulse"
energy_drain = 120
origin_tech = "materials=3;combat=6;powerstorage=4"
@@ -117,7 +117,7 @@
return
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
- name = "PBT \"Pacifier\" Mounted Taser"
+ name = "\improper PBT \"Pacifier\" mounted taser"
icon_state = "mecha_taser"
energy_drain = 20
equip_cooldown = 8
@@ -126,7 +126,7 @@
/* Commenting this out rather than removing it because it may be useful for reference.
/obj/item/mecha_parts/mecha_equipment/weapon/honker
- name = "HoNkER BlAsT 5000"
+ name = "\improper HoNkER BlAsT 5000"
icon_state = "mecha_honker"
energy_drain = 200
equip_cooldown = 150
@@ -164,17 +164,6 @@
M.Paralyse(4)
else
M.make_jittery(500)
- /* //else the mousetraps are useless
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(isobj(H.shoes))
- var/thingy = H.shoes
- H.drop_from_inventory(H.shoes)
- walk_away(thingy,chassis,15,2)
- spawn(20)
- if(thingy)
- walk(thingy,0)
- */
chassis.use_power(energy_drain)
log_message("Honked from [src.name]. HONK!")
do_after_cooldown()
@@ -182,7 +171,7 @@
*/
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
- name = "General Ballisic Weapon"
+ name = "general ballisic weapon"
var/projectile_energy_cost
get_equip_info()
@@ -207,7 +196,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
- name = "LBX AC 10 \"Scattershot\""
+ name = "\improper LBX AC 10 \"Scattershot\""
icon_state = "mecha_scatter"
equip_cooldown = 20
projectile = /obj/item/projectile/bullet/midbullet
@@ -219,7 +208,7 @@
projectile_energy_cost = 25
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
- name = "Ultra AC 2"
+ name = "\improper Ultra AC 2"
icon_state = "mecha_uac2"
equip_cooldown = 10
projectile = /obj/item/projectile/bullet/weakbullet
@@ -238,7 +227,7 @@
AM.throw_at(target,missile_range, missile_speed, chassis)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
- name = "SRM-8 Missile Rack"
+ name = "\improper SRM-8 missile rack"
icon_state = "mecha_missilerack"
projectile = /obj/item/missile
fire_sound = 'sound/effects/bang.ogg'
@@ -266,7 +255,7 @@
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
- name = "SGL-6 Grenade Launcher"
+ name = "\improper SGL-6 grenade launcher"
icon_state = "mecha_grenadelnchr"
projectile = /obj/item/weapon/grenade/flashbang
fire_sound = 'sound/effects/bang.ogg'
@@ -283,7 +272,7 @@
F.prime()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
- name = "SOP-6 Grenade Launcher"
+ name = "\improper SOP-6 grenade launcher"
projectile = /obj/item/weapon/grenade/flashbang/clusterbang
construction_cost = list("metal"=20000,"gold"=6000,"uranium"=6000)
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 20703363ff..d3c249b747 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -46,8 +46,8 @@
return
// temporary fix for broken icon until somebody gets around to make these player-buildable
-/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob)
- ..()
+/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob)
+ ..()
if(floor_type)
icon_state = "recharge_floor"
else
@@ -190,45 +190,28 @@
var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src)
if(F)
F.init_devices()
-
- var/output = "[src.name] "
- if(!recharge_floor)
- output += "Mech Bay Recharge Station not initialized. "
+ ui_interact(user)
+
+/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/list/data = list()
+ data["has_floor"] = recharge_floor
+ data["has_port"] = recharge_port
+ if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell)
+ data["has_mech"] = 1
+ data["mecha_name"] = recharge_floor.recharging_mecha || "None"
+ data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge
+ data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge
+ data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent())
else
- output += {"Mech Bay Recharge Station Data:
- Mecha: [recharge_floor.recharging_mecha||"None"] "}
- if(recharge_floor.recharging_mecha)
- var/cell_charge = recharge_floor.recharging_mecha.get_charge()
- output += "Cell charge: [isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"] "
- output += "
"
- if(!recharge_port)
- output += "Mech Bay Power Port not initialized. "
- else
- output += "Mech Bay Power Port Status: [recharge_port.active()?"Now charging":"On hold"] "
-
- /*
- output += {"
- Settings:
- "}
- */
-
- output += " body>"
- user << browse(output, "window=mech_bay_console")
- onclose(user, "mech_bay_console")
- return
-
-// unused at the moment, also lacks any kind of exploit prevention
-/*
-/obj/machinery/computer/mech_bay_power_console/Topic(href, href_list)
- if(href_list["autostart"])
- autostart = !autostart
- if(href_list["voltage"])
- voltage = text2num(href_list["voltage"])
- if(recharge_port)
- recharge_port.set_voltage(voltage)
- updateUsrDialog()
- return
-*/
+ data["has_mech"] = 0
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ // the ui does not exist, so we'll create a new() one
+ // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
+ ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325)
+ // when the ui is first opened this is the data it will use
+ ui.set_initial_data(data)
+ // open the new ui window
+ ui.open()
+ // auto update every Master Controller tick
+ ui.set_auto_update(1)
\ No newline at end of file
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index d964529c02..3285218baf 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -203,6 +203,12 @@
radio.talk_into(M, text)
return
+/obj/mecha/see_emote(mob/living/M, text)
+ if(occupant && occupant.client)
+ var/rendered = "[text] "
+ occupant.show_message(rendered, 2)
+ ..()
+
////////////////////////////
///// Action processing ////
////////////////////////////
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index 479c8f7d09..b9a6ab4e78 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -2,6 +2,8 @@
////// Mecha Parts //////
/////////////////////////
+// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm
+
/obj/item/mecha_parts
name = "mecha part"
icon = 'icons/mecha/mech_construct.dmi'
@@ -347,90 +349,3 @@
origin_tech = "materials=3;engineering=3"
construction_time = 200
construction_cost = list("metal"=15000)*/
-
-
-///////// Circuitboards
-
-/obj/item/weapon/circuitboard/mecha
- name = "Exosuit Circuit board"
- icon = 'icons/obj/module.dmi'
- icon_state = "std_mod"
- item_state = "electronic"
- board_type = "other"
- flags = FPRINT | TABLEPASS | CONDUCT
- force = 5.0
- w_class = 2.0
- throwforce = 5.0
- throw_speed = 3
- throw_range = 15
-
- ripley
- origin_tech = "programming=3"
-
- ripley/peripherals
- name = "Circuit board (Ripley Peripherals Control module)"
- icon_state = "mcontroller"
-
- ripley/main
- name = "Circuit board (Ripley Central Control module)"
- icon_state = "mainboard"
-
- gygax
- origin_tech = "programming=4"
-
- gygax/peripherals
- name = "Circuit board (Gygax Peripherals Control module)"
- icon_state = "mcontroller"
-
- gygax/targeting
- name = "Circuit board (Gygax Weapon Control and Targeting module)"
- icon_state = "mcontroller"
- origin_tech = "programming=4;combat=4"
-
- gygax/main
- name = "Circuit board (Gygax Central Control module)"
- icon_state = "mainboard"
-
- durand
- origin_tech = "programming=4"
-
- durand/peripherals
- name = "Circuit board (Durand Peripherals Control module)"
- icon_state = "mcontroller"
-
- durand/targeting
- name = "Circuit board (Durand Weapon Control and Targeting module)"
- icon_state = "mcontroller"
- origin_tech = "programming=4;combat=4"
-
- durand/main
- name = "Circuit board (Durand Central Control module)"
- icon_state = "mainboard"
-
- honker
- origin_tech = "programming=4"
-
- honker/peripherals
- name = "Circuit board (H.O.N.K Peripherals Control module)"
- icon_state = "mcontroller"
-
- honker/targeting
- name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
- icon_state = "mcontroller"
-
- honker/main
- name = "Circuit board (H.O.N.K Central Control module)"
- icon_state = "mainboard"
-
- odysseus
- origin_tech = "programming=3"
-
- odysseus/peripherals
- name = "Circuit board (Odysseus Peripherals Control module)"
- icon_state = "mcontroller"
-
- odysseus/main
- name = "Circuit board (Odysseus Central Control module)"
- icon_state = "mainboard"
-
-
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 56e5327079..cdc7b26bbf 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -345,7 +345,7 @@ Alien plants should do something if theres a lot of poison
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
/obj/effect/alien/egg/New()
- if(aliens_allowed)
+ if(config.aliens_allowed)
..()
spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME))
Grow()
diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm
index d50d595d3e..8d8328bc9f 100644
--- a/code/game/objects/effects/decals/remains.dm
+++ b/code/game/objects/effects/decals/remains.dm
@@ -1,23 +1,28 @@
-/obj/effect/decal/remains/human
+/obj/effect/decal/remains
name = "remains"
- desc = "They look like human remains. They have a strange aura about them."
gender = PLURAL
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
- anchored = 1
+ anchored = 0
+
+/obj/effect/decal/remains/human
+ desc = "They look like human remains. They have a strange aura about them."
/obj/effect/decal/remains/xeno
- name = "remains"
desc = "They look like the remains of something... alien. They have a strange aura about them."
- gender = PLURAL
- icon = 'icons/effects/blood.dmi'
icon_state = "remainsxeno"
- anchored = 1
/obj/effect/decal/remains/robot
- name = "remains"
desc = "They look like the remains of something mechanical. They have a strange aura about them."
- gender = PLURAL
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
- anchored = 1
\ No newline at end of file
+
+/obj/effect/decal/remains/attack_hand(mob/user as mob)
+ user << "[src] sinks together into a pile of ash. "
+ var/turf/simulated/floor/F = get_turf(src)
+ if (istype(F))
+ new /obj/effect/decal/cleanable/ash(F)
+ del(src)
+
+/obj/effect/decal/remains/robot/attack_hand(mob/user as mob)
+ return
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index db7abda850..82d27968db 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -557,18 +557,9 @@ steam.start() -- spawns the effect
/obj/effect/effect/foam/Crossed(var/atom/movable/AM)
if(metal)
return
-
- if (istype(AM, /mob/living/carbon))
- var/mob/M = AM
- if (istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) || M.buckled)
- return
-
- M.stop_pulling()
- M << "\blue You slipped on the foam!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(5)
- M.Weaken(2)
-
+ if(istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.slip("the foam",6)
/datum/effect/effect/system/foam_spread
var/amount = 5 // the size of the foam spread.
@@ -733,15 +724,15 @@ steam.start() -- spawns the effect
var/light = -1
var/flash = -1
- // Clamp all values to MAX_EXPLOSION_RANGE
+ // Clamp all values to max_explosion_range
if (round(amount/12) > 0)
- devastation = min (MAX_EXPLOSION_RANGE, devastation + round(amount/12))
+ devastation = min (max_explosion_range, devastation + round(amount/12))
if (round(amount/6) > 0)
- heavy = min (MAX_EXPLOSION_RANGE, heavy + round(amount/6))
+ heavy = min (max_explosion_range, heavy + round(amount/6))
if (round(amount/3) > 0)
- light = min (MAX_EXPLOSION_RANGE, light + round(amount/3))
+ light = min (max_explosion_range, light + round(amount/3))
if (flash && flashing_factor)
flash += (round(amount/4) * flashing_factor)
diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm
index 619935b8b2..808e46c2a3 100644
--- a/code/game/objects/effects/gibs.dm
+++ b/code/game/objects/effects/gibs.dm
@@ -1,14 +1,5 @@
-/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA) //CARN MARKER
- new /obj/effect/gibspawner/generic(get_turf(location),viruses,MobDNA)
-
-/proc/hgibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor)
- new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA,fleshcolor,bloodcolor)
-
-/proc/xgibs(atom/location, var/list/viruses)
- new /obj/effect/gibspawner/xeno(get_turf(location),viruses)
-
-/proc/robogibs(atom/location, var/list/viruses)
- new /obj/effect/gibspawner/robot(get_turf(location),viruses)
+/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor)
+ new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor)
/obj/effect/gibspawner
var/sparks = 0 //whether sparks spread on Gib()
@@ -24,9 +15,7 @@
if(fleshcolor) src.fleshcolor = fleshcolor
if(bloodcolor) src.bloodcolor = bloodcolor
-
- if(istype(loc,/turf)) //basically if a badmin spawns it
- Gib(loc,viruses,MobDNA)
+ Gib(loc,viruses,MobDNA)
proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null)
if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
@@ -40,7 +29,7 @@
if(sparks)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(2, 1, location)
+ s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
for(var/i = 1, i<= gibtypes.len, i++)
@@ -67,12 +56,11 @@
gib.blood_DNA = list()
if(MobDNA)
gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type
- else if(istype(src, /obj/effect/gibspawner/xeno))
- gib.blood_DNA["UNKNOWN DNA"] = "X*"
else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey
gib.blood_DNA["Non-human DNA"] = "A+"
- var/list/directions = gibdirections[i]
- if(directions.len)
- gib.streak(directions)
+ if(istype(location,/turf/))
+ var/list/directions = gibdirections[i]
+ if(directions.len)
+ gib.streak(directions)
del(src)
\ No newline at end of file
diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 5446ba348e..b145b77ed2 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -16,15 +16,6 @@
gibamounts[6] = pick(0,1,2)
..()
- xeno
- gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core)
- gibamounts = list(1,1,1,1,1,1,1)
-
- New()
- gibdirections = list(list(NORTH, NORTHEAST, NORTHWEST),list(SOUTH, SOUTHEAST, SOUTHWEST),list(WEST, NORTHWEST, SOUTHWEST),list(EAST, NORTHEAST, SOUTHEAST), alldirs, alldirs, list())
- gibamounts[6] = pick(0,1,2)
- ..()
-
robot
sparks = 1
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb)
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index f2e760a34a..418209d744 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -1,7 +1,7 @@
// APC HULL
/obj/item/apc_frame
- name = "APC frame"
+ name = "\improper APC frame"
desc = "Used for repairing or building APCs"
icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame"
@@ -24,7 +24,7 @@
if (!istype(loc, /turf/simulated/floor))
usr << "\red APC cannot be placed on this spot."
return
- if (A.requires_power == 0 || A.name == "Space")
+ if (A.requires_power == 0 || istype(A, /area/space))
usr << "\red APC cannot be placed in this area."
return
if (A.get_apc())
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 4c1242160a..f0d8a820c0 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -80,7 +80,7 @@ move an amendment to the drawing.
return A
/obj/item/blueprints/proc/get_area_type(var/area/A = get_area())
- if (A.name == "Space")
+ if(istype(A, /area/space))
return AREA_SPACE
var/list/SPECIALS = list(
/area/shuttle,
diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm
index 68d7547bb0..5441f83cca 100644
--- a/code/game/objects/items/contraband.dm
+++ b/code/game/objects/items/contraband.dm
@@ -2,7 +2,7 @@
//Illicit drugs~
/obj/item/weapon/storage/pill_bottle/happy
- name = "Happy pills"
+ name = "bottle of Happy pills"
desc = "Highly illegal drug. When you want to see the rainbow."
/obj/item/weapon/storage/pill_bottle/happy/New()
@@ -16,7 +16,7 @@
new /obj/item/weapon/reagent_containers/pill/happy( src )
/obj/item/weapon/storage/pill_bottle/zoom
- name = "Zoom pills"
+ name = "bottle of Zoom pills"
desc = "Highly illegal drug. Trade brain for speed."
/obj/item/weapon/storage/pill_bottle/zoom/New()
@@ -27,4 +27,4 @@
new /obj/item/weapon/reagent_containers/pill/zoom( src )
new /obj/item/weapon/reagent_containers/pill/zoom( src )
new /obj/item/weapon/reagent_containers/pill/zoom( src )
- new /obj/item/weapon/reagent_containers/pill/zoom( src )
\ No newline at end of file
+ new /obj/item/weapon/reagent_containers/pill/zoom( src )
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 05071c5883..ff21f7f0ab 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -4,7 +4,7 @@
var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda
- name = "PDA"
+ name = "\improper PDA"
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
icon = 'icons/obj/pda.dmi'
icon_state = "pda"
@@ -28,7 +28,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/fon = 0 //Is the flashlight function on?
var/f_lum = 2 //Luminosity for the flashlight function
var/message_silent = 0 //To beep or not to beep, that is the question
- var/news_silent = 0 //To beep or not to beep, that is the question
+ var/news_silent = 1 //To beep or not to beep, that is the question. The answer is No.
var/toff = 0 //If 1, messenger disabled
var/tnote[0] //Current Texts
var/last_text //No text spamming
@@ -118,6 +118,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/heads
default_cartridge = /obj/item/weapon/cartridge/head
icon_state = "pda-h"
+ news_silent = 1
/obj/item/device/pda/heads/hop
default_cartridge = /obj/item/weapon/cartridge/hop
@@ -190,7 +191,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a WGW-11 series e-reader."
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
message_silent = 1 //Quiet in the library!
- news_silent = 1
+ news_silent = 0 // Librarian is above the law! (That and alt job title is reporter)
/obj/item/device/pda/clear
icon_state = "pda-transp"
@@ -1023,7 +1024,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/new_info(var/beep_silent, var/message_tone, var/reception_message)
if (!beep_silent)
playsound(loc, 'sound/machines/twobeep.ogg', 50, 1)
- for (var/mob/O in hearers(3, loc))
+ for (var/mob/O in hearers(2, loc))
O.show_message(text("\icon[src] *[message_tone]*"))
//Search for holder of the PDA.
var/mob/living/L = null
@@ -1041,8 +1042,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/proc/new_news(var/message)
new_info(news_silent, newstone, news_silent ? "" : "\icon[src] [message] ")
- new_news = 1
- update_icon()
+ if(!news_silent)
+ new_news = 1
+ update_icon()
/obj/item/device/pda/ai/new_news(var/message)
// Do nothing
@@ -1343,21 +1345,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
..()
/obj/item/device/pda/clown/Crossed(AM as mob|obj) //Clown PDA is slippery.
- if (istype(AM, /mob/living/carbon))
- var/mob/M = AM
- if ((istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) || M.m_intent == "walk")
- return
+ if (istype(AM, /mob/living))
+ var/mob/living/M = AM
- if ((istype(M, /mob/living/carbon/human) && (M.real_name != src.owner) && (istype(src.cartridge, /obj/item/weapon/cartridge/clown))))
- if (src.cartridge.charges < 5)
+ if(M.slip("the PDA",8) && M.real_name != src.owner && istype(src.cartridge, /obj/item/weapon/cartridge/clown))
+ if(src.cartridge.charges < 5)
src.cartridge.charges++
- M.stop_pulling()
- M << "\blue You slipped on the PDA!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(8)
- M.Weaken(5)
-
/obj/item/device/pda/proc/available_pdas()
var/list/names = list()
var/list/plist = list()
@@ -1391,7 +1385,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Some spare PDAs in a box
/obj/item/weapon/storage/box/PDAs
- name = "spare PDAs"
+ name = "box of spare PDAs"
desc = "A box of spare PDA microcomputers."
icon = 'icons/obj/pda.dmi'
icon_state = "pdabox"
@@ -1414,4 +1408,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
/obj/item/device/pda/emp_act(severity)
for(var/atom/A in src)
- A.emp_act(severity)
\ No newline at end of file
+ A.emp_act(severity)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 982ac98ff3..416da91a86 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -35,27 +35,27 @@
var/list/stored_data = list()
/obj/item/weapon/cartridge/engineering
- name = "Power-ON Cartridge"
+ name = "\improper Power-ON cartridge"
icon_state = "cart-e"
access_engine = 1
/obj/item/weapon/cartridge/atmos
- name = "BreatheDeep Cartridge"
+ name = "\improper BreatheDeep cartridge"
icon_state = "cart-a"
access_atmos = 1
/obj/item/weapon/cartridge/medical
- name = "Med-U Cartridge"
+ name = "\improper Med-U cartridge"
icon_state = "cart-m"
access_medical = 1
/obj/item/weapon/cartridge/chemistry
- name = "ChemWhiz Cartridge"
+ name = "\improper ChemWhiz cartridge"
icon_state = "cart-chem"
access_reagent_scanner = 1
/obj/item/weapon/cartridge/security
- name = "R.O.B.U.S.T. Cartridge"
+ name = "\improper R.O.B.U.S.T. cartridge"
icon_state = "cart-s"
access_security = 1
@@ -65,31 +65,31 @@
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/detective
- name = "D.E.T.E.C.T. Cartridge"
+ name = "\improper D.E.T.E.C.T. cartridge"
icon_state = "cart-s"
access_security = 1
access_medical = 1
/obj/item/weapon/cartridge/janitor
- name = "CustodiPRO Cartridge"
+ name = "\improper CustodiPRO cartridge"
desc = "The ultimate in clean-room design."
icon_state = "cart-j"
access_janitor = 1
/obj/item/weapon/cartridge/lawyer
- name = "P.R.O.V.E. Cartridge"
+ name = "\improper P.R.O.V.E. cartridge"
icon_state = "cart-s"
access_security = 1
/obj/item/weapon/cartridge/clown
- name = "Honkworks 5.0"
+ name = "\improper Honkworks 5.0 cartridge"
icon_state = "cart-clown"
access_clown = 1
charges = 5
/obj/item/weapon/cartridge/mime
- name = "Gestur-O 1000"
+ name = "\improper Gestur-O 1000 cartridge"
icon_state = "cart-mi"
access_mime = 1
charges = 5
@@ -105,7 +105,7 @@
desc = "A data cartridge with an integrated radio signaler module."
/obj/item/weapon/cartridge/signal/science
- name = "Signal Ace 2"
+ name = "\improper Signal Ace 2 cartridge"
desc = "Complete with integrated radio signaler!"
icon_state = "cart-tox"
access_reagent_scanner = 1
@@ -119,7 +119,7 @@
/obj/item/weapon/cartridge/quartermaster
- name = "Space Parts & Space Vendors Cartridge"
+ name = "\improper Space Parts & Space Vendors cartridge"
desc = "Perfect for the Quartermaster on the go!"
icon_state = "cart-q"
access_quartermaster = 1
@@ -130,12 +130,12 @@
radio = new /obj/item/radio/integrated/mule(src)
/obj/item/weapon/cartridge/head
- name = "Easy-Record DELUXE"
+ name = "\improper Easy-Record DELUXE"
icon_state = "cart-h"
access_status_display = 1
/obj/item/weapon/cartridge/hop
- name = "HumanResources9001"
+ name = "\improper HumanResources9001 cartridge"
icon_state = "cart-h"
access_status_display = 1
access_quartermaster = 1
@@ -148,7 +148,7 @@
radio = new /obj/item/radio/integrated/mule(src)
/obj/item/weapon/cartridge/hos
- name = "R.O.B.U.S.T. DELUXE"
+ name = "\improper R.O.B.U.S.T. DELUXE"
icon_state = "cart-hos"
access_status_display = 1
access_security = 1
@@ -159,21 +159,21 @@
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/ce
- name = "Power-On DELUXE"
+ name = "\improper Power-On DELUXE"
icon_state = "cart-ce"
access_status_display = 1
access_engine = 1
access_atmos = 1
/obj/item/weapon/cartridge/cmo
- name = "Med-U DELUXE"
+ name = "\improper Med-U DELUXE"
icon_state = "cart-cmo"
access_status_display = 1
access_reagent_scanner = 1
access_medical = 1
/obj/item/weapon/cartridge/rd
- name = "Signal Ace DELUXE"
+ name = "\improper Signal Ace DELUXE"
icon_state = "cart-rd"
access_status_display = 1
access_reagent_scanner = 1
@@ -185,7 +185,7 @@
radio = new /obj/item/radio/integrated/signal(src)
/obj/item/weapon/cartridge/captain
- name = "Value-PAK Cartridge"
+ name = "\improper Value-PAK cartridge"
desc = "Now with 200% more value!"
icon_state = "cart-c"
access_quartermaster = 1
@@ -198,7 +198,7 @@
access_atmos = 1
/obj/item/weapon/cartridge/syndicate
- name = "Detomatix Cartridge"
+ name = "\improper Detomatix cartridge"
icon_state = "cart"
access_remote_door = 1
access_detonate_pda = 1
diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm
index 0835f6de25..0c7105118f 100644
--- a/code/game/objects/items/devices/PDA/radio.dm
+++ b/code/game/objects/items/devices/PDA/radio.dm
@@ -1,5 +1,5 @@
/obj/item/radio/integrated
- name = "PDA radio module"
+ name = "\improper PDA radio module"
desc = "An electronic radio system of nanotrasen origin."
icon = 'icons/obj/module.dmi'
icon_state = "power_mod"
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 7767ecd307..fc4f555ed4 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -9,6 +9,8 @@
var/flush = null
origin_tech = "programming=4;materials=4"
+ var/mob/living/silicon/ai/carded_ai
+
/obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob)
if (!istype (M, /mob/living/silicon/decoy))
return ..()
@@ -151,6 +153,8 @@
ai.control_disabled = 1
ai.aiRestorePowerRoutine = 0
ai.aiRadio.disabledAi = 1
+ carded_ai = ai
+
ai.attack_log += text("\[[time_stamp()]\] Has been carded with [src.name] by [user.name] ([user.ckey]) ")
user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to card [ai.name] ([ai.ckey]) ")
@@ -166,11 +170,18 @@
/obj/item/device/aicard/proc/clear()
name = "inteliCard"
+ carded_ai = null
update_icon()
+
+/obj/item/device/aicard/see_emote(mob/living/M, text)
+ if(carded_ai && carded_ai.client)
+ var/rendered = "[text] "
+ carded_ai.show_message(rendered, 2)
+ ..()
/*
/obj/item/device/aicard/relaymove(var/mob/user, var/direction)
if(src.loc && istype(src.loc.loc, /obj/item/rig_module))
var/obj/item/rig_module/module = src.loc.loc
if(!module.holder || !direction)
return
- module.holder.forced_move(direction)*/
\ No newline at end of file
+ module.holder.forced_move(direction)*/
diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm
index e1c7b18a72..0cafa7679c 100644
--- a/code/game/objects/items/devices/binoculars.dm
+++ b/code/game/objects/items/devices/binoculars.dm
@@ -15,4 +15,4 @@
/obj/item/device/binoculars/attack_self(mob/user)
- zoom()
\ No newline at end of file
+ zoom()
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index af350bd56b..978cfdb304 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -1,5 +1,5 @@
/obj/item/device/chameleon
- name = "chameleon-projector"
+ name = "chameleon projector"
icon_state = "shield0"
flags = FPRINT | TABLEPASS| CONDUCT
slot_flags = SLOT_BELT
@@ -142,4 +142,4 @@
/obj/effect/dummy/chameleon/Del()
master.disrupt(0)
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm
index 3e952671a0..3168e00feb 100644
--- a/code/game/objects/items/devices/debugger.dm
+++ b/code/game/objects/items/devices/debugger.dm
@@ -5,9 +5,9 @@
*/
/obj/item/device/debugger
- icon = 'icons/obj/hacktool.dmi'
name = "debugger"
desc = "Used to debug electronic equipment."
+ icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
flags = FPRINT | TABLEPASS| CONDUCT
force = 5.0
@@ -43,4 +43,4 @@
user << "\red There is a software error with the device."
else
user << "\blue The device's software appears to be fine."
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 14f22059ad..35ff3b720a 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -223,4 +223,4 @@
icon_state = initial(icon_state)
/obj/item/device/flashlight/slime/attack_self(mob/user)
- return //Bio-luminescence does not toggle.
\ No newline at end of file
+ return //Bio-luminescence does not toggle.
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index ff9ffbcda3..c6238f2648 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -191,4 +191,4 @@
#undef LIGHT_OK
#undef LIGHT_EMPTY
#undef LIGHT_BROKEN
-#undef LIGHT_BURNED
\ No newline at end of file
+#undef LIGHT_BURNED
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 371fe3b8c4..db79c6390b 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -52,4 +52,4 @@
emagged = 1
insults = rand(1, 3)//to prevent dickflooding
return
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm
index e038d13760..8788eaf0f2 100644
--- a/code/game/objects/items/devices/modkit.dm
+++ b/code/game/objects/items/devices/modkit.dm
@@ -69,4 +69,4 @@
/obj/item/device/modkit/tajaran
name = "tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
- target_species = "Tajara"
\ No newline at end of file
+ target_species = "Tajara"
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 2a5df89510..6378f8823f 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -19,4 +19,4 @@
matter = list("metal" = 50,"glass" = 20)
origin_tech = "magnets=1;engineering=1"
- var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
\ No newline at end of file
+ var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 2f3a9c682e..f2df13a2db 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -304,10 +304,15 @@
/obj/item/device/paicard/emp_act(severity)
for(var/mob/M in src)
M.emp_act(severity)
- ..()
/obj/item/device/paicard/ex_act(severity)
if(pai)
pai.ex_act(severity)
else
del(src)
+
+/obj/item/device/paicard/see_emote(mob/living/M, text)
+ if(pai && pai.client)
+ var/rendered = "[text] "
+ pai.show_message(rendered, 2)
+ ..()
\ No newline at end of file
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index d328169d1e..e8ca9c3929 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -1,8 +1,8 @@
// Powersink - used to drain station power
/obj/item/device/powersink
- desc = "A nulling power sink which drains energy from electrical systems."
name = "power sink"
+ desc = "A nulling power sink which drains energy from electrical systems."
icon_state = "powersink0"
item_state = "electronic"
w_class = 4.0
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 0de7faad36..ef332fa336 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -1,5 +1,5 @@
/obj/item/device/radio/beacon
- name = "Tracking Beacon"
+ name = "tracking beacon"
desc = "A beacon used by a teleporter."
icon_state = "beacon"
item_state = "signaler"
@@ -46,4 +46,4 @@
new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
del(src)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm
index 8067fd3329..823940a53c 100644
--- a/code/game/objects/items/devices/radio/encryptionkey.dm
+++ b/code/game/objects/items/devices/radio/encryptionkey.dm
@@ -1,6 +1,6 @@
/obj/item/device/encryptionkey/
- name = "Standard Encrpytion Key"
+ name = "standard encrpytion key"
desc = "An encryption key for a radio headset. Contains cypherkeys."
icon = 'icons/obj/radio.dmi'
icon_state = "cypherkey"
@@ -28,96 +28,96 @@
origin_tech = "syndicate=3"
/obj/item/device/encryptionkey/headset_sec
- name = "Security Radio Encryption Key"
+ name = "security radio encryption key"
icon_state = "sec_cypherkey"
channels = list("Security" = 1)
/obj/item/device/encryptionkey/headset_eng
- name = "Engineering Radio Encryption Key"
+ name = "engineering radio encryption key"
icon_state = "eng_cypherkey"
channels = list("Engineering" = 1)
/obj/item/device/encryptionkey/headset_rob
- name = "Robotics Radio Encryption Key"
+ name = "robotics radio encryption key"
icon_state = "rob_cypherkey"
channels = list("Engineering" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_med
- name = "Medical Radio Encryption Key"
+ name = "medical radio encryption key"
icon_state = "med_cypherkey"
channels = list("Medical" = 1)
/obj/item/device/encryptionkey/headset_sci
- name = "Science Radio Encryption Key"
+ name = "science radio encryption key"
icon_state = "sci_cypherkey"
channels = list("Science" = 1)
/obj/item/device/encryptionkey/headset_medsci
- name = "Medical Research Radio Encryption Key"
+ name = "medical research radio encryption key"
icon_state = "medsci_cypherkey"
channels = list("Medical" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_com
- name = "Command Radio Encryption Key"
+ name = "command radio encryption key"
icon_state = "com_cypherkey"
channels = list("Command" = 1)
/obj/item/device/encryptionkey/heads/captain
- name = "Captain's Encryption Key"
+ name = "captain's encryption key"
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/ai_integrated
- name = "AI Integrated Encryption Key"
+ name = "ai integrated encryption key"
desc = "Integrated encryption key"
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1)
/obj/item/device/encryptionkey/heads/rd
- name = "Research Director's Encryption Key"
+ name = "research director's encryption key"
icon_state = "rd_cypherkey"
channels = list("Science" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hos
- name = "Head of Security's Encryption Key"
+ name = "head of security's encryption key"
icon_state = "hos_cypherkey"
channels = list("Security" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/ce
- name = "Chief Engineer's Encryption Key"
+ name = "chief engineer's encryption key"
icon_state = "ce_cypherkey"
channels = list("Engineering" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/cmo
- name = "Chief Medical Officer's Encryption Key"
+ name = "chief medical officer's encryption key"
icon_state = "cmo_cypherkey"
channels = list("Medical" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hop
- name = "Head of Personnel's Encryption Key"
+ name = "head of personnel's encryption key"
icon_state = "hop_cypherkey"
channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0)
/*
/obj/item/device/encryptionkey/headset_mine
- name = "Mining Radio Encryption Key"
+ name = "mining radio encryption key"
icon_state = "mine_cypherkey"
channels = list("Mining" = 1)
/obj/item/device/encryptionkey/heads/qm
- name = "Quartermaster's Encryption Key"
+ name = "quartermaster's encryption key"
icon_state = "qm_cypherkey"
channels = list("Cargo" = 1, "Mining" = 1)
*/
/obj/item/device/encryptionkey/headset_cargo
- name = "Supply Radio Encryption Key"
+ name = "supply radio encryption key"
icon_state = "cargo_cypherkey"
channels = list("Supply" = 1)
/obj/item/device/encryptionkey/headset_service
- name = "Service Radio Encryption Key"
+ name = "service radio encryption key"
icon_state = "srv_cypherkey"
channels = list("Service" = 1)
/obj/item/device/encryptionkey/ert
- name = "NanoTrasen ERT Radio Encryption Key"
+ name = "\improper NanoTrasen ERT radio encryption key"
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index feffa9096d..bfc9e8f69b 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -31,7 +31,7 @@
return
user << "The following channels are built-in:"
- user << radio_desc
+ user << radio_desc
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
if (channel == "special")
@@ -61,7 +61,7 @@
/obj/item/device/radio/headset/binary
origin_tech = "syndicate=3"
- ks1type = /obj/item/device/encryptionkey/binary
+ ks1type = /obj/item/device/encryptionkey/binary
/obj/item/device/radio/headset/headset_sec
name = "security radio headset"
@@ -120,7 +120,7 @@
ks2type = /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
- name = "AI Subspace Transceiver"
+ name = "\improper AI subspace transceiver"
desc = "Integrated AI radio transceiver."
icon = 'icons/obj/robot_component.dmi'
icon_state = "radio"
@@ -135,7 +135,7 @@
return ..(freq, level, 1)
/obj/item/device/radio/headset/heads/rd
- name = "Research Director's headset"
+ name = "research director's headset"
desc = "Headset of the researching God."
icon_state = "com_headset"
item_state = "headset"
@@ -198,7 +198,7 @@
ks2type = /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/ert
- name = "CentCom Response Team headset"
+ name = "emergency response team radio headset"
desc = "The headset of the boss's boss."
icon_state = "com_headset"
item_state = "headset"
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index aa7e260371..5afc8ebc10 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -9,7 +9,7 @@ MASS SPECTROMETER
REAGENT SCANNER
*/
/obj/item/device/t_scanner
- name = "T-ray scanner"
+ name = "\improper T-ray scanner"
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
icon_state = "t-ray0"
var/on = 0
@@ -65,10 +65,10 @@ REAGENT SCANNER
/obj/item/device/healthanalyzer
- name = "Health Analyzer"
+ name = "health analyzer"
+ desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "analyzer"
- desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
@@ -227,8 +227,8 @@ REAGENT SCANNER
/obj/item/device/analyzer
- desc = "A hand-held environmental scanner which reports current gas levels."
name = "analyzer"
+ desc = "A hand-held environmental scanner which reports current gas levels."
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
@@ -274,8 +274,8 @@ REAGENT SCANNER
return
/obj/item/device/mass_spectrometer
+ name = "mass spectrometer"
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
- name = "mass-spectrometer"
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
@@ -342,7 +342,7 @@ REAGENT SCANNER
return
/obj/item/device/mass_spectrometer/adv
- name = "advanced mass-spectrometer"
+ name = "advanced mass spectrometer"
icon_state = "adv_spectrometer"
details = 1
origin_tech = "magnets=4;biotech=2"
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 21ed5cf2aa..f32b5256b5 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -182,4 +182,4 @@
if (cell)
user << "The charge meter reads [round(cell.percent())]%."
else
- user << "It doesn't have a power cell installed."
\ No newline at end of file
+ user << "It doesn't have a power cell installed."
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 88f5ad1830..f5e43436b9 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -1,6 +1,6 @@
/obj/item/device/taperecorder
- desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
name = "universal recorder"
+ desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
icon_state = "taperecorderidle"
item_state = "analyzer"
w_class = 2.0
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 33149b06a4..52e5e220f2 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -29,7 +29,6 @@ effective or pretty fucking useless.
var/times_used = 0 //Number of times it's been used.
var/max_uses = 2
-
/obj/item/device/batterer/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
if(!user) return
if(times_used >= max_uses)
@@ -55,7 +54,3 @@ effective or pretty fucking useless.
times_used += 1
if(times_used >= max_uses)
icon_state = "battererburnt"
-
-
-
-
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 8cace9a223..36c3b3d11f 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -1,8 +1,8 @@
/obj/item/device/transfer_valve
- icon = 'icons/obj/assemblies.dmi'
name = "tank transfer valve"
- icon_state = "valve_1"
desc = "Regulates the transfer of air between two tanks"
+ icon = 'icons/obj/assemblies.dmi'
+ icon_state = "valve_1"
var/obj/item/weapon/tank/tank_one
var/obj/item/weapon/tank/tank_two
var/obj/item/device/attached_device
@@ -210,4 +210,4 @@
// this doesn't do anything but the timer etc. expects it to be here
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
/obj/item/device/transfer_valve/proc/c_state()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm
index 9b58a812ce..cd2ff9b5fb 100644
--- a/code/game/objects/items/devices/uplinks.dm
+++ b/code/game/objects/items/devices/uplinks.dm
@@ -146,7 +146,7 @@ datum/nano_item_lists
*/
/obj/item/device/uplink/hidden
- name = "Hidden Uplink."
+ name = "hidden uplink"
desc = "There is something wrong if you're examining this."
var/active = 0
diff --git a/code/game/objects/items/devices/violin.dm b/code/game/objects/items/devices/violin.dm
index 63f7828fc8..e116689c9a 100644
--- a/code/game/objects/items/devices/violin.dm
+++ b/code/game/objects/items/devices/violin.dm
@@ -390,4 +390,4 @@
for(var/mob/M in viewers(1, loc))
if((M.client && M.machine == src))
attack_self(M)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm
index 3100b91434..befba4b133 100644
--- a/code/game/objects/items/devices/whistle.dm
+++ b/code/game/objects/items/devices/whistle.dm
@@ -35,4 +35,4 @@
emagged = 1
insults = rand(1, 3)//to prevent dickflooding
return
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm
index a923de6183..e341a8747f 100644
--- a/code/game/objects/items/latexballoon.dm
+++ b/code/game/objects/items/latexballoon.dm
@@ -1,6 +1,6 @@
/obj/item/latexballon
- name = "Latex glove"
- desc = "" //todo
+ name = "latex glove"
+ desc = "A latex glove, usually used as a balloon."
icon_state = "latexballon"
item_state = "lgloves"
force = 0
@@ -45,4 +45,4 @@
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
if (can_puncture(W))
- burst()
\ No newline at end of file
+ burst()
diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm
index a50743a83f..dfc53d3a87 100644
--- a/code/game/objects/items/robot/robot_items.dm
+++ b/code/game/objects/items/robot/robot_items.dm
@@ -40,7 +40,7 @@
/obj/item/borg/sight/xray
- name = "\proper x-ray Vision"
+ name = "\proper x-ray vision"
sight_mode = BORGXRAY
diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm
index 2f0b67d31d..1d92cb9a81 100644
--- a/code/game/objects/items/shooting_range.dm
+++ b/code/game/objects/items/shooting_range.dm
@@ -178,4 +178,4 @@
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
- Target.bulletholes.Add(src)
\ No newline at end of file
+ Target.bulletholes.Add(src)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index eeca2089ee..c87b57b043 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -259,4 +259,4 @@
return
affecting.status |= ORGAN_SPLINTED
use(1)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index db0ab6b088..798c6c0511 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -42,4 +42,4 @@
if (do_surgery(H,user,src))
return
else
- user << "Nothing to fix in here. "
\ No newline at end of file
+ user << "Nothing to fix in here. "
diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm
index 72339452e7..a3e7ed53e2 100644
--- a/code/game/objects/items/stacks/sheets/leather.dm
+++ b/code/game/objects/items/stacks/sheets/leather.dm
@@ -133,4 +133,4 @@
var/obj/item/stack/sheet/leather/HS = new(src.loc)
HS.amount = 1
wetness = initial(wetness)
- src.use(1)
\ No newline at end of file
+ src.use(1)
diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm
index 530c9b5b88..f3b8face4e 100644
--- a/code/game/objects/items/stacks/sheets/mineral.dm
+++ b/code/game/objects/items/stacks/sheets/mineral.dm
@@ -200,4 +200,4 @@ obj/item/stack/sheet/mineral/iron/New()
sheettype = "osmium"
origin_tech = "materials=5"
color = "#9999FF"
- perunit = 2000
\ No newline at end of file
+ perunit = 2000
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index de2973fc79..3a3fe552fc 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -28,7 +28,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
), 2), \
null, \
new/datum/stack_recipe("table parts", /obj/item/weapon/table_parts, 2), \
- new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \
+ new/datum/stack_recipe("rack parts", /obj/item/weapon/table_parts/rack), \
new/datum/stack_recipe("metal baseball bat", /obj/item/weapon/baseballbat/metal, 10, time = 20, one_per_turf = 0, on_floor = 1), \
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1), \
null, \
@@ -200,4 +200,4 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index fdcc6747b6..b140b4e6fd 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -23,4 +23,4 @@
else
for (var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z))
S.add(stack,user)
- ..()*/
\ No newline at end of file
+ ..()*/
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index c3fa049b17..e14c7f2b1e 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -265,4 +265,4 @@
New(title, recipes, req_amount = 1)
src.title = title
src.recipes = recipes
- src.req_amount = req_amount
\ No newline at end of file
+ src.req_amount = req_amount
diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm
index e869c8d0ee..f346d216a7 100644
--- a/code/game/objects/items/stacks/tiles/light.dm
+++ b/code/game/objects/items/stacks/tiles/light.dm
@@ -33,4 +33,4 @@
new/obj/item/stack/light_w(user.loc)
if(amount <= 0)
user.drop_from_inventory(src)
- del(src)
\ No newline at end of file
+ del(src)
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 7ca0d4b223..837824bf39 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -113,7 +113,7 @@
* Fake singularity
*/
/obj/item/toy/spinningtoy
- name = "Gravitational Singularity"
+ name = "gravitational singularity"
desc = "\"Singulo\" brand spinning toy."
icon = 'icons/obj/singularity.dmi'
icon_state = "singularity_s1"
@@ -420,7 +420,7 @@
* Water flower
*/
/obj/item/toy/waterflower
- name = "Water Flower"
+ name = "water flower"
desc = "A seemingly innocent sunflower...with a twist."
icon = 'icons/obj/harvest.dmi'
icon_state = "sunflower"
@@ -645,4 +645,4 @@
item_state = "inflatable"
flags = FPRINT | TABLEPASS
icon = 'icons/obj/clothing/belts.dmi'
- slot_flags = SLOT_BELT
\ No newline at end of file
+ slot_flags = SLOT_BELT
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 756812ccb1..e8bae92fee 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -6,52 +6,67 @@
icon = 'icons/obj/trash.dmi'
w_class = 2.0
desc = "This is rubbish."
- raisins
- name = "4no raisins"
- icon_state= "4no_raisins"
- candy
- name = "Candy"
- icon_state= "candy"
- cheesie
- name = "Cheesie honkers"
- icon_state = "cheesie_honkers"
- chips
- name = "Chips"
- icon_state = "chips"
- popcorn
- name = "Popcorn"
- icon_state = "popcorn"
- sosjerky
- name = "Scaredy's Private Reserve Beef Jerky"
- icon_state = "sosjerky"
- syndi_cakes
- name = "Syndi cakes"
- icon_state = "syndi_cakes"
- waffles
- name = "Waffles"
- icon_state = "waffles"
- plate
- name = "Plate"
- icon_state = "plate"
- snack_bowl
- name = "Snack bowl"
- icon_state = "snack_bowl"
- pistachios
- name = "Pistachios pack"
- icon_state = "pistachios_pack"
- semki
- name = "Semki pack"
- icon_state = "semki_pack"
- tray
- name = "Tray"
- icon_state = "tray"
- candle
- name = "candle"
- icon = 'icons/obj/candle.dmi'
- icon_state = "candle4"
- liquidfood
- name = "\improper \"LiquidFood\" ration"
- icon_state = "liquidfood"
+
+/obj/item/trash/raisins
+ name = "\improper 4no raisins"
+ icon_state= "4no_raisins"
+
+/obj/item/trash/candy
+ name = "candy"
+ icon_state= "candy"
+
+/obj/item/trash/cheesie
+ name = "\improper Cheesie Honkers"
+ icon_state = "cheesie_honkers"
+
+/obj/item/trash/chips
+ name = "chips"
+ icon_state = "chips"
+
+/obj/item/trash/popcorn
+ name = "popcorn"
+ icon_state = "popcorn"
+
+/obj/item/trash/sosjerky
+ name = "Scaredy's Private Reserve Beef Jerky"
+ icon_state = "sosjerky"
+
+/obj/item/trash/syndi_cakes
+ name = "syndi cakes"
+ icon_state = "syndi_cakes"
+
+/obj/item/trash/waffles
+ name = "waffles"
+ icon_state = "waffles"
+
+/obj/item/trash/plate
+ name = "plate"
+ icon_state = "plate"
+
+/obj/item/trash/snack_bowl
+ name = "snack bowl"
+ icon_state = "snack_bowl"
+
+/obj/item/trash/pistachios
+ name = "pistachios pack"
+ icon_state = "pistachios_pack"
+
+/obj/item/trash/semki
+ name = "semki pack"
+ icon_state = "semki_pack"
+
+/obj/item/trash/tray
+ name = "tray"
+ icon_state = "tray"
+
+/obj/item/trash/candle
+ name = "candle"
+ icon = 'icons/obj/candle.dmi'
+ icon_state = "candle4"
+
+/obj/item/trash/liquidfood
+ name = "\improper \"LiquidFood\" ration"
+ icon_state = "liquidfood"
/obj/item/trash/attack(mob/M as mob, mob/living/user as mob)
return
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index d08377a704..fb79d5307f 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -1,6 +1,6 @@
//Contains the rapid construction device.
/obj/item/weapon/rcd
- name = "rapid-construction-device (RCD)"
+ name = "rapid construction device (RCD)"
desc = "A device used to rapidly build walls and floors."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"
@@ -174,4 +174,4 @@
return 0
/obj/item/weapon/rcd/mounted/attackby()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index 45e66d80be..f9f32bbeb1 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -112,4 +112,4 @@ RSF
R.cell.use(used_energy)
else
stored_matter--
- user << "The RSF now holds [stored_matter]/30 fabrication-units."
\ No newline at end of file
+ user << "The RSF now holds [stored_matter]/30 fabrication-units."
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index afd33fdf08..0203bf0846 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -102,6 +102,7 @@
/obj/machinery/door,
/obj/machinery/telecomms,
/obj/machinery/mecha_part_fabricator,
+ /obj/machinery/gibber,
/obj/vehicle
)
diff --git a/code/game/objects/items/weapons/circuitboards/broken.dm b/code/game/objects/items/weapons/circuitboards/broken.dm
new file mode 100644
index 0000000000..ce2cbb7260
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/broken.dm
@@ -0,0 +1,6 @@
+/obj/item/weapon/circuitboard/broken
+ name = "broken electronics"
+ icon = 'icons/obj/doors/door_assembly.dmi'
+ icon_state = "door_electronics_smoked"
+ origin_tech = null
+ board_type = "other"
diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
new file mode 100644
index 0000000000..bc44b3d7df
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
@@ -0,0 +1,38 @@
+//Define a macro that we can use to assemble all the circuit board names
+#ifdef T_BOARD
+#error T_BOARD already defined elsewhere, we can't use it.
+#endif
+#define T_BOARD(name) "circuit board (" + (name) + ")"
+
+/obj/item/weapon/circuitboard
+ name = "circuit board"
+ icon = 'icons/obj/module.dmi'
+ icon_state = "id_mod"
+ item_state = "electronic"
+ origin_tech = "programming=2"
+ density = 0
+ anchored = 0
+ w_class = 2.0
+ flags = FPRINT | TABLEPASS | CONDUCT
+ force = 5.0
+ throwforce = 5.0
+ throw_speed = 3
+ throw_range = 15
+ var/build_path = null
+ var/board_type = "computer"
+ var/list/req_components = null
+ var/frame_desc = null
+ var/contain_parts = 1
+
+//Called when the circuitboard is used to contruct a new machine.
+/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
+ if (istype(M, build_path))
+ return 1
+ return 0
+
+//Called when a computer is deconstructed to produce a circuitboard.
+//Only used by computers, as other machines store their circuitboard instance.
+/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M)
+ if (istype(M, build_path))
+ return 1
+ return 0
diff --git a/code/game/objects/items/weapons/circuitboards/computer/air_management.dm b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm
new file mode 100644
index 0000000000..d244fd6b5c
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/air_management.dm
@@ -0,0 +1,27 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/air_management
+ name = T_BOARD("atmosphere monitoring console")
+ build_path = /obj/machinery/computer/general_air_control
+ var/frequency = 1439
+/obj/item/weapon/circuitboard/air_management/tank_control
+ name = T_BOARD("tank control")
+ build_path = /obj/machinery/computer/general_air_control/large_tank_control
+ frequency = 1441
+/obj/item/weapon/circuitboard/air_management/supermatter_core
+ name = T_BOARD("core control")
+ build_path = /obj/machinery/computer/general_air_control/supermatter_core
+ frequency = 1438
+/obj/item/weapon/circuitboard/air_management/injector_control
+ name = T_BOARD("injector control")
+ build_path = /obj/machinery/computer/general_air_control/fuel_injection
+
+/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C)
+ if (..(C))
+ C.frequency = frequency
+
+/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C)
+ if (..(C))
+ frequency = C.frequency
diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
new file mode 100644
index 0000000000..ff33485f72
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm
@@ -0,0 +1,65 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/security
+ name = T_BOARD("security camera monitor")
+ build_path = /obj/machinery/computer/security
+ var/network = list("SS13")
+ req_access = list(access_security)
+ var/locked = 1
+ var/emagged = 0
+
+/obj/item/weapon/circuitboard/security/engineering
+ name = T_BOARD("engineering camera monitor")
+ build_path = /obj/machinery/computer/security/engineering
+ network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
+ req_access = list()
+
+/obj/item/weapon/circuitboard/security/mining
+ name = T_BOARD("mining camera monitor")
+ build_path = /obj/machinery/computer/security/mining
+ network = list("MINE")
+ req_access = list()
+
+/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
+ if (..(C))
+ C.network = network
+
+/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
+ if (..(C))
+ network = C.network
+
+/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I,/obj/item/weapon/card/emag))
+ if(emagged)
+ user << "Circuit lock is already removed."
+ return
+ user << "\blue You override the circuit lock and open controls."
+ emagged = 1
+ locked = 0
+ else if(istype(I,/obj/item/weapon/card/id))
+ if(emagged)
+ user << "\red Circuit lock does not respond."
+ return
+ if(check_access(I))
+ locked = !locked
+ user << "\blue You [locked ? "" : "un"]lock the circuit controls."
+ else
+ user << "\red Access denied."
+ else if(istype(I,/obj/item/device/multitool))
+ if(locked)
+ user << "\red Circuit controls are locked."
+ return
+ var/existing_networks = list2text(network,",")
+ var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
+ if(!input)
+ usr << "No input found please hang up and try your call again."
+ return
+ var/list/tempnetwork = text2list(input, ",")
+ tempnetwork = difflist(tempnetwork,restricted_camera_networks,1)
+ if(tempnetwork.len < 1)
+ usr << "No network found please hang up and try your call again."
+ return
+ network = tempnetwork
+ return
diff --git a/code/game/objects/items/weapons/circuitboards/computer/computer.dm b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
new file mode 100644
index 0000000000..281f31869c
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/computer.dm
@@ -0,0 +1,190 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/message_monitor
+ name = T_BOARD("message monitor console")
+ build_path = /obj/machinery/computer/message_monitor
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/aiupload
+ name = T_BOARD("AI upload console")
+ build_path = /obj/machinery/computer/aiupload
+ origin_tech = "programming=4"
+
+/obj/item/weapon/circuitboard/borgupload
+ name = T_BOARD("cyborg upload console")
+ build_path = /obj/machinery/computer/borgupload
+ origin_tech = "programming=4"
+
+/obj/item/weapon/circuitboard/med_data
+ name = T_BOARD("medical records console")
+ build_path = /obj/machinery/computer/med_data
+
+/obj/item/weapon/circuitboard/pandemic
+ name = T_BOARD("PanD.E.M.I.C. 2200")
+ build_path = /obj/machinery/computer/pandemic
+ origin_tech = "programming=2;biotech=2"
+
+/obj/item/weapon/circuitboard/scan_consolenew
+ name = T_BOARD("DNA machine")
+ build_path = /obj/machinery/computer/scan_consolenew
+ origin_tech = "programming=2;biotech=2"
+
+/obj/item/weapon/circuitboard/communications
+ name = T_BOARD("command and communications console")
+ build_path = /obj/machinery/computer/communications
+ origin_tech = "programming=2;magnets=2"
+
+/obj/item/weapon/circuitboard/card
+ name = T_BOARD("ID card modification console")
+ build_path = /obj/machinery/computer/card
+
+/obj/item/weapon/circuitboard/card/centcom
+ name = T_BOARD("CentCom ID card modification console")
+ build_path = /obj/machinery/computer/card/centcom
+
+/obj/item/weapon/circuitboard/teleporter
+ name = T_BOARD("teleporter control console")
+ build_path = /obj/machinery/computer/teleporter
+ origin_tech = "programming=2;bluespace=2"
+
+/obj/item/weapon/circuitboard/secure_data
+ name = T_BOARD("security records console")
+ build_path = /obj/machinery/computer/secure_data
+
+/obj/item/weapon/circuitboard/skills
+ name = T_BOARD("employment records console")
+ build_path = /obj/machinery/computer/skills
+
+/obj/item/weapon/circuitboard/stationalert
+ name = T_BOARD("station alert console")
+ build_path = /obj/machinery/computer/station_alert
+
+/obj/item/weapon/circuitboard/atmos_alert
+ name = T_BOARD("atmospheric alert console")
+ build_path = /obj/machinery/computer/atmos_alert
+
+/obj/item/weapon/circuitboard/pod
+ name = T_BOARD("massdriver control")
+ build_path = /obj/machinery/computer/pod
+
+/obj/item/weapon/circuitboard/robotics
+ name = T_BOARD("robotics control console")
+ build_path = /obj/machinery/computer/robotics
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/drone_control
+ name = T_BOARD("drone control console")
+ build_path = /obj/machinery/computer/drone_control
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/cloning
+ name = T_BOARD("cloning control console")
+ build_path = /obj/machinery/computer/cloning
+ origin_tech = "programming=3;biotech=3"
+
+/obj/item/weapon/circuitboard/arcade
+ name = T_BOARD("arcade machine")
+ build_path = /obj/machinery/computer/arcade
+ origin_tech = "programming=1"
+
+/obj/item/weapon/circuitboard/turbine_control
+ name = T_BOARD("turbine control console")
+ build_path = /obj/machinery/computer/turbine_computer
+
+/obj/item/weapon/circuitboard/solar_control
+ name = T_BOARD("solar control console")
+ build_path = /obj/machinery/power/solar_control
+ origin_tech = "programming=2;powerstorage=2"
+
+/obj/item/weapon/circuitboard/powermonitor
+ name = T_BOARD("power monitoring console")
+ build_path = /obj/machinery/computer/power_monitor
+
+/obj/item/weapon/circuitboard/olddoor
+ name = T_BOARD("DoorMex")
+ build_path = /obj/machinery/computer/pod/old
+
+/obj/item/weapon/circuitboard/syndicatedoor
+ name = T_BOARD("ProComp Executive")
+ build_path = /obj/machinery/computer/pod/old/syndicate
+
+/obj/item/weapon/circuitboard/swfdoor
+ name = T_BOARD("Magix")
+ build_path = /obj/machinery/computer/pod/old/swf
+
+/obj/item/weapon/circuitboard/prisoner
+ name = T_BOARD("prisoner management console")
+ build_path = /obj/machinery/computer/prisoner
+
+/obj/item/weapon/circuitboard/mecha_control
+ name = T_BOARD("exosuit control console")
+ build_path = /obj/machinery/computer/mecha
+
+/obj/item/weapon/circuitboard/rdservercontrol
+ name = T_BOARD("R&D server control console")
+ build_path = /obj/machinery/computer/rdservercontrol
+
+/obj/item/weapon/circuitboard/crew
+ name = T_BOARD("crew monitoring console")
+ build_path = /obj/machinery/computer/crew
+ origin_tech = "programming=3;biotech=2;magnets=2"
+
+/obj/item/weapon/circuitboard/mech_bay_power_console
+ name = T_BOARD("mech bay power control console")
+ build_path = /obj/machinery/computer/mech_bay_power_console
+ origin_tech = "programming=2;powerstorage=3"
+
+/obj/item/weapon/circuitboard/operating
+ name = T_BOARD("patient monitoring console")
+ build_path = /obj/machinery/computer/operating
+ origin_tech = "programming=2;biotech=2"
+
+/obj/item/weapon/circuitboard/curefab
+ name = T_BOARD("cure fabricator")
+ build_path = /obj/machinery/computer/curer
+
+/obj/item/weapon/circuitboard/splicer
+ name = T_BOARD("disease splicer")
+ build_path = /obj/machinery/computer/diseasesplicer
+
+/obj/item/weapon/circuitboard/ordercomp
+ name = T_BOARD("supply ordering console")
+ build_path = /obj/machinery/computer/ordercomp
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/mining_shuttle
+ name = T_BOARD("mining shuttle console")
+ build_path = /obj/machinery/computer/shuttle_control/mining
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/engineering_shuttle
+ name = T_BOARD("engineering shuttle console")
+ build_path = /obj/machinery/computer/shuttle_control/engineering
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/research_shuttle
+ name = T_BOARD("research shuttle console")
+ build_path = /obj/machinery/computer/shuttle_control/research
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/aifixer
+ name = T_BOARD("AI integrity restorer")
+ build_path = /obj/machinery/computer/aifixer
+ origin_tech = "programming=3;biotech=2"
+
+/obj/item/weapon/circuitboard/area_atmos
+ name = T_BOARD("area air control console")
+ build_path = /obj/machinery/computer/area_atmos
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/prison_shuttle
+ name = T_BOARD("prison shuttle control console")
+ build_path = /obj/machinery/computer/prison_shuttle
+ origin_tech = "programming=2"
+
+/obj/item/weapon/circuitboard/rcon_console
+ name = T_BOARD("RCON remote control console")
+ build_path = /obj/machinery/computer/rcon
+ origin_tech = "programming=4;engineering=3;powerstorage=5"
diff --git a/code/game/objects/items/weapons/circuitboards/computer/research.dm b/code/game/objects/items/weapons/circuitboards/computer/research.dm
new file mode 100644
index 0000000000..48ab7333ce
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/research.dm
@@ -0,0 +1,20 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/rdconsole
+ name = T_BOARD("R&D control console")
+ build_path = /obj/machinery/computer/rdconsole/core
+
+/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I,/obj/item/weapon/screwdriver))
+ user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
+ if(src.build_path == /obj/machinery/computer/rdconsole/core)
+ src.name = T_BOARD("RD Console - Robotics")
+ src.build_path = /obj/machinery/computer/rdconsole/robotics
+ user << "\blue Access protocols set to robotics."
+ else
+ src.name = T_BOARD("RD Console")
+ src.build_path = /obj/machinery/computer/rdconsole/core
+ user << "\blue Access protocols set to default."
+ return
diff --git a/code/game/objects/items/weapons/circuitboards/computer/supply.dm b/code/game/objects/items/weapons/circuitboards/computer/supply.dm
new file mode 100644
index 0000000000..84c9aa3476
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/supply.dm
@@ -0,0 +1,39 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/supplycomp
+ name = T_BOARD("supply control console")
+ build_path = /obj/machinery/computer/supplycomp
+ origin_tech = "programming=3"
+ var/contraband_enabled = 0
+
+/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
+ if (..(SC))
+ SC.can_order_contraband = contraband_enabled
+
+/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC)
+ if (..(SC))
+ contraband_enabled = SC.can_order_contraband
+
+/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I,/obj/item/device/multitool))
+ var/catastasis = src.contraband_enabled
+ var/opposite_catastasis
+ if(catastasis)
+ opposite_catastasis = "STANDARD"
+ catastasis = "BROAD"
+ else
+ opposite_catastasis = "BROAD"
+ catastasis = "STANDARD"
+
+ switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
+ //switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
+ if("Switch to STANDARD","Switch to BROAD")
+ src.contraband_enabled = !src.contraband_enabled
+
+ if("Cancel")
+ return
+ else
+ user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
+ return
diff --git a/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm
new file mode 100644
index 0000000000..9a18f0df99
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/computer/telecomms.dm
@@ -0,0 +1,18 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/comm_monitor
+ name = T_BOARD("telecommunications monitor console")
+ build_path = /obj/machinery/computer/telecomms/monitor
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/comm_server
+ name = T_BOARD("telecommunications server monitor console")
+ build_path = /obj/machinery/computer/telecomms/server
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/comm_traffic
+ name = T_BOARD("telecommunications traffic control console")
+ build_path = /obj/machinery/computer/telecomms/traffic
+ origin_tech = "programming=3"
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
new file mode 100644
index 0000000000..fdc0865f9c
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/cloning.dm
@@ -0,0 +1,28 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/clonepod
+ name = T_BOARD("clone pod")
+ build_path = "/obj/machinery/clonepod"
+ board_type = "machine"
+ origin_tech = "programming=3;biotech=3"
+ frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen."
+ req_components = list(
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/scanning_module" = 2,
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/weapon/stock_parts/console_screen" = 1)
+
+/obj/item/weapon/circuitboard/clonescanner
+ name = T_BOARD("cloning scanner")
+ build_path = "/obj/machinery/dna_scannernew"
+ board_type = "machine"
+ origin_tech = "programming=2;biotech=2"
+ frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/scanning_module" = 1,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1,
+ "/obj/item/weapon/stock_parts/console_screen" = 1,
+ "/obj/item/stack/cable_coil" = 2)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
new file mode 100644
index 0000000000..77d313e414
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/pacman.dm
@@ -0,0 +1,25 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/pacman
+ name = T_BOARD("PACMAN-type generator")
+ build_path = "/obj/machinery/power/port_gen/pacman"
+ board_type = "machine"
+ origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
+ frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1,
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/capacitor" = 1)
+
+/obj/item/weapon/circuitboard/pacman/super
+ name = T_BOARD("SUPERPACMAN-type generator")
+ build_path = "/obj/machinery/power/port_gen/pacman/super"
+ origin_tech = "programming=3;powerstorage=4;engineering=4"
+
+/obj/item/weapon/circuitboard/pacman/mrs
+ name = T_BOARD("MRSPACMAN-type generator")
+ build_path = "/obj/machinery/power/port_gen/pacman/mrs"
+ origin_tech = "programming=3;powerstorage=5;engineering=5"
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/power.dm b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
new file mode 100644
index 0000000000..80955b1b8e
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/power.dm
@@ -0,0 +1,27 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/smes
+ name = T_BOARD("superconductive magnetic energy storage")
+ build_path = "/obj/machinery/power/smes/buildable"
+ board_type = "machine"
+ origin_tech = "powerstorage=6;engineering=4"
+ frame_desc = "Requires 1 superconducting magnetic coil and 30 wires."
+ req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
+
+/obj/item/weapon/circuitboard/batteryrack
+ name = T_BOARD("battery rack PSU")
+ build_path = "/obj/machinery/power/smes/batteryrack"
+ board_type = "machine"
+ origin_tech = "powerstorage=3;engineering=2"
+ frame_desc = "Requires 3 power cells."
+ req_components = list("/obj/item/weapon/cell" = 3)
+
+/obj/item/weapon/circuitboard/ghettosmes
+ name = T_BOARD("makeshift PSU")
+ desc = "An APC circuit repurposed into some power storage device controller"
+ build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
+ board_type = "machine"
+ frame_desc = "Requires 3 power cells."
+ req_components = list("/obj/item/weapon/cell" = 3)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
new file mode 100644
index 0000000000..9853150b17
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm
@@ -0,0 +1,70 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+obj/item/weapon/circuitboard/rdserver
+ name = T_BOARD("R&D server")
+ build_path = "/obj/machinery/r_n_d/server"
+ board_type = "machine"
+ origin_tech = "programming=3"
+ frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
+ req_components = list(
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/scanning_module" = 1)
+
+/obj/item/weapon/circuitboard/destructive_analyzer
+ name = T_BOARD("destructive analyzer")
+ build_path = "/obj/machinery/r_n_d/destructive_analyzer"
+ board_type = "machine"
+ origin_tech = "magnets=2;engineering=2;programming=2"
+ frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/scanning_module" = 1,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1)
+
+/obj/item/weapon/circuitboard/autolathe
+ name = T_BOARD("autolathe")
+ build_path = "/obj/machinery/autolathe"
+ board_type = "machine"
+ origin_tech = "engineering=2;programming=2"
+ frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 3,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/stock_parts/console_screen" = 1)
+
+/obj/item/weapon/circuitboard/protolathe
+ name = T_BOARD("protolathe")
+ build_path = "/obj/machinery/r_n_d/protolathe"
+ board_type = "machine"
+ origin_tech = "engineering=2;programming=2"
+ frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 2,
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
+
+
+/obj/item/weapon/circuitboard/circuit_imprinter
+ name = T_BOARD("circuit imprinter")
+ build_path = "/obj/machinery/r_n_d/circuit_imprinter"
+ board_type = "machine"
+ origin_tech = "engineering=2;programming=2"
+ frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 1,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/reagent_containers/glass/beaker" = 2)
+
+/obj/item/weapon/circuitboard/mechfab
+ name = "Circuit board (Exosuit Fabricator)"
+ build_path = "/obj/machinery/mecha_part_fabricator"
+ board_type = "machine"
+ origin_tech = "programming=3;engineering=3"
+ frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/matter_bin" = 2,
+ "/obj/item/weapon/stock_parts/manipulator" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1,
+ "/obj/item/weapon/stock_parts/console_screen" = 1)
diff --git a/code/modules/shieldgen/circuits_and_designs.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
similarity index 53%
rename from code/modules/shieldgen/circuits_and_designs.dm
rename to code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
index a831d40798..6e892a6603 100644
--- a/code/modules/shieldgen/circuits_and_designs.dm
+++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm
@@ -1,9 +1,9 @@
-
-////////////////////////////////////////
-// External Shield Generator
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
/obj/item/weapon/circuitboard/shield_gen_ex
- name = "Circuit board (Hull shield generator)"
+ name = T_BOARD("hull shield generator")
board_type = "machine"
build_path = "/obj/machinery/shield_gen/external"
origin_tech = "bluespace=4;phorontech=3"
@@ -16,22 +16,10 @@
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
-datum/design/shield_gen_ex
- name = "Circuit Design (Experimental hull shield generator)"
- desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator."
- id = "shield_gen"
- req_tech = list("bluespace" = 4, "phorontech" = 3)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
- build_path = "/obj/machinery/shield_gen/external"
-
-////////////////////////////////////////
-// Shield Generator
-
/obj/item/weapon/circuitboard/shield_gen
- name = "Circuit board (Bubble shield generator)"
+ name = T_BOARD("bubble shield generator")
board_type = "machine"
- build_path = "/obj/machinery/shield_gen/external"
+ build_path = "/obj/machinery/shield_gen"
origin_tech = "bluespace=4;phorontech=3"
frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen."
req_components = list(
@@ -42,20 +30,8 @@ datum/design/shield_gen_ex
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
-datum/design/shield_gen
- name = "Circuit Design (Bubble shield generator)"
- desc = "Allows for the construction of circuit boards used to build an experimental shield generator."
- id = "shield_gen"
- req_tech = list("bluespace" = 4, "phorontech" = 3)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
- build_path = "/obj/machinery/shield_gen/external"
-
-////////////////////////////////////////
-// Shield Capacitor
-
/obj/item/weapon/circuitboard/shield_cap
- name = "Circuit board (Shield capacitor)"
+ name = T_BOARD("shield capacitor")
board_type = "machine"
build_path = "/obj/machinery/shield_capacitor"
origin_tech = "magnets=3;powerstorage=4"
@@ -67,12 +43,3 @@ datum/design/shield_gen
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
-
-datum/design/shield_cap
- name = "Circuit Design (Shield capacitor)"
- desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor."
- id = "shield_cap"
- req_tech = list("magnets" = 3, "powerstorage" = 4)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$silver" = 10000)
- build_path = "/obj/machinery/shield_gen/external"
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
new file mode 100644
index 0000000000..a312d2995a
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/telecomms.dm
@@ -0,0 +1,82 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/telecomms
+ board_type = "machine"
+
+/obj/item/weapon/circuitboard/telecomms/receiver
+ name = T_BOARD("subspace receiver")
+ build_path = "/obj/machinery/telecomms/receiver"
+ origin_tech = "programming=4;engineering=3;bluespace=2"
+ frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/subspace/ansible" = 1,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 1,
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/weapon/stock_parts/micro_laser" = 1)
+
+/obj/item/weapon/circuitboard/telecomms/hub
+ name = T_BOARD("hub mainframe")
+ build_path = "/obj/machinery/telecomms/hub"
+ origin_tech = "programming=4;engineering=4"
+ frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 2)
+
+/obj/item/weapon/circuitboard/telecomms/relay
+ name = T_BOARD("relay mainframe")
+ build_path = "/obj/machinery/telecomms/relay"
+ origin_tech = "programming=3;engineering=4;bluespace=3"
+ frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 2)
+
+/obj/item/weapon/circuitboard/telecomms/bus
+ name = T_BOARD("bus mainframe")
+ build_path = "/obj/machinery/telecomms/bus"
+ origin_tech = "programming=4;engineering=4"
+ frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/stack/cable_coil" = 1,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 1)
+
+/obj/item/weapon/circuitboard/telecomms/processor
+ name = T_BOARD("processor unit")
+ build_path = "/obj/machinery/telecomms/processor"
+ origin_tech = "programming=4;engineering=4"
+ frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 3,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 1,
+ "/obj/item/weapon/stock_parts/subspace/treatment" = 2,
+ "/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/subspace/amplifier" = 1)
+
+/obj/item/weapon/circuitboard/telecomms/server
+ name = T_BOARD("telecommunication server")
+ build_path = "/obj/machinery/telecomms/server"
+ origin_tech = "programming=4;engineering=4"
+ frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/stack/cable_coil" = 1,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 1)
+
+/obj/item/weapon/circuitboard/telecomms/broadcaster
+ name = T_BOARD("subspace broadcaster")
+ build_path = "/obj/machinery/telecomms/broadcaster"
+ origin_tech = "programming=4;engineering=4;bluespace=2"
+ frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
+ req_components = list(
+ "/obj/item/weapon/stock_parts/manipulator" = 2,
+ "/obj/item/stack/cable_coil" = 1,
+ "/obj/item/weapon/stock_parts/subspace/filter" = 1,
+ "/obj/item/weapon/stock_parts/subspace/crystal" = 1,
+ "/obj/item/weapon/stock_parts/micro_laser/high" = 2)
diff --git a/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
new file mode 100644
index 0000000000..db76bbcc8e
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/machinery/unary_atmos.dm
@@ -0,0 +1,35 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/unary_atmos
+ board_type = "machine"
+
+/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
+ //TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
+ U.initialize()
+ U.build_network()
+ if (U.node)
+ U.node.initialize()
+ U.node.build_network()
+
+/obj/item/weapon/circuitboard/unary_atmos/heater
+ name = T_BOARD("gas heating system")
+ build_path = "/obj/machinery/atmospherics/unary/heater"
+ origin_tech = "powerstorage=2;engineering=1"
+ frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors."
+ req_components = list(
+ "/obj/item/stack/cable_coil" = 5,
+ "/obj/item/weapon/stock_parts/matter_bin" = 1,
+ "/obj/item/weapon/stock_parts/capacitor" = 2)
+
+/obj/item/weapon/circuitboard/unary_atmos/cooler
+ name = T_BOARD("gas cooling system")
+ build_path = "/obj/machinery/atmospherics/unary/freezer"
+ origin_tech = "magnets=2;engineering=2"
+ frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors."
+ req_components = list(
+ "/obj/item/stack/cable_coil" = 2,
+ "/obj/item/weapon/stock_parts/matter_bin" = 1,
+ "/obj/item/weapon/stock_parts/capacitor" = 2,
+ "/obj/item/weapon/stock_parts/manipulator" = 1)
diff --git a/code/game/objects/items/weapons/circuitboards/mecha.dm b/code/game/objects/items/weapons/circuitboards/mecha.dm
new file mode 100644
index 0000000000..ad859479c5
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/mecha.dm
@@ -0,0 +1,88 @@
+#ifdef T_BOARD_MECHA
+#error T_BOARD_MECHA already defined elsewhere, we can't use it.
+#endif
+#define T_BOARD_MECHA(name) "exosuit module circuit board (" + (name) + ")"
+
+/obj/item/weapon/circuitboard/mecha
+ name = "exosuit circuit board"
+ icon = 'icons/obj/module.dmi'
+ icon_state = "std_mod"
+ item_state = "electronic"
+ board_type = "other"
+
+
+/obj/item/weapon/circuitboard/mecha/ripley
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/mecha/ripley/peripherals
+ name = T_BOARD_MECHA("Ripley peripherals control")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/ripley/main
+ name = T_BOARD_MECHA("Ripley central control")
+ icon_state = "mainboard"
+
+
+/obj/item/weapon/circuitboard/mecha/gygax
+ origin_tech = "programming=4"
+
+/obj/item/weapon/circuitboard/mecha/gygax/peripherals
+ name = T_BOARD_MECHA("Gygax peripherals control")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/gygax/targeting
+ name = T_BOARD_MECHA("Gygax weapon control and targeting")
+ icon_state = "mcontroller"
+ origin_tech = "programming=4;combat=4"
+
+/obj/item/weapon/circuitboard/mecha/gygax/main
+ name = T_BOARD_MECHA("Gygax central control")
+ icon_state = "mainboard"
+
+
+/obj/item/weapon/circuitboard/mecha/durand
+ origin_tech = "programming=4"
+
+/obj/item/weapon/circuitboard/mecha/durand/peripherals
+ name = T_BOARD_MECHA("Durand peripherals control")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/durand/targeting
+ name = T_BOARD_MECHA("Durand weapon control and targeting")
+ icon_state = "mcontroller"
+ origin_tech = "programming=4;combat=4"
+
+/obj/item/weapon/circuitboard/mecha/durand/main
+ name = T_BOARD_MECHA("Durand central control")
+ icon_state = "mainboard"
+
+
+/obj/item/weapon/circuitboard/mecha/honker
+ origin_tech = "programming=4"
+
+/obj/item/weapon/circuitboard/mecha/honker/peripherals
+ name = T_BOARD_MECHA("H.O.N.K peripherals control")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/honker/targeting
+ name = T_BOARD_MECHA("H.O.N.K weapon control and targeting")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/honker/main
+ name = T_BOARD_MECHA("H.O.N.K central control")
+ icon_state = "mainboard"
+
+
+/obj/item/weapon/circuitboard/mecha/odysseus
+ origin_tech = "programming=3"
+
+/obj/item/weapon/circuitboard/mecha/odysseus/peripherals
+ name = T_BOARD_MECHA("Odysseus peripherals control")
+ icon_state = "mcontroller"
+
+/obj/item/weapon/circuitboard/mecha/odysseus/main
+ name = T_BOARD_MECHA("Odysseus central control")
+ icon_state = "mainboard"
+
+//Undef the macro, shouldn't be needed anywhere else
+#undef T_BOARD_MECHA
diff --git a/code/game/objects/items/weapons/circuitboards/other.dm b/code/game/objects/items/weapons/circuitboards/other.dm
new file mode 100644
index 0000000000..ec38643bed
--- /dev/null
+++ b/code/game/objects/items/weapons/circuitboards/other.dm
@@ -0,0 +1,10 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+//Stuff that doesn't fit into any category goes here
+
+/obj/item/weapon/circuitboard/aicore
+ name = T_BOARD("AI core")
+ origin_tech = "programming=4;biotech=2"
+ board_type = "other"
diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm
index 3ae5094dd0..656197fee0 100644
--- a/code/game/objects/items/weapons/clown_items.dm
+++ b/code/game/objects/items/weapons/clown_items.dm
@@ -9,31 +9,16 @@
* Banana Peals
*/
/obj/item/weapon/bananapeel/Crossed(AM as mob|obj)
- if (istype(AM, /mob/living/carbon))
- var/mob/M = AM
- if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled)
- return
-
- M.stop_pulling()
- M << "\blue You slipped on the [name]!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(4)
- M.Weaken(2)
-
+ if (istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.slip("the [src.name]",4)
/*
* Soap
*/
/obj/item/weapon/soap/Crossed(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
- if (istype(AM, /mob/living/carbon))
- var/mob/M = AM
- if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled)
- return
-
- M.stop_pulling()
- M << "\blue You slipped on the [name]!"
- playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(3)
- M.Weaken(2)
+ if (istype(AM, /mob/living))
+ var/mob/living/M = AM
+ M.slip("the [src.name]",3)
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob, proximity)
if(!proximity) return
@@ -65,4 +50,4 @@
src.add_fingerprint(user)
spawn(20)
spam_flag = 0
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm
index 72c4589343..c0db7773a8 100644
--- a/code/game/objects/items/weapons/dice.dm
+++ b/code/game/objects/items/weapons/dice.dm
@@ -26,4 +26,4 @@
icon_state = "[name][result]"
user.visible_message("[user] has thrown [src]. It lands on [result]. [comment] ", \
"You throw [src]. It lands on a [result]. [comment] ", \
- "You hear [src] landing on a [result]. [comment] ")
\ No newline at end of file
+ "You hear [src] landing on a [result]. [comment] ")
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index e41b29364e..651cc2e27f 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -1,5 +1,5 @@
/obj/item/weapon/dnainjector
- name = "DNA-Injector"
+ name = "\improper DNA injector"
desc = "This injects the person with DNA."
icon = 'icons/obj/items.dmi'
icon_state = "dnainjector"
@@ -194,7 +194,7 @@
/obj/item/weapon/dnainjector/hulkmut
- name = "DNA-Injector (Hulk)"
+ name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -204,7 +204,7 @@
..()
/obj/item/weapon/dnainjector/antihulk
- name = "DNA-Injector (Anti-Hulk)"
+ name = "\improper DNA injector (Anti-Hulk)"
desc = "Cures green skin."
datatype = DNA2_BUF_SE
value = 0x001
@@ -214,7 +214,7 @@
..()
/obj/item/weapon/dnainjector/xraymut
- name = "DNA-Injector (Xray)"
+ name = "\improper DNA injector (Xray)"
desc = "Finally you can see what the Captain does."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -224,7 +224,7 @@
..()
/obj/item/weapon/dnainjector/antixray
- name = "DNA-Injector (Anti-Xray)"
+ name = "\improper DNA injector (Anti-Xray)"
desc = "It will make you see harder."
datatype = DNA2_BUF_SE
value = 0x001
@@ -234,7 +234,7 @@
..()
/obj/item/weapon/dnainjector/firemut
- name = "DNA-Injector (Fire)"
+ name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -244,7 +244,7 @@
..()
/obj/item/weapon/dnainjector/antifire
- name = "DNA-Injector (Anti-Fire)"
+ name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
datatype = DNA2_BUF_SE
value = 0x001
@@ -254,7 +254,7 @@
..()
/obj/item/weapon/dnainjector/telemut
- name = "DNA-Injector (Tele.)"
+ name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -264,7 +264,7 @@
..()
/obj/item/weapon/dnainjector/antitele
- name = "DNA-Injector (Anti-Tele.)"
+ name = "\improper DNA injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
datatype = DNA2_BUF_SE
value = 0x001
@@ -274,7 +274,7 @@
..()
/obj/item/weapon/dnainjector/nobreath
- name = "DNA-Injector (No Breath)"
+ name = "\improper DNA injector (No Breath)"
desc = "Hold your breath and count to infinity."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -284,7 +284,7 @@
..()
/obj/item/weapon/dnainjector/antinobreath
- name = "DNA-Injector (Anti-No Breath)"
+ name = "\improper DNA injector (Anti-No Breath)"
desc = "Hold your breath and count to 100."
datatype = DNA2_BUF_SE
value = 0x001
@@ -294,7 +294,7 @@
..()
/obj/item/weapon/dnainjector/remoteview
- name = "DNA-Injector (Remote View)"
+ name = "\improper DNA injector (Remote View)"
desc = "Stare into the distance for a reason."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -304,7 +304,7 @@
..()
/obj/item/weapon/dnainjector/antiremoteview
- name = "DNA-Injector (Anti-Remote View)"
+ name = "\improper DNA injector (Anti-Remote View)"
desc = "Cures green skin."
datatype = DNA2_BUF_SE
value = 0x001
@@ -314,7 +314,7 @@
..()
/obj/item/weapon/dnainjector/regenerate
- name = "DNA-Injector (Regeneration)"
+ name = "\improper DNA injector (Regeneration)"
desc = "Healthy but hungry."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -324,7 +324,7 @@
..()
/obj/item/weapon/dnainjector/antiregenerate
- name = "DNA-Injector (Anti-Regeneration)"
+ name = "\improper DNA injector (Anti-Regeneration)"
desc = "Sickly but sated."
datatype = DNA2_BUF_SE
value = 0x001
@@ -334,7 +334,7 @@
..()
/obj/item/weapon/dnainjector/runfast
- name = "DNA-Injector (Increase Run)"
+ name = "\improper DNA injector (Increase Run)"
desc = "Running Man."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -344,7 +344,7 @@
..()
/obj/item/weapon/dnainjector/antirunfast
- name = "DNA-Injector (Anti-Increase Run)"
+ name = "\improper DNA injector (Anti-Increase Run)"
desc = "Walking Man."
datatype = DNA2_BUF_SE
value = 0x001
@@ -354,7 +354,7 @@
..()
/obj/item/weapon/dnainjector/morph
- name = "DNA-Injector (Morph)"
+ name = "\improper DNA injector (Morph)"
desc = "A total makeover."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -364,7 +364,7 @@
..()
/obj/item/weapon/dnainjector/antimorph
- name = "DNA-Injector (Anti-Morph)"
+ name = "\improper DNA injector (Anti-Morph)"
desc = "Cures identity crisis."
datatype = DNA2_BUF_SE
value = 0x001
@@ -375,7 +375,7 @@
/* No COLDBLOCK on bay
/obj/item/weapon/dnainjector/cold
- name = "DNA-Injector (Cold)"
+ name = "\improper DNA injector (Cold)"
desc = "Feels a bit chilly."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -385,7 +385,7 @@
..()
/obj/item/weapon/dnainjector/anticold
- name = "DNA-Injector (Anti-Cold)"
+ name = "\improper DNA injector (Anti-Cold)"
desc = "Feels room-temperature."
datatype = DNA2_BUF_SE
value = 0x001
@@ -396,7 +396,7 @@
*/
/obj/item/weapon/dnainjector/noprints
- name = "DNA-Injector (No Prints)"
+ name = "\improper DNA injector (No Prints)"
desc = "Better than a pair of budget insulated gloves."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -406,7 +406,7 @@
..()
/obj/item/weapon/dnainjector/antinoprints
- name = "DNA-Injector (Anti-No Prints)"
+ name = "\improper DNA injector (Anti-No Prints)"
desc = "Not quite as good as a pair of budget insulated gloves."
datatype = DNA2_BUF_SE
value = 0x001
@@ -416,7 +416,7 @@
..()
/obj/item/weapon/dnainjector/insulation
- name = "DNA-Injector (Shock Immunity)"
+ name = "\improper DNA injector (Shock Immunity)"
desc = "Better than a pair of real insulated gloves."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -426,7 +426,7 @@
..()
/obj/item/weapon/dnainjector/antiinsulation
- name = "DNA-Injector (Anti-Shock Immunity)"
+ name = "\improper DNA injector (Anti-Shock Immunity)"
desc = "Not quite as good as a pair of real insulated gloves."
datatype = DNA2_BUF_SE
value = 0x001
@@ -436,7 +436,7 @@
..()
/obj/item/weapon/dnainjector/midgit
- name = "DNA-Injector (Small Size)"
+ name = "\improper DNA injector (Small Size)"
desc = "Makes you shrink."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -446,7 +446,7 @@
..()
/obj/item/weapon/dnainjector/antimidgit
- name = "DNA-Injector (Anti-Small Size)"
+ name = "\improper DNA injector (Anti-Small Size)"
desc = "Makes you grow. But not too much."
datatype = DNA2_BUF_SE
value = 0x001
@@ -457,7 +457,7 @@
/////////////////////////////////////
/obj/item/weapon/dnainjector/antiglasses
- name = "DNA-Injector (Anti-Glasses)"
+ name = "\improper DNA injector (Anti-Glasses)"
desc = "Toss away those glasses!"
datatype = DNA2_BUF_SE
value = 0x001
@@ -467,7 +467,7 @@
..()
/obj/item/weapon/dnainjector/glassesmut
- name = "DNA-Injector (Glasses)"
+ name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -477,7 +477,7 @@
..()
/obj/item/weapon/dnainjector/epimut
- name = "DNA-Injector (Epi.)"
+ name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -487,7 +487,7 @@
..()
/obj/item/weapon/dnainjector/antiepi
- name = "DNA-Injector (Anti-Epi.)"
+ name = "\improper DNA injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."
datatype = DNA2_BUF_SE
value = 0x001
@@ -497,7 +497,7 @@
..()
/obj/item/weapon/dnainjector/anticough
- name = "DNA-Injector (Anti-Cough)"
+ name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that awful noise."
datatype = DNA2_BUF_SE
value = 0x001
@@ -507,7 +507,7 @@
..()
/obj/item/weapon/dnainjector/coughmut
- name = "DNA-Injector (Cough)"
+ name = "\improper DNA injector (Cough)"
desc = "Will bring forth a sound of horror from your throat."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -517,7 +517,7 @@
..()
/obj/item/weapon/dnainjector/clumsymut
- name = "DNA-Injector (Clumsy)"
+ name = "\improper DNA injector (Clumsy)"
desc = "Makes clumsy minions."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -527,7 +527,7 @@
..()
/obj/item/weapon/dnainjector/anticlumsy
- name = "DNA-Injector (Anti-Clumy)"
+ name = "\improper DNA injector (Anti-Clumy)"
desc = "Cleans up confusion."
datatype = DNA2_BUF_SE
value = 0x001
@@ -537,7 +537,7 @@
..()
/obj/item/weapon/dnainjector/antitour
- name = "DNA-Injector (Anti-Tour.)"
+ name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
datatype = DNA2_BUF_SE
value = 0x001
@@ -547,7 +547,7 @@
..()
/obj/item/weapon/dnainjector/tourmut
- name = "DNA-Injector (Tour.)"
+ name = "\improper DNA injector (Tour.)"
desc = "Gives you a nasty case off tourrets."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -557,7 +557,7 @@
..()
/obj/item/weapon/dnainjector/stuttmut
- name = "DNA-Injector (Stutt.)"
+ name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -567,7 +567,7 @@
..()
/obj/item/weapon/dnainjector/antistutt
- name = "DNA-Injector (Anti-Stutt.)"
+ name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
datatype = DNA2_BUF_SE
value = 0x001
@@ -577,7 +577,7 @@
..()
/obj/item/weapon/dnainjector/blindmut
- name = "DNA-Injector (Blind)"
+ name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -587,7 +587,7 @@
..()
/obj/item/weapon/dnainjector/antiblind
- name = "DNA-Injector (Anti-Blind)"
+ name = "\improper DNA injector (Anti-Blind)"
desc = "ITS A MIRACLE!!!"
datatype = DNA2_BUF_SE
value = 0x001
@@ -597,7 +597,7 @@
..()
/obj/item/weapon/dnainjector/deafmut
- name = "DNA-Injector (Deaf)"
+ name = "\improper DNA injector (Deaf)"
desc = "Sorry, what did you say?"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -607,7 +607,7 @@
..()
/obj/item/weapon/dnainjector/antideaf
- name = "DNA-Injector (Anti-Deaf)"
+ name = "\improper DNA injector (Anti-Deaf)"
desc = "Will make you hear once more."
datatype = DNA2_BUF_SE
value = 0x001
@@ -617,7 +617,7 @@
..()
/obj/item/weapon/dnainjector/hallucination
- name = "DNA-Injector (Halluctination)"
+ name = "\improper DNA injector (Halluctination)"
desc = "What you see isn't always what you get."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -627,7 +627,7 @@
..()
/obj/item/weapon/dnainjector/antihallucination
- name = "DNA-Injector (Anti-Hallucination)"
+ name = "\improper DNA injector (Anti-Hallucination)"
desc = "What you see is what you get."
datatype = DNA2_BUF_SE
value = 0x001
@@ -637,7 +637,7 @@
..()
/obj/item/weapon/dnainjector/h2m
- name = "DNA-Injector (Human > Monkey)"
+ name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -647,11 +647,11 @@
..()
/obj/item/weapon/dnainjector/m2h
- name = "DNA-Injector (Monkey > Human)"
+ name = "\improper DNA injector (Monkey > Human)"
desc = "Will make you...less hairy."
datatype = DNA2_BUF_SE
value = 0x001
//block = 14
New()
block = MONKEYBLOCK
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 97e5630d94..f5f4208073 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -38,7 +38,7 @@
/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag)
if (!flag)
return
- if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/))
+ if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/tie/storage/) || istype(target, /obj/item/clothing/under))
return
user << "Planting explosives..."
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 0a0545b513..f6758e53e6 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -127,7 +127,7 @@
for(var/b=0, b<5, b++)
step_towards(W,my_target)
- if(!W) return
+ if(!W || !W.reagents) return
W.reagents.reaction(get_turf(W))
for(var/atom/atm in get_turf(W))
if(!W)
@@ -144,4 +144,4 @@
step(user, user.inertia_dir)
else
return ..()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index e16b9dd38c..3830f105fd 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -218,4 +218,4 @@
igniter.secured = 0
status = 1
update_icon()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 9b5007166d..e96d036721 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -187,4 +187,4 @@
else
user << "\blue You need more paper."
else
- user << "They are moving around too much. A straightjacket would help."
\ No newline at end of file
+ user << "They are moving around too much. A straightjacket would help."
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index d827567646..bb440d1215 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -1,5 +1,5 @@
/obj/item/weapon/grenade/chem_grenade
- name = "Grenade Casing"
+ name = "grenade casing"
icon_state = "chemg"
item_state = "flashbang"
desc = "A hand made chemical grenade."
@@ -171,7 +171,7 @@
/obj/item/weapon/grenade/chem_grenade/large
- name = "Large Chem Grenade"
+ name = "large chem grenade"
desc = "An oversized grenade that affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass)
@@ -179,7 +179,7 @@
affected_area = 4
/obj/item/weapon/grenade/chem_grenade/metalfoam
- name = "Metal-Foam Grenade"
+ name = "metal-foam grenade"
desc = "Used for emergency sealing of air breaches."
path = 1
stage = 2
@@ -200,7 +200,7 @@
icon_state = initial(icon_state) +"_locked"
/obj/item/weapon/grenade/chem_grenade/incendiary
- name = "Incendiary Grenade"
+ name = "incendiary grenade"
desc = "Used for clearing rooms of living things."
path = 1
stage = 2
diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm
index 9edf68a60a..3446fa46c3 100644
--- a/code/game/objects/items/weapons/grenades/emgrenade.dm
+++ b/code/game/objects/items/weapons/grenades/emgrenade.dm
@@ -9,4 +9,3 @@
if(empulse(src, 4, 10))
del(src)
return
-
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index f5ad4fa9fd..f9120d5491 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -180,4 +180,4 @@
var/dettime = rand(15,60)
spawn(dettime)
prime()
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index 46854c6a2a..d1fb667e99 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -108,4 +108,4 @@
/obj/item/weapon/grenade/attack_hand()
walk(src, null, null)
..()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 31b06ef5b7..8b6b6e938d 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -41,4 +41,4 @@
name = "carp delivery grenade"
spawner_type = /mob/living/simple_animal/hostile/carp
deliveryamt = 5
- origin_tech = "materials=3;magnets=4;syndicate=4"
\ No newline at end of file
+ origin_tech = "materials=3;magnets=4;syndicate=4"
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 531c8fa7ee..a1ea44daa9 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -166,4 +166,4 @@ var/last_chew = 0
if(!C) return
if(p_loc == user.loc && p_loc_m == C.loc)
C.handcuffed = new /obj/item/weapon/handcuffs(C)
- C.update_inv_handcuffed()
\ No newline at end of file
+ C.update_inv_handcuffed()
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 89e265aed8..c45ed4eac8 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -498,4 +498,4 @@ the implant may become unstable and either pre-maturely inject the subject or si
return 1
islegal()
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/game/objects/items/weapons/implants/implantcase.dm b/code/game/objects/items/weapons/implants/implantcase.dm
index 03776c78de..ae77d373da 100644
--- a/code/game/objects/items/weapons/implants/implantcase.dm
+++ b/code/game/objects/items/weapons/implants/implantcase.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/weapon/implantcase
- name = "Glass Case"
+ name = "glass case"
desc = "A case containing an implant."
icon = 'icons/obj/items.dmi'
icon_state = "implantcase-0"
@@ -63,7 +63,7 @@
/obj/item/weapon/implantcase/tracking
- name = "Glass Case - 'Tracking'"
+ name = "glass case - 'tracking'"
desc = "A case containing a tracking implant."
icon_state = "implantcase-b"
@@ -74,7 +74,7 @@
/obj/item/weapon/implantcase/explosive
- name = "Glass Case - 'Explosive'"
+ name = "glass case - 'explosive'"
desc = "A case containing an explosive implant."
icon_state = "implantcase-r"
@@ -85,7 +85,7 @@
/obj/item/weapon/implantcase/chem
- name = "Glass Case - 'Chem'"
+ name = "glass case - 'chem'"
desc = "A case containing a chemical implant."
icon_state = "implantcase-b"
@@ -96,7 +96,7 @@
/obj/item/weapon/implantcase/loyalty
- name = "Glass Case - 'Loyalty'"
+ name = "glass case - 'loyalty'"
desc = "A case containing a loyalty implant."
icon_state = "implantcase-r"
@@ -107,7 +107,7 @@
/obj/item/weapon/implantcase/death_alarm
- name = "Glass Case - 'Death Alarm'"
+ name = "glass case - 'death alarm'"
desc = "A case containing a death alarm implant."
icon_state = "implantcase-b"
@@ -118,7 +118,7 @@
/obj/item/weapon/implantcase/freedom
- name = "Glass Case - 'Freedom'"
+ name = "glass case - 'freedom'"
desc = "A case containing a freedom implant."
icon_state = "implantcase-r"
@@ -129,7 +129,7 @@
/obj/item/weapon/implantcase/adrenalin
- name = "Glass Case - 'Adrenalin'"
+ name = "glass case - 'adrenalin'"
desc = "A case containing an adrenalin implant."
icon_state = "implantcase-b"
@@ -140,7 +140,7 @@
/obj/item/weapon/implantcase/dexplosive
- name = "Glass Case - 'Explosive'"
+ name = "glass case - 'explosive'"
desc = "A case containing an explosive."
icon_state = "implantcase-r"
@@ -151,11 +151,11 @@
/obj/item/weapon/implantcase/health
- name = "Glass Case - 'Health'"
+ name = "glass case - 'health'"
desc = "A case containing a health tracking implant."
icon_state = "implantcase-b"
/obj/item/weapon/implantcase/health/New()
src.imp = new /obj/item/weapon/implant/health( src )
..()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/implants/implantfreedom.dm b/code/game/objects/items/weapons/implants/implantfreedom.dm
index 58d73d835a..d7be368665 100644
--- a/code/game/objects/items/weapons/implants/implantfreedom.dm
+++ b/code/game/objects/items/weapons/implants/implantfreedom.dm
@@ -67,5 +67,3 @@ mechanisms
life can drive down to only 1 use.
No Implant Specifics"}
return dat
-
-
diff --git a/code/game/objects/items/weapons/implants/implantuplink.dm b/code/game/objects/items/weapons/implants/implantuplink.dm
index 2cba026e32..0469cd56d5 100644
--- a/code/game/objects/items/weapons/implants/implantuplink.dm
+++ b/code/game/objects/items/weapons/implants/implantuplink.dm
@@ -20,4 +20,4 @@
/obj/item/weapon/implant/uplink/trigger(emote, mob/source as mob)
if(hidden_uplink && usr == source) // Let's not have another people activate our uplink
hidden_uplink.check_trigger(source, emote, activation_emote)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 3b3e611575..36dbc26537 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -13,4 +13,4 @@
suicide_act(mob/user)
viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide. "
- return (OXYLOSS)
\ No newline at end of file
+ return (OXYLOSS)
diff --git a/code/game/objects/items/weapons/paiwire.dm b/code/game/objects/items/weapons/paiwire.dm
index 83bc76517a..990453f423 100644
--- a/code/game/objects/items/weapons/paiwire.dm
+++ b/code/game/objects/items/weapons/paiwire.dm
@@ -8,4 +8,4 @@
user.visible_message("[user] dumbly fumbles to find a place on [M] to plug in [src].", "There aren't any ports on [M] that match the jack belonging to [src].")
/obj/item/weapon/pai_cable/attack(obj/machinery/M as obj, mob/user as mob)
- src.plugin(M, user)
\ No newline at end of file
+ src.plugin(M, user)
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index ba75d32990..b0b8fbdc04 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -112,5 +112,4 @@
icon = 'icons/mob/slimes.dmi' //'icons/obj/harvest.dmi'
icon_state = "yellow slime extract" //"potato_battery"
maxcharge = 10000
- maxcharge = 10000
- matter = null
\ No newline at end of file
+ matter = null
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index fbaab9a301..e9aa6f3ca6 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -87,4 +87,4 @@
user.loc = pick(L)
smoke.start()
- src.uses -= 1
\ No newline at end of file
+ src.uses -= 1
diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm
index 0ecbe900d2..8bd126584c 100644
--- a/code/game/objects/items/weapons/shards.dm
+++ b/code/game/objects/items/weapons/shards.dm
@@ -111,4 +111,4 @@
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
else
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index c71a5d7298..0304aac95e 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -82,7 +82,7 @@
/obj/item/weapon/storage/backpack/santabag
- name = "Santa's Gift Bag"
+ name = "\improper Santa's gift bag"
desc = "Space Santa uses this to deliver toys to all the nice children in space in Christmas! Wow, it's pretty big!"
icon_state = "giftbag0"
item_state = "giftbag"
@@ -252,4 +252,4 @@
/obj/item/weapon/storage/backpack/ert/medical
name = "emergency response team medical backpack"
desc = "A spacious backpack with lots of pockets, worn by medical members of a Nanotrasen Emergency Response Team."
- icon_state = "ert_medical"
\ No newline at end of file
+ icon_state = "ert_medical"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index f7da60688e..b2d54be947 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -71,7 +71,7 @@
// -----------------------------
/obj/item/weapon/storage/bag/ore
- name = "Mining Satchel"
+ name = "mining satchel"
desc = "This little bugger can be used to store and transport ores."
icon = 'icons/obj/mining.dmi'
icon_state = "satchel"
@@ -88,9 +88,9 @@
// -----------------------------
/obj/item/weapon/storage/bag/plants
+ name = "plant bag"
icon = 'icons/obj/hydroponics.dmi'
icon_state = "plantbag"
- name = "Plant Bag"
storage_slots = 50; //the number of plant pieces it can carry.
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = 3
@@ -105,9 +105,9 @@
// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu
/obj/item/weapon/storage/bag/sheetsnatcher
+ name = "sheet snatcher"
icon = 'icons/obj/mining.dmi'
icon_state = "sheetsnatcher"
- name = "Sheet Snatcher"
desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet."
var/capacity = 300; //the number of sheets it can carry.
@@ -236,7 +236,7 @@
// -----------------------------
/obj/item/weapon/storage/bag/sheetsnatcher/borg
- name = "Sheet Snatcher 9000"
+ name = "sheet snatcher 9000"
desc = ""
capacity = 500//Borgs get more because >specialization
@@ -245,9 +245,9 @@
// -----------------------------
/obj/item/weapon/storage/bag/cash
+ name = "cash bag"
icon = 'icons/obj/storage.dmi'
icon_state = "cashbag"
- name = "Cash bag"
desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front."
storage_slots = 50; //the number of cash pieces it can carry.
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * cash.w_class
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 1613fa2459..941fdaae3b 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -14,7 +14,7 @@
icon_state = "utilitybelt"
item_state = "utility"
can_hold = list(
- "/obj/item/weapon/combitool",
+ //"/obj/item/weapon/combitool",
"/obj/item/weapon/crowbar",
"/obj/item/weapon/screwdriver",
"/obj/item/weapon/weldingtool",
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index f480e92185..4b9a7dbe64 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -252,7 +252,7 @@
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src)
/obj/item/weapon/storage/box/cdeathalarm_kit
- name = "Death Alarm Kit"
+ name = "death alarm kit"
desc = "Box of stuff used to implant death alarms."
icon_state = "implant"
item_state = "syringe_kit"
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 82d3f78b0e..64d8e89bb7 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -281,4 +281,4 @@
/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- update_icon()
\ No newline at end of file
+ update_icon()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 48a6462651..6e2eca01c5 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -140,7 +140,7 @@
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
/obj/item/weapon/storage/pill_bottle/antitox
- name = "Dylovene pills"
+ name = "bottle of Dylovene pills"
desc = "Contains pills used to counter toxins."
New()
@@ -154,7 +154,7 @@
new /obj/item/weapon/reagent_containers/pill/antitox( src )
/obj/item/weapon/storage/pill_bottle/inaprovaline
- name = "Inaprovaline pills"
+ name = "bottle of Inaprovaline pills"
desc = "Contains pills used to stabilize patients."
New()
@@ -168,7 +168,7 @@
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
/obj/item/weapon/storage/pill_bottle/tramadol
- name = "Tramadol Pills"
+ name = "bottle of Tramadol Pills"
desc = "Contains pills used to relieve pain."
New()
@@ -180,4 +180,3 @@
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
-
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 67205c7619..082002a5b9 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -82,4 +82,4 @@
return 1
/obj/item/weapon/storage/internal/Adjacent(var/atom/neighbor)
- return master_item.Adjacent(neighbor)
\ No newline at end of file
+ return master_item.Adjacent(neighbor)
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 291418f510..2e1d4d2a4c 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -452,11 +452,11 @@
del(src)
//BubbleWrap END
-/obj/item/weapon/storage/hear_talk(mob/M as mob, text)
+/obj/item/weapon/storage/hear_talk(mob/M as mob, text, verb, datum/language/speaking)
for (var/atom/A in src)
if(istype(A,/obj/))
var/obj/O = A
- O.hear_talk(M, text)
+ O.hear_talk(M, text, verb, speaking)
//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area).
//Returns -1 if the atom was not found on container.
@@ -492,4 +492,4 @@
if (!cur_atom)
return -1 //inside something with a null loc.
- return depth
\ No newline at end of file
+ return depth
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index 2c25e8adac..b6b11af106 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -83,4 +83,4 @@
new /obj/item/weapon/crowbar(src)
new /obj/item/stack/cable_coil(src,30,color)
new /obj/item/weapon/wirecutters(src)
- new /obj/item/device/multitool(src)
\ No newline at end of file
+ new /obj/item/device/multitool(src)
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index d28586b0a2..fc1d2e2b8a 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -124,7 +124,7 @@
return
/obj/item/weapon/storage/box/syndie_kit/chameleon
- name = "Chameleon Kit"
+ name = "chameleon kit"
desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately."
storage_slots = 10
@@ -139,4 +139,13 @@
new /obj/item/clothing/mask/chameleon(src)
new /obj/item/clothing/glasses/chameleon(src)
new /obj/item/weapon/gun/projectile/chameleon(src)
- new /obj/item/ammo_magazine/chameleon(src)
\ No newline at end of file
+ new /obj/item/ammo_magazine/chameleon(src)
+
+/obj/item/weapon/storage/box/syndie_kit/clerical
+ name = "clerical kit"
+ desc = "Comes with all you need to fake paperwork. Assumes you have passed basic writing lessons."
+
+/obj/item/weapon/storage/box/syndie_kit/clerical/New()
+ ..()
+ new /obj/item/weapon/stamp/chameleon(src)
+ new /obj/item/weapon/pen/chameleon(src)
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 8f6579c830..505263cf46 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -88,4 +88,4 @@
if(item2_type)
new item2_type(src)
if(item3_type)
- new item3_type(src)
\ No newline at end of file
+ new item3_type(src)
diff --git a/code/game/objects/items/weapons/surgery_limbattachment.dm b/code/game/objects/items/weapons/surgery_limbattachment.dm
index 04f0ac5db7..e5a65ba9c7 100644
--- a/code/game/objects/items/weapons/surgery_limbattachment.dm
+++ b/code/game/objects/items/weapons/surgery_limbattachment.dm
@@ -68,4 +68,4 @@
del(src)
return 1
- return 0
\ No newline at end of file
+ return 0
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 3a0f29a3da..34516e875f 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -134,4 +134,3 @@
return
else
return ..()
-
diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm
index 4593bf932f..e205f20bb0 100644
--- a/code/game/objects/items/weapons/syndie.dm
+++ b/code/game/objects/items/weapons/syndie.dm
@@ -81,4 +81,4 @@
if("Close the lighter.")
src.icon_state = "c-4detonator_0"
user << "You close the lighter."
- pr_open = 0
\ No newline at end of file
+ pr_open = 0
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index 50a2c8a2e4..fff0deed5f 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -1,124 +1,101 @@
-/* Table parts and rack parts
- * Contains:
- * Table Parts
- * Reinforced Table Parts
- * Wooden Table Parts
- * Rack Parts
- */
+// Table parts and rack parts
+/obj/item/weapon/table_parts
+ name = "table parts"
+ desc = "Parts of a table. Poor table."
+ gender = PLURAL
+ icon = 'icons/obj/items.dmi'
+ icon_state = "table_parts"
+ matter = list("metal" = 3750)
+ flags = FPRINT | TABLEPASS| CONDUCT
+ attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
+ var/build_type = /obj/structure/table
+ var/alter_type = /obj/item/weapon/table_parts/reinforced
+ var/alter_with = /obj/item/stack/rods
+ var/alter_cost = 4
+ var/list/stack_types = list(/obj/item/stack/sheet/metal)
-/*
- * Table Parts
- */
/obj/item/weapon/table_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( user.loc )
- //SN src = null
+ for(var/material_type in stack_types)
+ new material_type(get_turf(user))
del(src)
- if (istype(W, /obj/item/stack/rods))
- var/obj/item/stack/rods/R = W
- if (R.use(4))
- new /obj/item/weapon/table_parts/reinforced(get_turf(loc))
- user << "You reinforce the [name]. "
- del(src)
- else
- user << "You need at least four rods to reinforce the [name]. "
+ return
+ else
+ if(alter_type && alter_with && istype(W,alter_with))
+ var/obj/item/stack/R = W
+ if (R.use(alter_cost))
+ var/obj/item/new_parts = new alter_type (get_turf(loc))
+ user << "You modify \the [name] into \a [new_parts]. "
+ del(src)
+ else
+ user << "You need at least [alter_cost] sheets to reinforce the [name]. "
+ return
+ ..()
/obj/item/weapon/table_parts/attack_self(mob/user as mob)
if(locate(/obj/structure/table) in user.loc)
user << "There is already a table here. "
return
- new /obj/structure/table( user.loc )
+ new build_type( user.loc )
user.drop_item()
del(src)
return
+/obj/item/weapon/table_parts/reinforced
+ name = "reinforced table parts"
+ desc = "Hard table parts. Well... harder."
+ icon = 'icons/obj/items.dmi'
+ icon_state = "reinf_tableparts"
+ matter = list("metal" = 7500)
+ flags = FPRINT | TABLEPASS| CONDUCT
-/*
- * Reinforced Table Parts
- */
-/obj/item/weapon/table_parts/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( get_turf(loc) )
- new /obj/item/stack/rods( get_turf(loc) )
- del(src)
+ stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods)
+ build_type = /obj/structure/table/reinforced
+ alter_type = null
+ alter_with = null
+ alter_cost = null
-/obj/item/weapon/table_parts/reinforced/attack_self(mob/user as mob)
- if(locate(/obj/structure/table/reinforced) in user.loc)
- user << "There is already a table here. "
- return
+/obj/item/weapon/table_parts/wood
+ name = "wooden table parts"
+ desc = "Keep away from fire."
+ icon_state = "wood_tableparts"
+ flags = null
- new /obj/structure/table/reinforced( user.loc )
- user.drop_item()
- del(src)
- return
+ stack_types = list(/obj/item/stack/sheet/wood)
+ build_type = /obj/structure/table/woodentable
+ alter_type = /obj/item/weapon/table_parts/gambling
+ alter_with = /obj/item/stack/tile/carpet
+ alter_cost = 1
-/*
- * Wooden Table Parts
- */
-/obj/item/weapon/table_parts/wood/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/wood( get_turf(loc) )
- //SN src = null
- del(src)
- if (istype(W, /obj/item/stack/tile/carpet))
- var/obj/item/stack/tile/carpet/C = W
- if (C.use(1))
- new /obj/item/weapon/table_parts/gambling(get_turf(loc))
- user << "You put a layer of carpet on the table. "
- del(src)
+/obj/item/weapon/table_parts/gambling
+ name = "gambling table parts"
+ desc = "Keep away from security."
+ icon_state = "gamble_tableparts"
+ flags = null
-/obj/item/weapon/table_parts/wood/attack_self(mob/user as mob)
- if(locate(/obj/structure/table/woodentable) in user.loc)
- user << "There is already a table here. "
- return
+ stack_types = list(/obj/item/stack/tile/carpet,/obj/item/stack/sheet/wood)
+ build_type = /obj/structure/table/gamblingtable
+ alter_type = null
+ alter_with = null
+ alter_cost = null
- new /obj/structure/table/woodentable( user.loc )
- user.drop_item()
- del(src)
- return
-
-/*
- * Gambling Table Parts
- */
/obj/item/weapon/table_parts/gambling/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/wood( get_turf(loc) )
- new /obj/item/stack/tile/carpet( get_turf(loc) )
- del(src)
if (istype(W, /obj/item/weapon/crowbar))
new /obj/item/stack/tile/carpet( get_turf(loc) )
new /obj/item/weapon/table_parts/wood( get_turf(loc) )
user << "You pry the carpet out of the table. "
del(src)
-
-/obj/item/weapon/table_parts/gambling/attack_self(mob/user as mob)
- new /obj/structure/table/gamblingtable( user.loc )
- user.drop_item()
- del(src)
- return
-/*
- * Rack Parts
- */
-/obj/item/weapon/rack_parts/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( get_turf(loc) )
- del(src)
- return
- return
-/obj/item/weapon/rack_parts/attack_self(mob/user as mob)
- if(locate(/obj/structure/rack) in user.loc)
- user << "There is already a rack here. "
- return
-
- var/obj/structure/rack/R = new /obj/structure/rack( user.loc )
- R.add_fingerprint(user)
- user.drop_item()
- del(src)
- return
\ No newline at end of file
+/obj/item/weapon/table_parts/rack
+ name = "rack parts"
+ desc = "Parts of a rack."
+ icon_state = "rack_parts"
+ stack_types = list(/obj/item/stack/sheet/metal)
+ build_type = /obj/structure/table/rack
+ alter_type = null
+ alter_with = null
+ alter_cost = null
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index 7b41c1b18b..422af1d652 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/weapon/tank/jetpack
- name = "Jetpack (Empty)"
+ name = "jetpack (empty)"
desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
w_class = 4.0
@@ -71,7 +71,7 @@
/obj/item/weapon/tank/jetpack/void
- name = "Void Jetpack (Oxygen)"
+ name = "void jetpack (oxygen)"
desc = "It works well in a void."
icon_state = "jetpack-void"
item_state = "jetpack-void"
@@ -82,7 +82,7 @@
return
/obj/item/weapon/tank/jetpack/oxygen
- name = "Jetpack (Oxygen)"
+ name = "jetpack (oxygen)"
desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution."
icon_state = "jetpack"
item_state = "jetpack"
@@ -93,7 +93,7 @@
return
/obj/item/weapon/tank/jetpack/carbondioxide
- name = "Jetpack (Carbon Dioxide)"
+ name = "jetpack (carbon dioxide)"
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
distribute_pressure = 0
icon_state = "jetpack-black"
@@ -144,4 +144,4 @@
if(allgases >= 0.005)
return 1
del(G)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index 9d374ad15f..f6485f0a16 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -251,7 +251,7 @@
air_contents.react()
pressure = air_contents.return_pressure()
var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE
- range = min(range, MAX_EXPLOSION_RANGE) // was 8 - - - Changed to a configurable define -- TLE
+ range = min(range, max_explosion_range) // was 8 - - - Changed to a configurable define -- TLE
var/turf/epicenter = get_turf(loc)
//world << "\blue Exploding Pressure: [pressure] kPa, intensity: [range]"
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index 0514e7d1d2..2d82cacaad 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -87,4 +87,4 @@
if(dir_offset & NORTH)
pixel_y += 32
else if(dir_offset & SOUTH)
- pixel_y -= 32
\ No newline at end of file
+ pixel_y -= 32
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index 8472723f48..e04a5f0888 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -172,5 +172,3 @@ Frequency:
P.creator = src
src.add_fingerprint(user)
return
-
-
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 2165a6bfa4..62793f0b2c 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -333,6 +333,7 @@
src.force = 15
src.damtype = "fire"
src.icon_state = "welder1"
+ src.w_class = 4
processing_objects.Add(src)
else
usr << "\blue Need more fuel!"
@@ -347,6 +348,7 @@
src.damtype = "brute"
src.icon_state = "welder"
src.welding = 0
+ src.w_class = initial(src.w_class)
//Decides whether or not to damage a player's eyes based on what they're wearing as protection
//Note: This should probably be moved to mob
@@ -394,20 +396,20 @@
/obj/item/weapon/weldingtool/largetank
- name = "Industrial Welding Tool"
+ name = "industrial welding tool"
max_fuel = 40
matter = list("metal" = 70, "glass" = 60)
origin_tech = "engineering=2"
/obj/item/weapon/weldingtool/hugetank
- name = "Upgraded Welding Tool"
+ name = "upgraded welding tool"
max_fuel = 80
w_class = 3.0
matter = list("metal" = 70, "glass" = 120)
origin_tech = "engineering=3"
/obj/item/weapon/weldingtool/experimental
- name = "Experimental Welding Tool"
+ name = "experimental welding tool"
max_fuel = 40
w_class = 3.0
matter = list("metal" = 70, "glass" = 120)
@@ -473,7 +475,7 @@
else
return ..()
-/obj/item/weapon/combitool
+/*/obj/item/weapon/combitool
name = "combi-tool"
desc = "It even has one of those nubbins for doing the thingy."
icon = 'icons/obj/items.dmi'
@@ -513,11 +515,15 @@
return 1
/obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
+ if(!M.Adjacent(user))
+ return 0
var/obj/item/tool = tools[current_tool]
if(!tool) return 0
return (tool ? tool.attack(M,user) : 0)
/obj/item/weapon/combitool/afterattack(var/atom/target, var/mob/living/user, proximity, params)
+ if(!proximity)
+ return 0
var/obj/item/tool = tools[current_tool]
if(!tool) return 0
tool.loc = user
@@ -525,4 +531,4 @@
if(!resolved && tool && target)
tool.afterattack(target,user,1)
if(tool)
- tool.loc = src
\ No newline at end of file
+ tool.loc = src*/
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 70485e67a2..c8e67078b2 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -62,6 +62,7 @@
return
..()
+
if(wielded) //Trying to unwield it
unwield()
user << "You are now carrying the [name] with one hand. "
@@ -71,7 +72,6 @@
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_hand()
if(O && istype(O))
O.unwield()
- return
else //Trying to wield it
if(user.get_inactive_hand())
@@ -86,7 +86,13 @@
O.name = "[initial(name)] - offhand"
O.desc = "Your second grip on the [initial(name)]"
user.put_in_inactive_hand(O)
- return
+
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_l_hand()
+ H.update_inv_r_hand()
+
+ return
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
@@ -198,4 +204,3 @@
/obj/item/weapon/twohanded/spear/update_icon()
icon_state = "spearglass[wielded]"
return
-
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index dac6e5a260..a584f3db4b 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -1,5 +1,5 @@
/obj/item/weapon/banhammer
- desc = "A banhammer"
+ desc = "banhammer"
name = "banhammer"
icon = 'icons/obj/items.dmi'
icon_state = "toyhammer"
@@ -482,4 +482,4 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
/obj/effect/energy_net/attackby(obj/item/weapon/W as obj, mob/user as mob)
health -= W.force
healthcheck()
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/items/weapons/wires.dm b/code/game/objects/items/weapons/wires.dm
index 284be5284c..df2033f887 100644
--- a/code/game/objects/items/weapons/wires.dm
+++ b/code/game/objects/items/weapons/wires.dm
@@ -16,5 +16,3 @@
else
user << "\blue You are not using this to lay wire..."
return
-
-
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 44fc441926..167794721b 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -126,7 +126,7 @@
return
-/obj/proc/hear_talk(mob/M as mob, text)
+/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking)
if(talking_atom)
talking_atom.catchMessage(text, M)
/*
@@ -135,4 +135,7 @@
var/rendered = "[M.name]: [text] "
mo.show_message(rendered, 2)
*/
- return
\ No newline at end of file
+ return
+
+/obj/proc/see_emote(mob/M as mob, text, var/emote_type)
+ return
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 8392383150..53f4cc0903 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -1,5 +1,5 @@
/obj/random
- name = "Random Object"
+ name = "random object"
desc = "This item type is used to spawn random objects at round-start"
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
@@ -26,7 +26,7 @@
/obj/random/tool
- name = "Random Tool"
+ name = "random tool"
desc = "This is a random tool"
icon = 'icons/obj/items.dmi'
icon_state = "welder"
@@ -40,7 +40,7 @@
/obj/random/technology_scanner
- name = "Random Scanner"
+ name = "random scanner"
desc = "This is a random technology scanner."
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
@@ -51,7 +51,7 @@
/obj/random/powercell
- name = "Random Powercell"
+ name = "random powercell"
desc = "This is a random powercell."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
@@ -64,7 +64,7 @@
/obj/random/bomb_supply
- name = "Bomb Supply"
+ name = "bomb supply"
desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
@@ -76,7 +76,7 @@
/obj/random/toolbox
- name = "Random Toolbox"
+ name = "random toolbox"
desc = "This is a random toolbox."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
@@ -87,7 +87,7 @@
/obj/random/tech_supply
- name = "Random Tech Supply"
+ name = "random tech supply"
desc = "This is a random piece of technology supplies."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
@@ -103,4 +103,4 @@
prob(2);/obj/random/toolbox,\
prob(2);/obj/item/weapon/storage/belt/utility,\
prob(5);/obj/random/tool,\
- prob(2);/obj/item/weapon/tape_roll)
\ No newline at end of file
+ prob(2);/obj/item/weapon/tape_roll)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index f24c3c7839..d105caae00 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -76,23 +76,27 @@
if (!can_touch(user) || !climbable)
return 0
- var/turf/T = src.loc
- if(!T || !istype(T)) return 0
-
if (!user.Adjacent(src))
- user << "\red You can't climb there, the way is blocked."
+ user << "You can't climb there, the way is blocked. "
return 0
+ var/obj/occupied = turf_is_crowded()
+ if(occupied)
+ user << "There's \a [occupied] in the way. "
+ return 0
+ return 1
+
+/obj/structure/proc/turf_is_crowded()
+ var/turf/T = get_turf(src)
+ if(!T || !istype(T))
+ return 0
for(var/obj/O in T.contents)
if(istype(O,/obj/structure))
var/obj/structure/S = O
- if(S.climbable)
- continue
-
+ if(S.climbable) continue
if(O && O.density && !(O.flags & ON_BORDER)) //ON_BORDER structures are handled by the Adjacent() check.
- user << "\red There's \a [O] in the way."
- return 0
- return 1
+ return O
+ return 0
/obj/structure/proc/do_climb(var/mob/living/user)
if (!can_climb(user))
@@ -118,14 +122,14 @@
if(M.lying) return //No spamming this on people.
M.Weaken(5)
- M << "\red You topple as \the [src] moves under you!"
+ M << "You topple as \the [src] moves under you! "
if(prob(25))
var/damage = rand(15,30)
var/mob/living/carbon/human/H = M
if(!istype(H))
- H << "\red You land heavily!"
+ H << "You land heavily! "
M.adjustBruteLoss(damage)
return
@@ -144,12 +148,12 @@
affecting = H.get_organ("head")
if(affecting)
- M << "\red You land heavily on your [affecting.display_name]!"
+ M << "You land heavily on your [affecting.display_name]! "
affecting.take_damage(damage, 0)
if(affecting.parent)
affecting.parent.add_autopsy_data("Misadventure", damage)
else
- H << "\red You land heavily!"
+ H << "You land heavily! "
H.adjustBruteLoss(damage)
H.UpdateDamageIcon()
diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm
index 8ef3fd463d..68681f081a 100644
--- a/code/game/objects/structures/barsign.dm
+++ b/code/game/objects/structures/barsign.dm
@@ -21,4 +21,4 @@
else
sign_type = replacetext(lowertext(sign_type), " ", "") // lowercase, strip spaces - along with choices for user options, avoids huge if-else-else
src.ChangeSign(sign_type)
- user << "You change the barsign."
\ No newline at end of file
+ user << "You change the barsign."
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 8a3cccae46..d838d41e5b 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -93,8 +93,6 @@ LINEN BINS
item_color = "brown"
-
-
/obj/structure/bedsheetbin
name = "linen bin"
desc = "A linen bin. It looks rather cosy."
@@ -183,4 +181,4 @@ LINEN BINS
hidden = null
- add_fingerprint(user)
\ No newline at end of file
+ add_fingerprint(user)
diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm
index deca42e867..ac3e89000c 100644
--- a/code/game/objects/structures/coathanger.dm
+++ b/code/game/objects/structures/coathanger.dm
@@ -50,4 +50,4 @@
if (istype(coat, /obj/item/clothing/suit/storage/toggle/labcoat/cmo))
overlays += image(icon, icon_state = "coat_cmo")
if (istype(coat, /obj/item/clothing/suit/storage/det_suit))
- overlays += image(icon, icon_state = "coat_det")
\ No newline at end of file
+ overlays += image(icon, icon_state = "coat_det")
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 44c2c3b900..a929ff7201 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -293,11 +293,11 @@
else
icon_state = icon_opened
-/obj/structure/closet/hear_talk(mob/M as mob, text)
+/obj/structure/closet/hear_talk(mob/M as mob, text, verb, datum/language/speaking)
for (var/atom/A in src)
if(istype(A,/obj/))
var/obj/O = A
- O.hear_talk(M, text)
+ O.hear_talk(M, text, verb, speaking)
/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys", var/wallbreaker)
if(!damage || !wallbreaker)
@@ -305,4 +305,4 @@
visible_message("[user] [attack_message] the [src]! ")
dump_contents()
spawn(1) del(src)
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 256f72522e..67de5d38b9 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -9,4 +9,4 @@
if(!opened)
icon_state = icon_closed
else
- icon_state = icon_opened
\ No newline at end of file
+ icon_state = icon_opened
diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
index d3ab79e768..3546cd52e7 100644
--- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
@@ -3,4 +3,4 @@
desc = "A crate which can sustain life for a while."
icon_state = "critter"
icon_opened = "critteropen"
- icon_closed = "critter"
\ No newline at end of file
+ icon_closed = "critter"
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index 73295477f0..0728a9befa 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -1,6 +1,6 @@
//I still dont think this should be a closet but whatever
/obj/structure/closet/fireaxecabinet
- name = "Fire Axe Cabinet"
+ name = "fire axe cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
var/obj/item/weapon/twohanded/fireaxe/fireaxe
icon_state = "fireaxe1000"
@@ -207,4 +207,4 @@
return
close()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index 6536e065e5..05e7968a93 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -71,4 +71,4 @@
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/clothing/suit/bluetag(src)
- new /obj/item/clothing/suit/bluetag(src)
\ No newline at end of file
+ new /obj/item/clothing/suit/bluetag(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 62412f1093..1a62db2dfb 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -134,4 +134,3 @@
new /obj/item/clothing/head/helmet/thunderdome(src)
new /obj/item/clothing/head/helmet/thunderdome(src)
new /obj/item/clothing/head/helmet/thunderdome(src)
-
diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
index 061f34266e..7113c1b45a 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -35,7 +35,7 @@
* Chef
*/
/obj/structure/closet/chefcloset
- name = "\proper chef's closet"
+ name = "chef's closet"
desc = "It's a storage unit for foodservice garments."
icon_state = "black"
icon_closed = "black"
@@ -97,4 +97,4 @@
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/suit/storage/lawyer/purpjacket(src)
new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/shoes/black(src)
\ No newline at end of file
+ new /obj/item/clothing/shoes/black(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index a6890430ef..bb5fe26e4f 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -70,4 +70,4 @@
..()
contents = list()
new /obj/item/clothing/suit/bio_suit/scientist( src )
- new /obj/item/clothing/head/bio_hood/scientist( src )
\ No newline at end of file
+ new /obj/item/clothing/head/bio_hood/scientist( src )
diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
index 02b81a13e0..bd17ba9841 100644
--- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm
+++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
@@ -1,4 +1,3 @@
-
/obj/structure/closet/malf/suits
desc = "It's a storage unit for operational gear."
icon_state = "syndicate"
@@ -13,4 +12,4 @@
new /obj/item/clothing/suit/space/void(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/cell(src)
- new /obj/item/device/multitool(src)
\ No newline at end of file
+ new /obj/item/device/multitool(src)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index 42759e3380..96a7e8131a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/bar
- name = "Booze"
+ name = "booze closet"
req_access = list(access_bar)
icon_state = "cabinetdetective_locked"
icon_closed = "cabinetdetective"
@@ -33,4 +33,4 @@
else
icon_state = icon_closed
else
- icon_state = icon_opened
\ No newline at end of file
+ icon_state = icon_opened
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index f7e3a25bb3..a28e629a98 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/cargotech
- name = "Cargo Technician's Locker"
+ name = "cargo technician's locker"
req_access = list(access_cargo)
icon_state = "securecargo1"
icon_closed = "securecargo"
@@ -19,7 +19,7 @@
return
/obj/structure/closet/secure_closet/quartermaster
- name = "Quartermaster's Locker"
+ name = "quartermaster's locker"
req_access = list(access_qm)
icon_state = "secureqm1"
icon_closed = "secureqm"
@@ -40,4 +40,4 @@
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/clothing/head/soft(src)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index 76528200fe..803f07616e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/engineering_chief
- name = "Chief Engineer's Locker"
+ name = "chief engineer's locker"
req_access = list(access_ce)
icon_state = "securece1"
icon_closed = "securece"
@@ -38,7 +38,7 @@
/obj/structure/closet/secure_closet/engineering_electrical
- name = "Electrical Supplies"
+ name = "electrical supplies"
req_access = list(access_engine_equip)
icon_state = "secureengelec1"
icon_closed = "secureengelec"
@@ -66,7 +66,7 @@
/obj/structure/closet/secure_closet/engineering_welding
- name = "Welding Supplies"
+ name = "welding supplies"
req_access = list(access_construction)
icon_state = "secureengweld1"
icon_closed = "secureengweld"
@@ -92,7 +92,7 @@
/obj/structure/closet/secure_closet/engineering_personal
- name = "Engineer's Locker"
+ name = "engineer's locker"
req_access = list(access_engine_equip)
icon_state = "secureeng1"
icon_closed = "secureeng"
@@ -121,7 +121,7 @@
new /obj/item/taperoll/engineering(src)
return
/obj/structure/closet/secure_closet/atmos_personal
- name = "Technician's Locker"
+ name = "technician's locker"
req_access = list(access_atmospherics)
icon_state = "secureatm1"
icon_closed = "secureatm"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index 4f326f0fb8..0513efd943 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -13,7 +13,7 @@
icon_state = icon_opened
/obj/structure/closet/secure_closet/freezer/kitchen
- name = "Kitchen Cabinet"
+ name = "kitchen cabinet"
req_access = list(access_kitchen)
New()
@@ -32,7 +32,7 @@
/obj/structure/closet/secure_closet/freezer/meat
- name = "Meat Fridge"
+ name = "meat fridge"
icon_state = "fridge1"
icon_closed = "fridge"
icon_locked = "fridge1"
@@ -50,7 +50,7 @@
/obj/structure/closet/secure_closet/freezer/fridge
- name = "Refrigerator"
+ name = "refrigerator"
icon_state = "fridge1"
icon_closed = "fridge"
icon_locked = "fridge1"
@@ -72,7 +72,7 @@
/obj/structure/closet/secure_closet/freezer/money
- name = "Freezer"
+ name = "freezer"
icon_state = "fridge1"
icon_closed = "fridge"
icon_locked = "fridge1"
@@ -91,11 +91,3 @@
for(var/i = 0, i < 6, i++)
new /obj/item/weapon/spacecash/c200(src)
return
-
-
-
-
-
-
-
-
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index 8fb8b0c92c..969185741d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -50,4 +50,4 @@
else if (locked)
overlays += icon(src.icon,"locked")
else
- overlays += icon(src.icon,"open")
\ No newline at end of file
+ overlays += icon(src.icon,"open")
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
index 3f7d24542e..2a1547e4ba 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/hydroponics
- name = "Botanist's locker"
+ name = "botanist's locker"
req_access = list(access_hydroponics)
icon_state = "hydrosecure1"
icon_closed = "hydrosecure"
@@ -24,4 +24,4 @@
new /obj/item/weapon/minihoe(src)
new /obj/item/weapon/hatchet(src)
// new /obj/item/weapon/bee_net(src) //No more bees, March 2014
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index 0ee184429a..c242e5f8c0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/medical1
- name = "Medicine Closet"
+ name = "medicine closet"
desc = "Filled with medical junk."
icon_state = "medical1"
icon_closed = "medical"
@@ -27,7 +27,7 @@
/obj/structure/closet/secure_closet/medical2
- name = "Anesthetic"
+ name = "anesthetics closet"
desc = "Used to knock people out."
icon_state = "medical1"
icon_closed = "medical"
@@ -51,7 +51,7 @@
/obj/structure/closet/secure_closet/medical3
- name = "Medical Doctor's Locker"
+ name = "medical doctor's locker"
req_access = list(access_surgery)
icon_state = "securemed1"
icon_closed = "securemed"
@@ -101,7 +101,7 @@
/obj/structure/closet/secure_closet/CMO
- name = "Chief Medical Officer's Locker"
+ name = "chief medical officer's locker"
req_access = list(access_cmo)
icon_state = "cmosecure1"
icon_closed = "cmosecure"
@@ -143,7 +143,7 @@
/obj/structure/closet/secure_closet/animal
- name = "Animal Control"
+ name = "animal control closet"
req_access = list(access_surgery)
@@ -158,7 +158,7 @@
/obj/structure/closet/secure_closet/chemical
- name = "Chemical Closet"
+ name = "chemical closet"
desc = "Store dangerous chemicals in here."
icon_state = "medical1"
icon_closed = "medical"
@@ -176,7 +176,7 @@
return
/obj/structure/closet/secure_closet/medical_wall
- name = "First Aid Closet"
+ name = "first aid closet"
desc = "It's a secure wall-mounted storage unit for first aid supplies."
icon_state = "medical_wall_locked"
icon_closed = "medical_wall_unlocked"
@@ -199,4 +199,4 @@
else
icon_state = icon_closed
else
- icon_state = icon_opened
\ No newline at end of file
+ icon_state = icon_opened
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index 867dc9cd91..8fc77c5b92 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/personal
- desc = "It's a secure locker for personnel. The first card swiped gains control."
name = "personal closet"
+ desc = "It's a secure locker for personnel. The first card swiped gains control."
req_access = list(access_all_personal_lockers)
var/registered_name = null
@@ -120,4 +120,4 @@
src.icon_state = src.icon_locked
src.registered_name = null
src.desc = "It's a secure locker for personnel. The first card swiped gains control."
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 5d6e7c3a0e..0578b79356 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/scientist
- name = "Scientist's Locker"
+ name = "scientist's locker"
req_access = list(access_tox_storage)
icon_state = "secureres1"
icon_closed = "secureres"
@@ -23,7 +23,7 @@
/obj/structure/closet/secure_closet/RD
- name = "Research Director's Locker"
+ name = "research director's locker"
req_access = list(access_rd)
icon_state = "rdsecure1"
icon_closed = "rdsecure"
@@ -48,4 +48,4 @@
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/device/flash(src)
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 479fdcb262..09810842d4 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -128,4 +128,4 @@
if(welded)
overlays += "welded"
else
- icon_state = icon_opened
\ No newline at end of file
+ icon_state = icon_opened
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index b772f95e9a..b5b8796b3c 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/secure_closet/captains
- name = "Captain's Locker"
+ name = "captain's locker"
req_access = list(access_captain)
icon_state = "capsecure1"
icon_closed = "capsecure"
@@ -35,7 +35,7 @@
/obj/structure/closet/secure_closet/hop
- name = "Head of Personnel's Locker"
+ name = "head of personnel's locker"
req_access = list(access_hop)
icon_state = "hopsecure1"
icon_closed = "hopsecure"
@@ -58,7 +58,7 @@
return
/obj/structure/closet/secure_closet/hop2
- name = "Head of Personnel's Attire"
+ name = "head of personnel's attire"
req_access = list(access_hop)
icon_state = "hopsecure1"
icon_closed = "hopsecure"
@@ -87,7 +87,7 @@
/obj/structure/closet/secure_closet/hos
- name = "Head of Security's Locker"
+ name = "head of security's locker"
req_access = list(access_hos)
icon_state = "hossecure1"
icon_closed = "hossecure"
@@ -127,7 +127,7 @@
/obj/structure/closet/secure_closet/warden
- name = "Warden's Locker"
+ name = "warden's locker"
req_access = list(access_armory)
icon_state = "wardensecure1"
icon_closed = "wardensecure"
@@ -164,7 +164,7 @@
/obj/structure/closet/secure_closet/security
- name = "Security Officer's Locker"
+ name = "security officer's locker"
req_access = list(access_security)
icon_state = "sec1"
icon_closed = "sec"
@@ -232,7 +232,7 @@
/obj/structure/closet/secure_closet/detective
- name = "Detective's Cabinet"
+ name = "detective's cabinet"
req_access = list(access_forensics_lockers)
icon_state = "cabinetdetective_locked"
icon_closed = "cabinetdetective"
@@ -278,7 +278,7 @@
icon_state = icon_opened
/obj/structure/closet/secure_closet/injection
- name = "Lethal Injections"
+ name = "lethal injections locker"
req_access = list(access_captain)
@@ -291,7 +291,7 @@
/obj/structure/closet/secure_closet/brig
- name = "Brig Locker"
+ name = "brig locker"
req_access = list(access_brig)
anchored = 1
var/id = null
@@ -305,7 +305,7 @@
/obj/structure/closet/secure_closet/courtroom
- name = "Courtroom Locker"
+ name = "courtroom locker"
req_access = list(access_court)
New()
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index cd06efb60f..2f6b66e5ce 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -1,5 +1,5 @@
/obj/structure/closet/syndicate
- name = "armoury closet"
+ name = "armory closet"
desc = "Why is this here?"
icon_state = "syndicate"
icon_closed = "syndicate"
@@ -144,4 +144,4 @@
var/obj/item/stack/R = new res(src)
R.amount = R.max_amount
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 090b2c8145..fd548974af 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -230,4 +230,4 @@
if(!opened)
icon_state = icon_closed
else
- icon_state = icon_opened
\ No newline at end of file
+ icon_state = icon_opened
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index a4c0ca78e8..d2d26ec0b5 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -213,7 +213,7 @@
/obj/structure/closet/wardrobe/pjs
- name = "Pajama wardrobe"
+ name = "pajama wardrobe"
icon_state = "white"
icon_closed = "white"
@@ -420,4 +420,4 @@
new /obj/item/clothing/under/suit_jacket/female(src)
new /obj/item/clothing/under/suit_jacket/really_black(src)
new /obj/item/clothing/under/suit_jacket/red(src)
- new /obj/item/clothing/under/scratch(src)
\ No newline at end of file
+ new /obj/item/clothing/under/scratch(src)
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index df7b63a199..3f6f321129 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -230,15 +230,15 @@
icon_closed = "plasticcrate"
/obj/structure/closet/crate/internals
+ name = "internals crate"
desc = "A internals crate."
- name = "Internals crate"
icon_state = "o2crate"
icon_opened = "o2crateopen"
icon_closed = "o2crate"
/obj/structure/closet/crate/trashcart
+ name = "trash cart"
desc = "A heavy, metal trashcart with wheels."
- name = "Trash Cart"
icon_state = "trashcart"
icon_opened = "trashcartopen"
icon_closed = "trashcart"
@@ -260,15 +260,15 @@
*/
/obj/structure/closet/crate/medical
+ name = "medical crate"
desc = "A medical crate."
- name = "Medical crate"
icon_state = "medicalcrate"
icon_opened = "medicalcrateopen"
icon_closed = "medicalcrate"
/obj/structure/closet/crate/rcd
- desc = "A crate for the storage of the RCD."
- name = "RCD crate"
+ name = "\improper RCD crate"
+ desc = "A crate with rapid construction device."
icon_state = "crate"
icon_opened = "crateopen"
icon_closed = "crate"
@@ -281,7 +281,7 @@
new /obj/item/weapon/rcd(src)
/obj/structure/closet/crate/solar
- name = "Solar Pack crate"
+ name = "solar pack crate"
/obj/structure/closet/crate/solar/New()
..()
@@ -311,8 +311,8 @@
new /obj/item/weapon/paper/solar(src)
/obj/structure/closet/crate/freezer
+ name = "freezer"
desc = "A freezer."
- name = "Freezer"
icon_state = "freezer"
icon_opened = "freezeropen"
icon_closed = "freezer"
@@ -333,8 +333,8 @@
return newgas
/obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle
+ name = "emergency rations"
desc = "A crate of emergency rations."
- name = "Emergency Rations"
/obj/structure/closet/crate/freezer/rations/New()
@@ -343,15 +343,15 @@
new /obj/item/weapon/storage/box/donkpockets(src)
/obj/structure/closet/crate/bin
+ name = "large bin"
desc = "A large bin."
- name = "Large bin"
icon_state = "largebin"
icon_opened = "largebinopen"
icon_closed = "largebin"
/obj/structure/closet/crate/radiation
+ name = "radioactive gear crate"
desc = "A crate with a radiation sign on it."
- name = "Radioactive gear crate"
icon_state = "radiation"
icon_opened = "radiationopen"
icon_closed = "radiation"
@@ -368,36 +368,36 @@
new /obj/item/clothing/head/radiation(src)
/obj/structure/closet/crate/secure/weapon
+ name = "weapons crate"
desc = "A secure weapons crate."
- name = "Weapons crate"
icon_state = "weaponcrate"
icon_opened = "weaponcrateopen"
icon_closed = "weaponcrate"
/obj/structure/closet/crate/secure/phoron
+ name = "phoron crate"
desc = "A secure phoron crate."
- name = "Phoron crate"
icon_state = "phoroncrate"
icon_opened = "phoroncrateopen"
icon_closed = "phoroncrate"
/obj/structure/closet/crate/secure/gear
+ name = "gear crate"
desc = "A secure gear crate."
- name = "Gear crate"
icon_state = "secgearcrate"
icon_opened = "secgearcrateopen"
icon_closed = "secgearcrate"
/obj/structure/closet/crate/secure/hydrosec
- desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
name = "secure hydroponics crate"
+ desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
icon_state = "hydrosecurecrate"
icon_opened = "hydrosecurecrateopen"
icon_closed = "hydrosecurecrate"
/obj/structure/closet/crate/secure/bin
+ name = "secure bin"
desc = "A secure bin."
- name = "Secure bin"
icon_state = "largebins"
icon_opened = "largebinsopen"
icon_closed = "largebins"
@@ -468,7 +468,7 @@
icon_closed = "largermetal"
/obj/structure/closet/crate/hydroponics
- name = "Hydroponics crate"
+ name = "hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
icon_state = "hydrocrate"
icon_opened = "hydrocrateopen"
@@ -486,4 +486,4 @@
// new /obj/item/weapon/weedspray(src)
// new /obj/item/weapon/pestspray(src)
// new /obj/item/weapon/pestspray(src)
-// new /obj/item/weapon/pestspray(src)
\ No newline at end of file
+// new /obj/item/weapon/pestspray(src)
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 1958bac750..e9fdd40966 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -64,7 +64,7 @@
..()
/obj/structure/largecrate/hoverpod
- name = "Hoverpod assembly crate"
+ name = "\improper Hoverpod assembly crate"
desc = "It comes in a box for the fabricator's sake. Where does the wood come from? ... And why is it lighter?"
icon_state = "mulecrate"
@@ -77,4 +77,4 @@
ME.attach(H)
ME = new /obj/item/mecha_parts/mecha_equipment/tool/passenger
ME.attach(H)
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm
index e48e8419d2..741dc371db 100644
--- a/code/game/objects/structures/curtains.dm
+++ b/code/game/objects/structures/curtains.dm
@@ -1,6 +1,6 @@
/obj/structure/curtain
- icon = 'icons/obj/curtain.dmi'
name = "curtain"
+ icon = 'icons/obj/curtain.dmi'
icon_state = "closed"
layer = MOB_LAYER + 0.1
opacity = 1
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index f30e0e2545..0ab10debe9 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -92,5 +92,3 @@
src.health -= 2
healthcheck()
return
-
-
diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm
index 9fbf63ba18..b4281a6033 100644
--- a/code/game/objects/structures/door_assembly.dm
+++ b/code/game/objects/structures/door_assembly.dm
@@ -1,7 +1,6 @@
-obj/structure/door_assembly
- icon = 'icons/obj/doors/door_assembly.dmi'
-
+/obj/structure/door_assembly
name = "airlock assembly"
+ icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_as_0"
anchored = 0
density = 1
@@ -17,120 +16,120 @@ obj/structure/door_assembly
New()
update_state()
- door_assembly_com
- base_icon_state = "com"
- base_name = "Command Airlock"
- glass_type = "/glass_command"
- airlock_type = "/command"
+/obj/structure/door_assembly/door_assembly_com
+ base_icon_state = "com"
+ base_name = "Command Airlock"
+ glass_type = "/glass_command"
+ airlock_type = "/command"
- door_assembly_sec
- base_icon_state = "sec"
- base_name = "Security Airlock"
- glass_type = "/glass_security"
- airlock_type = "/security"
+/obj/structure/door_assembly/door_assembly_sec
+ base_icon_state = "sec"
+ base_name = "Security Airlock"
+ glass_type = "/glass_security"
+ airlock_type = "/security"
- door_assembly_eng
- base_icon_state = "eng"
- base_name = "Engineering Airlock"
- glass_type = "/glass_engineering"
- airlock_type = "/engineering"
+/obj/structure/door_assembly/door_assembly_eng
+ base_icon_state = "eng"
+ base_name = "Engineering Airlock"
+ glass_type = "/glass_engineering"
+ airlock_type = "/engineering"
- door_assembly_min
- base_icon_state = "min"
- base_name = "Mining Airlock"
- glass_type = "/glass_mining"
- airlock_type = "/mining"
+/obj/structure/door_assembly/door_assembly_min
+ base_icon_state = "min"
+ base_name = "Mining Airlock"
+ glass_type = "/glass_mining"
+ airlock_type = "/mining"
- door_assembly_atmo
- base_icon_state = "atmo"
- base_name = "Atmospherics Airlock"
- glass_type = "/glass_atmos"
- airlock_type = "/atmos"
+/obj/structure/door_assembly/door_assembly_atmo
+ base_icon_state = "atmo"
+ base_name = "Atmospherics Airlock"
+ glass_type = "/glass_atmos"
+ airlock_type = "/atmos"
- door_assembly_research
- base_icon_state = "res"
- base_name = "Research Airlock"
- glass_type = "/glass_research"
- airlock_type = "/research"
+/obj/structure/door_assembly/door_assembly_research
+ base_icon_state = "res"
+ base_name = "Research Airlock"
+ glass_type = "/glass_research"
+ airlock_type = "/research"
- door_assembly_science
- base_icon_state = "sci"
- base_name = "Science Airlock"
- glass_type = "/glass_science"
- airlock_type = "/science"
+/obj/structure/door_assembly/door_assembly_science
+ base_icon_state = "sci"
+ base_name = "Science Airlock"
+ glass_type = "/glass_science"
+ airlock_type = "/science"
- door_assembly_med
- base_icon_state = "med"
- base_name = "Medical Airlock"
- glass_type = "/glass_medical"
- airlock_type = "/medical"
+/obj/structure/door_assembly/door_assembly_med
+ base_icon_state = "med"
+ base_name = "Medical Airlock"
+ glass_type = "/glass_medical"
+ airlock_type = "/medical"
- door_assembly_mai
- base_icon_state = "mai"
- base_name = "Maintenance Airlock"
- airlock_type = "/maintenance"
- glass = -1
+/obj/structure/door_assembly/door_assembly_mai
+ base_icon_state = "mai"
+ base_name = "Maintenance Airlock"
+ airlock_type = "/maintenance"
+ glass = -1
- door_assembly_ext
- base_icon_state = "ext"
- base_name = "External Airlock"
- airlock_type = "/external"
- glass = -1
+/obj/structure/door_assembly/door_assembly_ext
+ base_icon_state = "ext"
+ base_name = "External Airlock"
+ airlock_type = "/external"
+ glass = -1
- door_assembly_fre
- base_icon_state = "fre"
- base_name = "Freezer Airlock"
- airlock_type = "/freezer"
- glass = -1
+/obj/structure/door_assembly/door_assembly_fre
+ base_icon_state = "fre"
+ base_name = "Freezer Airlock"
+ airlock_type = "/freezer"
+ glass = -1
- door_assembly_hatch
- base_icon_state = "hatch"
- base_name = "Airtight Hatch"
- airlock_type = "/hatch"
- glass = -1
+/obj/structure/door_assembly/door_assembly_hatch
+ base_icon_state = "hatch"
+ base_name = "Airtight Hatch"
+ airlock_type = "/hatch"
+ glass = -1
- door_assembly_mhatch
- base_icon_state = "mhatch"
- base_name = "Maintenance Hatch"
- airlock_type = "/maintenance_hatch"
- glass = -1
+/obj/structure/door_assembly/door_assembly_mhatch
+ base_icon_state = "mhatch"
+ base_name = "Maintenance Hatch"
+ airlock_type = "/maintenance_hatch"
+ glass = -1
- door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
- base_icon_state = "highsec"
- base_name = "High Security Airlock"
- airlock_type = "/highsecurity"
- glass = -1
+/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly
+ base_icon_state = "highsec"
+ base_name = "High Security Airlock"
+ airlock_type = "/highsecurity"
+ glass = -1
- multi_tile
- icon = 'icons/obj/doors/door_assembly2x1.dmi'
- dir = EAST
- var/width = 1
+/obj/structure/door_assembly/multi_tile
+ icon = 'icons/obj/doors/door_assembly2x1.dmi'
+ dir = EAST
+ var/width = 1
/*Temporary until we get sprites.
- glass_type = "/multi_tile/glass"
- airlock_type = "/multi_tile/maint"
- glass = 1*/
- base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1.
- airlock_type = "/multi_tile/glass"
- glass = -1 //To prevent bugs in deconstruction process.
+ glass_type = "/multi_tile/glass"
+ airlock_type = "/multi_tile/maint"
+ glass = 1*/
+ base_icon_state = "g" //Remember to delete this line when reverting "glass" var to 1.
+ airlock_type = "/multi_tile/glass"
+ glass = -1 //To prevent bugs in deconstruction process.
- New()
- if(dir in list(EAST, WEST))
- bound_width = width * world.icon_size
- bound_height = world.icon_size
- else
- bound_width = world.icon_size
- bound_height = width * world.icon_size
- update_state()
+ New()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
+ update_state()
- Move()
- . = ..()
- if(dir in list(EAST, WEST))
- bound_width = width * world.icon_size
- bound_height = world.icon_size
- else
- bound_width = world.icon_size
- bound_height = width * world.icon_size
+ Move()
+ . = ..()
+ if(dir in list(EAST, WEST))
+ bound_width = width * world.icon_size
+ bound_height = world.icon_size
+ else
+ bound_width = world.icon_size
+ bound_height = width * world.icon_size
@@ -224,7 +223,7 @@ obj/structure/door_assembly
user << "There was nothing to remove. "
src.state = 1
return
-
+
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove the electronics from the airlock assembly.")
@@ -272,7 +271,8 @@ obj/structure/door_assembly
else
path = text2path("/obj/machinery/door/airlock[airlock_type]")
- new path(src.loc, src)
+ var/obj/machinery/door/new_airlock = new path(src.loc, src)
+ new_airlock.dir = src.dir
del(src)
else
..()
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
index 28d9ebc623..da68071090 100644
--- a/code/game/objects/structures/electricchair.dm
+++ b/code/game/objects/structures/electricchair.dm
@@ -74,4 +74,4 @@
A.power_light = light
A.updateicon()
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm
index 014ecae9ac..f68c7ae7cb 100644
--- a/code/game/objects/structures/false_walls.dm
+++ b/code/game/objects/structures/false_walls.dm
@@ -331,4 +331,3 @@
desc = "A wall with sandstone plating."
icon_state = ""
mineral = "sandstone"
-//------------wtf?------------end
\ No newline at end of file
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 85de4b62f5..71a87b18b4 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -193,4 +193,4 @@
/obj/structure/flora/ausbushes/fullgrass/New()
..()
- icon_state = "fullgrass_[rand(1, 3)]"
\ No newline at end of file
+ icon_state = "fullgrass_[rand(1, 3)]"
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index e3ae4353dd..5e0edbef0a 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -268,4 +268,4 @@
del(src)
return
else
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 304710b578..9bb1cec396 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -1,6 +1,6 @@
/obj/structure/grille
- desc = "A flimsy lattice of metal rods, with screws to secure it to the floor."
name = "grille"
+ desc = "A flimsy lattice of metal rods, with screws to secure it to the floor."
icon = 'icons/obj/structures.dmi'
icon_state = "grille"
density = 1
@@ -189,4 +189,4 @@
visible_message("[user] [attack_verb] the [src]! ")
health -= damage
spawn(1) healthcheck()
- return 1
+ return 1
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 535b73d3b5..0b542dd2bb 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -299,4 +299,4 @@
desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"."
icon = 'icons/obj/vehicles.dmi'
icon_state = "keys"
- w_class = 1
\ No newline at end of file
+ w_class = 1
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 40becb871f..f480cdd977 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -75,4 +75,4 @@
new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc)
usr << "You remove the last piece of meat from the alien!"
src.icon_state = "spike"
- src.occupied = 0
\ No newline at end of file
+ src.occupied = 0
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index cce8a064c0..fc57ac4f8e 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -67,4 +67,4 @@
add_fingerprint(user)
/obj/structure/ladder/attackby(obj/item/weapon/W, mob/user as mob)
- return attack_hand(user)
\ No newline at end of file
+ return attack_hand(user)
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index 14377992bb..6bbb8cfa24 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -1,5 +1,5 @@
/obj/structure/lamarr
- name = "Lab Cage"
+ name = "lab cage"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "labcage1"
desc = "A glass lab container for storing interesting creatures."
@@ -98,4 +98,4 @@
gender = FEMALE
/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
index 672011cef9..a32af450d5 100644
--- a/code/game/objects/structures/lattice.dm
+++ b/code/game/objects/structures/lattice.dm
@@ -1,6 +1,6 @@
/obj/structure/lattice
- desc = "A lightweight support lattice."
name = "lattice"
+ desc = "A lightweight support lattice."
icon = 'icons/obj/structures.dmi'
icon_state = "latticefull"
density = 0
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index ff37b0bfb2..47d9f7289b 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -284,4 +284,3 @@
CheckHardness()
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
..()
-
diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm
index b82a3495df..58e1a81b97 100644
--- a/code/game/objects/structures/mirror.dm
+++ b/code/game/objects/structures/mirror.dm
@@ -1,6 +1,6 @@
//wip wip wup
/obj/structure/mirror
- name = "SalonPro Nano-Mirror(TM)"
+ name = "\improper SalonPro Nano-Mirror(TM)"
desc = "The leading technology in hair salon products, utilizing nano-machinery to style your hair just right."
icon = 'icons/obj/watercloset.dmi'
icon_state = "mirror"
@@ -100,4 +100,4 @@
shatter()
else
user.visible_message("[user] hits [src] and bounces off! ")
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index d64e2d6ade..06aae9557b 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -24,4 +24,4 @@
else
reagents.trans_to(I, 5)
user << "You wet [I] in [src]. "
- playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
\ No newline at end of file
+ playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index e1c8427ecf..0b0c063af2 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -388,4 +388,3 @@
else
usr << "\red Access denied."
return
-
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 00946b8678..a219268d04 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -188,4 +188,4 @@ obj/structure/safe/meteorhit(obj/O as obj)
/obj/structure/safe/floor/hide(var/intact)
- invisibility = intact ? 101 : 0
\ No newline at end of file
+ invisibility = intact ? 101 : 0
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index 388dcf41b3..0b11d09fcc 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -141,12 +141,12 @@
icon_state = "goldenplaque"
/obj/structure/sign/kiddieplaque
- name = "AI developers plaque"
+ name = "\improper AI developers plaque"
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\""
icon_state = "kiddieplaque"
/obj/structure/sign/atmosplaque
- name = "\improper FEA Atmospherics Division plaque"
+ name = "\improper FEA atmospherics division plaque"
desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands."
icon_state = "atmosplaque"
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 0e8e7d5850..16d84f6aad 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -175,4 +175,4 @@
icon_state = "officechair_white"
/obj/structure/stool/bed/chair/office/dark
- icon_state = "officechair_dark"
\ No newline at end of file
+ icon_state = "officechair_dark"
diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
index 0ed780ebdd..59a819b8b9 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm
@@ -189,4 +189,4 @@
if(M == pulling)
pulling = null
usr.pulledby = null
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 924be30909..64ef0c8fad 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -1,24 +1,14 @@
-/* Tables and Racks
- * Contains:
- * Tables
- * Wooden tables
- * Reinforced tables
- * Racks
- */
+// Tables and racks.
-
-/*
- * Tables
- */
/obj/structure/table
name = "table"
desc = "A square piece of metal standing on four metal legs. It can not move."
icon = 'icons/obj/structures.dmi'
icon_state = "table"
density = 1
- anchored = 1.0
+ anchored = 1
layer = 2.8
- throwpass = 1 //You can throw objects over this, despite it's density.")
+ throwpass = 1
climbable = 1
breakable = 1
parts = /obj/item/weapon/table_parts
@@ -26,6 +16,39 @@
var/flipped = 0
var/health = 100
+/obj/structure/table/woodentable
+ name = "wooden table"
+ desc = "Do not apply fire to this. Rumour says it burns easily."
+ icon_state = "wood_table"
+ parts = /obj/item/weapon/table_parts/wood
+ health = 50
+
+/obj/structure/table/gamblingtable
+ name = "gambling table"
+ desc = "A curved wooden table with a thin carpet of green fabric."
+ icon_state = "gamble_table"
+ parts = /obj/item/weapon/table_parts/gambling
+ health = 50
+
+/obj/structure/table/reinforced
+ icon_state = "reinf_table"
+ health = 200
+ parts = /obj/item/weapon/table_parts/reinforced
+
+/obj/structure/table/rack
+ name = "rack"
+ desc = "Different from the Middle Ages version."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "rack"
+ health = 100
+ parts = /obj/item/weapon/table_parts/rack
+ flipped = -1 //Cannot flip.
+
+/obj/structure/table/examine()
+ ..()
+ if(health > 100)
+ usr << "This one looks like it has been reinforced."
+
/obj/structure/table/proc/update_adjacent()
for(var/direction in list(1,2,4,8,5,6,9,10))
if(locate(/obj/structure/table,get_step(src,direction)))
@@ -45,14 +68,18 @@
..()
/obj/structure/table/update_icon()
+
+ if(health > 100)
+ name = "reinforced [initial(name)]"
+
spawn(2) //So it properly updates when deleting
- if(flipped)
+ if(flipped == 1)
var/type = 0
var/tabledirs = 0
for(var/direction in list(turn(dir,90), turn(dir,-90)) )
var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction))
- if (T && T.flipped && T.dir == src.dir)
+ if (T && T.flipped == 1 && T.dir == src.dir)
type++
tabledirs |= direction
var/base = "table"
@@ -100,7 +127,7 @@
continue
if(!skip_sum) //means there is a window between the two tiles in this direction
var/obj/structure/table/T = locate(/obj/structure/table,get_step(src,direction))
- if(T && !T.flipped)
+ if(T && T.flipped == 0) // This should let us ignore racks for table icons/flipping. Should.
if(direction <5)
dir_sum += direction
else
@@ -265,7 +292,7 @@
return 1
if(locate(/obj/structure/table) in get_turf(mover))
return 1
- if (flipped)
+ if (flipped == 1)
if (get_dir(loc, target) == dir)
return !density
else
@@ -274,7 +301,13 @@
//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops.
/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from)
- var/turf/cover = flipped ? get_turf(src) : get_step(loc, get_dir(from, loc))
+ var/turf/cover
+ if(flipped==1)
+ cover = get_turf(src)
+ else if(flipped==0)
+ cover = get_step(loc, get_dir(from, loc))
+ if(!cover)
+ return 1
if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close
return 1
if (get_turf(P.original) == cover)
@@ -283,7 +316,7 @@
var/mob/M = P.original
if (M.lying)
chance += 20 //Lying down lets you catch less bullets
- if(flipped)
+ if(flipped==1)
if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets
chance += 20
else
@@ -302,7 +335,7 @@
/obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))
return 1
- if (flipped)
+ if (flipped==1)
if (get_dir(loc, target) == dir)
return !density
else
@@ -323,6 +356,8 @@
/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob)
if (!W) return
+
+ // Handle harm intent grabbing/tabling.
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if (istype(G.affecting, /mob/living))
@@ -331,25 +366,56 @@
if(user.a_intent == "hurt")
if (prob(15)) M.Weaken(5)
M.apply_damage(8,def_zone = "head")
- visible_message("\red [G.assailant] slams [G.affecting]'s face against \the [src]!")
+ visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]! ")
playsound(src.loc, 'sound/weapons/tablehit1.ogg', 50, 1)
else
- user << "\red You need a better grip to do that!"
+ user << "You need a better grip to do that! "
return
else
G.affecting.loc = src.loc
G.affecting.Weaken(5)
- visible_message("\red [G.assailant] puts [G.affecting] on \the [src].")
+ visible_message("[G.assailant] puts [G.affecting] on \the [src]. ")
del(W)
return
+ // Handle dissembly.
if (istype(W, /obj/item/weapon/wrench))
- user << "\blue Now disassembling table"
+ if(health > 100)
+ user << "\The [src] is too well constructed to be collapsed. Weaken it first. "
+ return
+ user << "You locate the bolts and begin disassembling \the [src]... "
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user,50))
destroy()
return
+ // Handle weakening.
+ if (istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())
+ if(initial(health)>100)
+ if(WT.remove_fuel(0, user))
+ if(src.health>100)
+ user << "You start weakening \the [src]... "
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(!do_after(user, 50) || !src || health<100 || !WT.isOn())
+ return
+ user << "You have weakened \the [src]. "
+ health -= 100
+ else if(src.health <= 100)
+ user << "You start strengthening \the [src]... "
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(!do_after(user, 50) || !src || health > 100 || !WT.isOn())
+ return
+ user << "You have strengthened \the [src]. "
+ health += 100
+ update_icon()
+ else
+ user << "\The [src] is too flimsy to be reinforced or weakened. "
+ return
+
+
+ // Handle dismantling or placing things on the table from here on.
if(isrobot(user))
return
@@ -362,8 +428,7 @@
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
- for(var/mob/O in viewers(user, 4))
- O.show_message("\blue The [src] was sliced apart by [user]!", 1, "\red You hear [src] coming apart.", 2)
+ user.visible_message("The [src] was sliced apart by [user]! ")
destroy()
user.drop_item(src)
@@ -373,14 +438,14 @@
var/obj/structure/table/T
for(var/angle in list(-90,90))
T = locate() in get_step(src.loc,turn(direction,angle))
- if(T && !T.flipped)
+ if(T && T.flipped == 0)
return 0
T = locate() in get_step(src.loc,direction)
- if (!T || T.flipped)
+ if (!T || T.flipped == 1)
return 1
if (istype(T,/obj/structure/table/reinforced/))
var/obj/structure/table/reinforced/R = T
- if (R.status == 2)
+ if (R.health > 100)
return 0
return T.straight_table_check(direction)
@@ -393,7 +458,7 @@
if (!can_touch(usr) || ismouse(usr))
return
- if(!flip(get_cardinal_dir(usr,src)))
+ if(flipped < 0 || !flip(get_cardinal_dir(usr,src)))
usr << "It won't budge. "
return
@@ -405,9 +470,15 @@
return
/obj/structure/table/proc/unflipping_check(var/direction)
+
for(var/mob/M in oview(src,0))
return 0
+ var/obj/occupied = turf_is_crowded()
+ if(occupied)
+ usr << "There's \a [occupied] in the way."
+ return 0
+
var/list/L = list()
if(direction)
L.Add(direction)
@@ -417,7 +488,7 @@
for(var/new_dir in L)
var/obj/structure/table/T = locate() in get_step(src.loc,new_dir)
if(T)
- if(T.flipped && T.dir == src.dir && !T.unflipping_check(new_dir))
+ if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir))
return 0
return 1
@@ -456,7 +527,7 @@
flags |= ON_BORDER
for(var/D in list(turn(direction, 90), turn(direction, -90)))
var/obj/structure/table/T = locate() in get_step(src,D)
- if(T && !T.flipped)
+ if(T && T.flipped == 0)
T.flip(direction)
update_icon()
update_adjacent()
@@ -473,120 +544,15 @@
flags &= ~ON_BORDER
for(var/D in list(turn(dir, 90), turn(dir, -90)))
var/obj/structure/table/T = locate() in get_step(src.loc,D)
- if(T && T.flipped && T.dir == src.dir)
+ if(T && T.flipped == 1 && T.dir == src.dir)
T.unflip()
update_icon()
update_adjacent()
return 1
-/*
- * Wooden tables
- */
-/obj/structure/table/woodentable
- name = "wooden table"
- desc = "Do not apply fire to this. Rumour says it burns easily."
- icon_state = "wood_table"
- parts = /obj/item/weapon/table_parts/wood
- health = 50
-/*
- * Gambling tables
- */
-/obj/structure/table/gamblingtable
- name = "gambling table"
- desc = "A curved wooden table with a thin carpet of green fabric."
- icon_state = "gamble_table"
- parts = /obj/item/weapon/table_parts/gambling
- health = 50
-/*
- * Reinforced tables
- */
-/obj/structure/table/reinforced
- name = "reinforced table"
- desc = "A version of the four legged table. It is stronger."
- icon_state = "reinf_table"
- health = 200
- var/status = 2
- parts = /obj/item/weapon/table_parts/reinforced
-
-/obj/structure/table/reinforced/flip(var/direction)
- if (status == 2)
- return 0
- else
- return ..()
-
-/obj/structure/table/reinforced/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0, user))
- if(src.status == 2)
- user << "\blue Now weakening the reinforced table"
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- if (do_after(user, 50))
- if(!src || !WT.isOn()) return
- user << "\blue Table weakened"
- src.status = 1
- else
- user << "\blue Now strengthening the reinforced table"
- playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
- if (do_after(user, 50))
- if(!src || !WT.isOn()) return
- user << "\blue Table strengthened"
- src.status = 2
- return
- return
-
- if (istype(W, /obj/item/weapon/wrench))
- if(src.status == 2)
- return
-
- ..()
-
-/*
- * Racks
- */
-/obj/structure/rack
- name = "rack"
- desc = "Different from the Middle Ages version."
- icon = 'icons/obj/objects.dmi'
- icon_state = "rack"
- density = 1
- flags = FPRINT
- anchored = 1.0
- throwpass = 1 //You can throw objects over this, despite it's density.
- breakable = 1
- climbable = 1
- parts = /obj/item/weapon/rack_parts
-
-/obj/structure/rack/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
- if(air_group || (height==0)) return 1
- if(src.density == 0) //Because broken racks -Agouri |TODO: SPRITE!|
- return 1
- if(istype(mover) && mover.checkpass(PASSTABLE))
- return 1
- else
- return 0
-
-/obj/structure/rack/MouseDrop_T(obj/O as obj, mob/user as mob)
- if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
- return
- if(isrobot(user))
- return
- user.drop_item()
- if (O.loc != src.loc)
- step(O, get_dir(O, src))
+// No need to handle any of this, racks are not contiguous..
+/obj/structure/table/rack/update_icon()
return
-
-/obj/structure/rack/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/weapon/rack_parts( src.loc )
- playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
- del(src)
- return
- if(isrobot(user))
- return
- if(W.loc != user) // This should stop mounted modules ending up outside the module.
- return
- user.drop_item()
- if(W && W.loc) W.loc = src.loc
+/obj/structure/table/rack/update_adjacent()
return
\ No newline at end of file
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 68ecbe0d87..4cea8bffc1 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -116,4 +116,4 @@
else
usr << browse(null, "window=dispenser")
return
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm
index 2a8d7719b2..bf80024a5e 100644
--- a/code/game/objects/structures/target_stake.dm
+++ b/code/game/objects/structures/target_stake.dm
@@ -49,4 +49,4 @@
pinned_target.loc = get_turf(user)
user << "You take the target out of the stake."
- pinned_target = null
\ No newline at end of file
+ pinned_target = null
diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm
index c115f230e2..a0855a35b0 100644
--- a/code/game/objects/structures/windoor_assembly.dm
+++ b/code/game/objects/structures/windoor_assembly.dm
@@ -10,9 +10,8 @@
obj/structure/windoor_assembly
+ name = "windoor assembly"
icon = 'icons/obj/doors/windoor.dmi'
-
- name = "Windoor Assembly"
icon_state = "l_windoor_assembly01"
anchored = 0
density = 0
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 349be88f5d..81ad18ee5d 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -4,6 +4,9 @@
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
+//Supply packs are in /code/defines/obj/supplypacks.dm
+//Computers are in /code/game/machinery/computer/supply.dm
+
var/datum/controller/supply/supply_controller = new()
var/list/mechtoys = list(
@@ -20,6 +23,9 @@ var/list/mechtoys = list(
/obj/item/toy/prize/phazon
)
+/obj/item/weapon/paper/manifest
+ name = "supply manifest"
+
/area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS.
name = "Supply Shuttle"
icon_state = "shuttle3"
@@ -34,8 +40,6 @@ var/list/mechtoys = list(
lighting_use_dynamic = 0
requires_power = 0
-//SUPPLY PACKS MOVED TO /code/defines/obj/supplypacks.dm
-
/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY
name = "\improper plastic flaps"
desc = "Completely impassable - or are they?"
@@ -75,7 +79,7 @@ var/list/mechtoys = list(
del(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
- name = "\improper Airtight plastic flaps"
+ name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
New() //set the turf below the flaps to block air
@@ -91,27 +95,6 @@ var/list/mechtoys = list(
T.blocks_air = 0
..()
-/obj/machinery/computer/supplycomp
- name = "Supply shuttle console"
- icon = 'icons/obj/computer.dmi'
- icon_state = "supply"
- req_access = list(access_cargo)
- circuit = "/obj/item/weapon/circuitboard/supplycomp"
- var/temp = null
- var/reqtime = 0 //Cooldown for requisitions - Quarxink
- var/hacked = 0
- var/can_order_contraband = 0
- var/last_viewed_group = "categories"
-
-/obj/machinery/computer/ordercomp
- name = "Supply ordering console"
- icon = 'icons/obj/computer.dmi'
- icon_state = "request"
- circuit = "/obj/item/weapon/circuitboard/ordercomp"
- var/temp = null
- var/reqtime = 0 //Cooldown for requisitions - Quarxink
- var/last_viewed_group = "categories"
-
/*
/obj/effect/marker/supplymarker
icon_state = "X"
@@ -290,406 +273,3 @@ var/list/mechtoys = list(
shoppinglist.Cut()
return
-
-/obj/item/weapon/paper/manifest
- name = "Supply Manifest"
-
-/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob)
- if(..())
- return
- user.set_machine(src)
- var/dat
- if(temp)
- dat = temp
- else
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
- if (shuttle)
- dat += {"Supply shuttle
- Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]
- Supply points: [supply_controller.points]
- \nRequest items
- View approved orders
- View requests
- Close "}
-
- user << browse(dat, "window=computer;size=575x450")
- onclose(user, "computer")
- return
-
-/obj/machinery/computer/ordercomp/Topic(href, href_list)
- if(..())
- return
-
- if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) )
- usr.set_machine(src)
-
- if(href_list["order"])
- if(href_list["order"] == "categories")
- //all_supply_groups
- //Request what?
- last_viewed_group = "categories"
- temp = "Supply points: [supply_controller.points] "
- temp += "Main Menu "
- temp += "Select a category "
- for(var/supply_group_name in all_supply_groups )
- temp += "[supply_group_name] "
- else
- last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_controller.points] "
- temp += "Back to all categories "
- temp += "Request from: [last_viewed_group] "
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
- if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
- temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
-
- else if (href_list["doorder"])
- if(world.time < reqtime)
- for(var/mob/V in hearers(src))
- V.show_message("[src] 's monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
- return
-
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
- if(!istype(P)) return
-
- var/timeout = world.time + 600
- var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
- if(world.time > timeout) return
- if(!reason) return
-
- var/idname = "*None Provided*"
- var/idrank = "*None Provided*"
- if(ishuman(usr))
- var/mob/living/carbon/human/H = usr
- idname = H.get_authentification_name()
- idrank = H.get_assignment()
- else if(issilicon(usr))
- idname = usr.real_name
-
- supply_controller.ordernum++
- var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
- reqform.name = "Requisition Form - [P.name]"
- reqform.info += "[station_name] Supply Requisition Form "
- reqform.info += "INDEX: #[supply_controller.ordernum] "
- reqform.info += "REQUESTED BY: [idname] "
- reqform.info += "RANK: [idrank] "
- reqform.info += "REASON: [reason] "
- reqform.info += "SUPPLY CRATE TYPE: [P.name] "
- reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
- reqform.info += "CONTENTS: "
- reqform.info += P.manifest
- reqform.info += " "
- reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION: "
-
- reqform.update_icon() //Fix for appearing blank when printed.
- reqtime = (world.time + 5) % 1e5
-
- //make our supply_order datum
- var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_controller.ordernum
- O.object = P
- O.orderedby = idname
- supply_controller.requestlist += O
-
- temp = "Thanks for your request. The cargo team will process it as soon as possible. "
- temp += "Back Main Menu "
-
- else if (href_list["vieworders"])
- temp = "Current approved orders: "
- for(var/S in supply_controller.shoppinglist)
- var/datum/supply_order/SO = S
- temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""] "
- temp += "OK "
-
- else if (href_list["viewrequests"])
- temp = "Current requests: "
- for(var/S in supply_controller.requestlist)
- var/datum/supply_order/SO = S
- temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] "
- temp += "OK "
-
- else if (href_list["mainmenu"])
- temp = null
-
- add_fingerprint(usr)
- updateUsrDialog()
- return
-
-/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob)
- if(!allowed(user))
- user << "\red Access Denied."
- return
-
- if(..())
- return
- user.set_machine(src)
- post_signal("supply")
- var/dat
- if (temp)
- dat = temp
- else
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
- if (shuttle)
- dat += "Supply shuttle "
- dat += "\nLocation: "
- if (shuttle.has_arrive_time())
- dat += "In transit ([shuttle.eta_minutes()] Mins.) "
- else
- if (shuttle.at_station())
- if (shuttle.docking_controller)
- switch(shuttle.docking_controller.get_docking_status())
- if ("docked") dat += "Docked at station "
- if ("undocked") dat += "Undocked from station "
- if ("docking") dat += "Docking with station [shuttle.can_force()? "Force Launch " : ""] "
- if ("undocking") dat += "Undocking from station [shuttle.can_force()? "Force Launch " : ""] "
- else
- dat += "Station "
-
- if (shuttle.can_launch())
- dat += "Send away "
- else if (shuttle.can_cancel())
- dat += "Cancel launch "
- else
- dat += "*Shuttle is busy*"
- dat += " \n "
- else
- dat += "Away "
- if (shuttle.can_launch())
- dat += "Request supply shuttle "
- else if (shuttle.can_cancel())
- dat += "Cancel request "
- else
- dat += "*Shuttle is busy*"
- dat += " \n "
-
-
- dat += {" \nSupply points: [supply_controller.points] \n
- \nOrder items \n
- \nView requests \n
- \nView orders \n
- \nClose "}
-
-
- user << browse(dat, "window=computer;size=575x450")
- onclose(user, "computer")
- return
-
-/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
- if(istype(I,/obj/item/weapon/card/emag) && !hacked)
- user << "\blue Special supplies unlocked."
- hacked = 1
- return
- else
- ..()
- return
-
-/obj/machinery/computer/supplycomp/Topic(href, href_list)
- if(!supply_controller)
- world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow."
- return
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
- if (!shuttle)
- world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow."
- return
- if(..())
- return
-
- if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) )
- usr.set_machine(src)
-
- //Calling the shuttle
- if(href_list["send"])
- if(shuttle.at_station())
- if (shuttle.forbidden_atoms_check())
- temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.OK "
- else
- shuttle.launch(src)
- temp = "Initiating launch sequence. \[Force Launch \]OK "
- else
- shuttle.launch(src)
- temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.OK "
- post_signal("supply")
-
- if (href_list["force_send"])
- shuttle.force_launch(src)
-
- if (href_list["cancel_send"])
- shuttle.cancel_launch(src)
-
- else if (href_list["order"])
- //if(!shuttle.idle()) return //this shouldn't be necessary it seems
- if(href_list["order"] == "categories")
- //all_supply_groups
- //Request what?
- last_viewed_group = "categories"
- temp = "Supply points: [supply_controller.points] "
- temp += "Main Menu "
- temp += "Select a category "
- for(var/supply_group_name in all_supply_groups )
- temp += "[supply_group_name] "
- else
- last_viewed_group = href_list["order"]
- temp = "Supply points: [supply_controller.points] "
- temp += "Back to all categories "
- temp += "Request from: [last_viewed_group] "
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
- if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
- temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
-
- /*temp = "Supply points: [supply_controller.points] Request what? "
-
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
- if(N.hidden && !hacked) continue
- if(N.contraband && !can_order_contraband) continue
- temp += "[supply_name] Cost: [N.cost] " //the obj because it would get caught by the garbage
- temp += "OK "*/
-
- else if (href_list["doorder"])
- if(world.time < reqtime)
- for(var/mob/V in hearers(src))
- V.show_message("[src] 's monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
- return
-
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
- if(!istype(P)) return
-
- var/timeout = world.time + 600
- var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
- if(world.time > timeout) return
- if(!reason) return
-
- var/idname = "*None Provided*"
- var/idrank = "*None Provided*"
- if(ishuman(usr))
- var/mob/living/carbon/human/H = usr
- idname = H.get_authentification_name()
- idrank = H.get_assignment()
- else if(issilicon(usr))
- idname = usr.real_name
-
- supply_controller.ordernum++
- var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
- reqform.name = "Requisition Form - [P.name]"
- reqform.info += "[station_name] Supply Requisition Form "
- reqform.info += "INDEX: #[supply_controller.ordernum] "
- reqform.info += "REQUESTED BY: [idname] "
- reqform.info += "RANK: [idrank] "
- reqform.info += "REASON: [reason] "
- reqform.info += "SUPPLY CRATE TYPE: [P.name] "
- reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))] "
- reqform.info += "CONTENTS: "
- reqform.info += P.manifest
- reqform.info += " "
- reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION: "
-
- reqform.update_icon() //Fix for appearing blank when printed.
- reqtime = (world.time + 5) % 1e5
-
- //make our supply_order datum
- var/datum/supply_order/O = new /datum/supply_order()
- O.ordernum = supply_controller.ordernum
- O.object = P
- O.orderedby = idname
- supply_controller.requestlist += O
-
- temp = "Order request placed. "
- temp += "Back | Main Menu | Authorize Order "
-
- else if(href_list["confirmorder"])
- //Find the correct supply_order datum
- var/ordernum = text2num(href_list["confirmorder"])
- var/datum/supply_order/O
- var/datum/supply_packs/P
- temp = "Invalid Request"
- for(var/i=1, i<=supply_controller.requestlist.len, i++)
- var/datum/supply_order/SO = supply_controller.requestlist[i]
- if(SO.ordernum == ordernum)
- O = SO
- P = O.object
- if(supply_controller.points >= P.cost)
- supply_controller.requestlist.Cut(i,i+1)
- supply_controller.points -= P.cost
- supply_controller.shoppinglist += O
- temp = "Thanks for your order. "
- temp += "Back Main Menu "
- else
- temp = "Not enough supply points. "
- temp += "Back Main Menu "
- break
-
- else if (href_list["vieworders"])
- temp = "Current approved orders: "
- for(var/S in supply_controller.shoppinglist)
- var/datum/supply_order/SO = S
- temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] "// (Cancel) "
- temp += "OK "
-/*
- else if (href_list["cancelorder"])
- var/datum/supply_order/remove_supply = href_list["cancelorder"]
- supply_shuttle_shoppinglist -= remove_supply
- supply_shuttle_points += remove_supply.object.cost
- temp += "Canceled: [remove_supply.object.name] "
-
- for(var/S in supply_shuttle_shoppinglist)
- var/datum/supply_order/SO = S
- temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] (Cancel) "
- temp += "OK "
-*/
- else if (href_list["viewrequests"])
- temp = "Current requests: "
- for(var/S in supply_controller.requestlist)
- var/datum/supply_order/SO = S
- temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] Approve Remove "
-
- temp += "Clear list "
- temp += "OK "
-
- else if (href_list["rreq"])
- var/ordernum = text2num(href_list["rreq"])
- temp = "Invalid Request. "
- for(var/i=1, i<=supply_controller.requestlist.len, i++)
- var/datum/supply_order/SO = supply_controller.requestlist[i]
- if(SO.ordernum == ordernum)
- supply_controller.requestlist.Cut(i,i+1)
- temp = "Request removed. "
- break
- temp += "Back Main Menu "
-
- else if (href_list["clearreq"])
- supply_controller.requestlist.Cut()
- temp = "List cleared. "
- temp += "OK "
-
- else if (href_list["mainmenu"])
- temp = null
-
- add_fingerprint(usr)
- updateUsrDialog()
- return
-
-/obj/machinery/computer/supplycomp/proc/post_signal(var/command)
-
- var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
-
- if(!frequency) return
-
- var/datum/signal/status_signal = new
- status_signal.source = src
- status_signal.transmission_method = 1
- status_signal.data["command"] = command
-
- frequency.post_signal(src, status_signal)
-
-
-
-
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 42a63f26e5..8f66524076 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -79,66 +79,29 @@
noslip = 1
if (noslip)
return // no slipping while sitting in a chair, plz
- switch (src.wet)
- if(1)
- if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
- if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP))
- M.stop_pulling()
- step(M, M.dir)
- M << "\blue You slipped on the wet floor!"
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(5)
- M.Weaken(3)
- else
- M.inertia_dir = 0
- return
- else if(!istype(M, /mob/living/carbon/slime))
- if (M.m_intent == "run")
- M.stop_pulling()
- step(M, M.dir)
- M << "\blue You slipped on the wet floor!"
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- M.Stun(5)
- M.Weaken(3)
- else
- M.inertia_dir = 0
- return
- if(2) //lube //can cause infinite loops - needs work
- if(!istype(M, /mob/living/carbon/slime) && !M.buckled)
- M.stop_pulling()
+ if(src.wet)
+ var/slip_dist = 1
+ var/slip_stun = 6
+ var/floor_type = "wet"
+
+ switch(src.wet)
+ if(2) // Lube
+ floor_type = "slippery"
+ slip_dist = 4
+ slip_stun = 10
+ if(3) // Ice
+ floor_type = "icy"
+ slip_stun = 4
+
+ if(M.slip("the [floor_type] floor",slip_stun))
+ for(var/i = 0;i 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
-// if(M==user) //temporary hack to stop runtimes. ~Carn
-// user.stop_pulling() //but...fixed the root of the problem
-// return //shoudn't be needed now, unless somebody fucks with pulling again.
-
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
+ if(is_light_floor())
+ if(user.canmove && !user.restrained())
+ toggle_lightfloor_on()
+ update_icon()
+ return 1
+ return 0
/turf/simulated/floor/proc/gets_drilled()
return
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 610186a7b7..367c143c19 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -1,8 +1,8 @@
/turf/simulated/floor/airless
icon_state = "floor"
name = "airless floor"
- oxygen = 0.01
- nitrogen = 0.01
+ oxygen = 0
+ nitrogen = 0
temperature = TCMB
New()
@@ -84,7 +84,7 @@
name = "vacuum floor"
icon_state = "engine"
oxygen = 0
- nitrogen = 0.001
+ nitrogen = 0
temperature = TCMB
/turf/simulated/floor/plating
@@ -96,8 +96,8 @@
/turf/simulated/floor/plating/airless
icon_state = "plating"
name = "airless plating"
- oxygen = 0.01
- nitrogen = 0.01
+ oxygen = 0
+ nitrogen = 0
temperature = TCMB
New()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index d8f91582b6..c206c42c82 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -7,6 +7,7 @@
var/damage = 0
var/damage_cap = 100 //Wall will break down to girders if damage reaches this point
+ var/armor = 0.5 // Damage is multiplied by this
var/damage_overlay
var/global/damage_overlays[8]
@@ -22,6 +23,21 @@
var/walltype = "metal"
+/turf/simulated/wall/bullet_act(var/obj/item/projectile/Proj)
+
+ // Tasers and stuff? No thanks.
+ if(Proj.damage_type == HALLOSS)
+ return
+
+ // Emitter blasts are somewhat weaker as emitters have large rate of fire and don't require limited power cell to run
+ if(istype(Proj, /obj/item/projectile/beam/emitter))
+ Proj.damage /= 4
+
+ take_damage(Proj.damage * armor)
+ return
+
+
+
/turf/simulated/wall/Del()
for(var/obj/effect/E in src) if(E.name == "Wallrot") del E
..()
@@ -101,7 +117,7 @@
/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
if(adj_temp > max_temperature)
- take_damage(rand(10, 20) * (adj_temp / max_temperature))
+ take_damage(log(rand(0.9, 1.1) * (adj_temp - max_temperature)))
return ..()
@@ -225,28 +241,38 @@
ReplaceWithLattice()
return 0
+/turf/simulated/wall
+ var/hulk_destroy_prob = 40
+ var/hulk_take_damage = 1
+ var/rotting_destroy_touch = 1
+ var/rotting_touch_message = "\blue The wall crumbles under your touch."
+
//Interactions
/turf/simulated/wall/attack_hand(mob/user as mob)
if (HULK in user.mutations)
- if (prob(40) || rotting)
+ if (prob(hulk_destroy_prob) || rotting)
usr << text("\blue You smash through the wall.")
usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
dismantle_wall(1)
- return
+ return 1
else
usr << text("\blue You punch the wall.")
- take_damage(rand(25, 75))
- return
+ if(hulk_take_damage)
+ take_damage(rand(25, 75))
+ return 1
if(rotting)
- user << "\blue The wall crumbles under your touch."
- dismantle_wall()
- return
+ user << rotting_touch_message
+ if(rotting_destroy_touch)
+ dismantle_wall()
+ return 1
+
+ if(..()) return 1
user << "\blue You push the wall but nothing happens!"
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
src.add_fingerprint(user)
- return
+ return 0
/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index 10c7a2cbce..610467915d 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -5,33 +5,19 @@
opacity = 1
density = 1
- damage_cap = 200
+ damage_cap = 1000
max_temperature = 6000
+ armor = 0.1 // Only 10% damage from gunfire, it's made from strong alloys and stuff.
walltype = "rwall"
var/d_state = 0
-/turf/simulated/wall/r_wall/attack_hand(mob/user as mob)
- if (HULK in user.mutations)
- if (prob(10) || rotting)
- usr << text("\blue You smash through the wall.")
- usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- dismantle_wall(1)
- return
- else
- usr << text("\blue You punch the wall.")
- return
-
- if(rotting)
- user << "\blue This wall feels rather unstable."
- return
-
- user << "\blue You push the wall but nothing happens!"
- playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
- src.add_fingerprint(user)
- return
-
+/turf/simulated/wall/r_wall
+ hulk_destroy_prob = 10
+ hulk_take_damage = 0
+ rotting_destroy_touch = 0
+ rotting_touch_message = "\blue This wall feels rather unstable."
/turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 0dcd0dd8a7..e1c6f3958c 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -1,9 +1,13 @@
+//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
+//(Exceptions: extended, sandbox and nuke) -Errorage
+var/list/accessible_z_levels = list("1" = 5, "3" = 10, "4" = 15, "5" = 10, "6" = 60)
+
/turf/space
icon = 'icons/turf/space.dmi'
name = "\proper space"
icon_state = "0"
- temperature = T0C
+ temperature = TCMB
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
// heat_capacity = 700000 No.
@@ -11,23 +15,6 @@
if(!istype(src, /turf/space/transit))
icon_state = "[((x + y) ^ ~(x * y) + z) % 25]"
-/turf/space/attack_hand(mob/user as mob)
- if ((user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/atom/movable/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
-
/turf/space/attackby(obj/item/C as obj, mob/user as mob)
if (istype(C, /obj/item/stack/rods))
@@ -111,7 +98,7 @@
var/safety = 1
while(move_to_z == src.z)
- var/move_to_z_str = pickweight(accessable_z_levels)
+ var/move_to_z_str = pickweight(accessible_z_levels)
move_to_z = text2num(move_to_z_str)
safety++
if(safety > 10)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index d2cd7a18d5..6c9ee85751 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -37,6 +37,22 @@
/turf/ex_act(severity)
return 0
+/turf/attack_hand(mob/user)
+ if(!(user.canmove) || user.restrained() || !(user.pulling))
+ return 0
+ if(user.pulling.anchored || !isturf(user.pulling.loc))
+ return 0
+ if(user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1)
+ return 0
+ if(ismob(user.pulling))
+ var/mob/M = user.pulling
+ var/atom/movable/t = M.pulling
+ M.stop_pulling()
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ M.start_pulling(t)
+ else
+ step(user.pulling, get_dir(user.pulling.loc, src))
+ return 1
/turf/bullet_act(var/obj/item/projectile/Proj)
if(istype(Proj ,/obj/item/projectile/beam/pulse))
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index 68ac083f15..bd6884c5d8 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -2,20 +2,3 @@
name = "floor"
icon = 'icons/turf/floors.dmi'
icon_state = "Floor3"
-
-/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
- if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
- return
- if (user.pulling.anchored || !isturf(user.pulling.loc))
- return
- if ((user.pulling.loc != user.loc && get_dist(user, user.pulling) > 1))
- return
- if (ismob(user.pulling))
- var/mob/M = user.pulling
- var/mob/t = M.pulling
- M.stop_pulling()
- step(user.pulling, get_dir(user.pulling.loc, src))
- M.start_pulling(t)
- else
- step(user.pulling, get_dir(user.pulling.loc, src))
- return
\ No newline at end of file
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 83ec023b89..e1b6428712 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -20,14 +20,14 @@
return
if(!holder)
- if(!ooc_allowed)
- src << "\red OOC is globally muted"
+ if(!config.ooc_allowed)
+ src << "OOC is globally muted. "
return
- if(!dooc_allowed && (mob.stat == DEAD))
- usr << "\red OOC for dead mobs has been turned off."
+ if(!config.dooc_allowed && (mob.stat == DEAD))
+ usr << "OOC for dead mobs has been turned off. "
return
if(prefs.muted & MUTE_OOC)
- src << "\red You cannot use OOC (muted)."
+ src << "You cannot use OOC (muted). "
return
if(handle_spam_prevention(msg,MUTE_OOC))
return
@@ -85,14 +85,14 @@
return
if(!holder)
- if(!ooc_allowed)
- src << "\red OOC is globally muted"
+ if(!config.ooc_allowed)
+ src << "OOC is globally muted. "
return
- if(!dooc_allowed && (mob.stat == DEAD))
- usr << "\red OOC for dead mobs has been turned off."
+ if(!config.dooc_allowed && (mob.stat == DEAD))
+ usr << "OOC for dead mobs has been turned off. "
return
if(prefs.muted & MUTE_OOC)
- src << "\red You cannot use OOC (muted)."
+ src << "You cannot use OOC (muted). "
return
if(handle_spam_prevention(msg,MUTE_OOC))
return
@@ -106,7 +106,7 @@
var/mob/source = src.mob
var/list/heard = get_mobs_in_view(7, source)
-
+
var/display_name = source.key
if(holder && holder.fakekey)
display_name = holder.fakekey
diff --git a/code/global.dm b/code/global.dm
index 2319912b4d..19ddbbe289 100644
--- a/code/global.dm
+++ b/code/global.dm
@@ -1,16 +1,19 @@
//#define TESTING
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+//items that ask to be called every cycle
var/global/obj/effect/datacore/data_core = null
-
-
var/global/list/all_areas = list()
var/global/list/machines = list()
var/global/list/processing_objects = list()
var/global/list/active_diseases = list()
var/global/list/med_hud_users = list() //list of all entities using a medical HUD.
var/global/list/sec_hud_users = list() //list of all entities using a security HUD.
- //items that ask to be called every cycle
+
+//Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.
+var/list/restricted_camera_networks = list("thunder","ERT","NUKE")
+
+var/global/list/global_mutations = list() // list of hidden mutation things
var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event
@@ -24,9 +27,11 @@ var/global/list/global_map = null
//4 - Derelict
//3 - AI satellite
//5 - empty space
-
-
//////////////
+
+//Noises made when hit while typing.
+var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
+
var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4","h5","h6","hr","pre", \
"big","small","font","i","u","b","s","sub","sup","tt","br","hr","ol","ul","li","caption","col", \
"table","td","th","tr")
@@ -34,6 +39,8 @@ var/list/paper_blacklist = list("java","onblur","onchange","onclick","ondblclick
"onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover", \
"onmouseup","onreset","onselect","onsubmit","onunload")
+// The way blocks are handled badly needs a rewrite, this is horrible.
+// Too much of a project to handle at the moment, TODO for later.
var/BLINDBLOCK = 0
var/DEAFBLOCK = 0
var/HULKBLOCK = 0
@@ -74,33 +81,19 @@ var/blobevent = 0
///////////////
var/diary = null
-var/diaryofmeanpeople = null
var/href_logfile = null
var/station_name = "NSS Exodus"
var/game_version = "Baystation12"
var/changelog_hash = ""
var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544)
-var/datum/air_tunnel/air_tunnel1/SS13_airtunnel = null
var/going = 1.0
var/master_mode = "extended"//"extended"
var/secret_force_mode = "secret" // if this is anything but "secret", the secret rotation will forceably choose this mode
-var/datum/engine_eject/engine_eject_control = null
var/host = null
-var/aliens_allowed = 0
-var/ooc_allowed = 1
-var/dsay_allowed = 1
-var/dooc_allowed = 1
-var/traitor_scaling = 1
-//var/goonsay_allowed = 0
-var/dna_ident = 1
-var/abandon_allowed = 1
-var/enter_allowed = 1
-var/guests_allowed = 1
var/shuttle_frozen = 0
var/shuttle_left = 0
-var/tinted_weldhelh = 1
var/list/jobMax = list()
var/list/bombers = list( )
@@ -132,7 +125,7 @@ var/list/latejoin_cyborg = list()
var/list/prisonwarp = list() //prisoners go to these
var/list/holdingfacility = list() //captured people go here
-var/list/xeno_spawn = list()//Aliens spawn at these.
+var/list/xeno_spawn = list()//Aliens spawn at ahahthese.
// list/mazewarp = list()
var/list/tdome1 = list()
var/list/tdome2 = list()
@@ -180,59 +173,26 @@ var/datum/nanomanager/nanomanager = new()
// event manager, the manager for events
var/datum/event_manager/event_manager = new()
-#define SPEED_OF_LIGHT 3e8 //not exact but hey!
-#define SPEED_OF_LIGHT_SQ 9e+16
-#define FIRE_DAMAGE_MODIFIER 0.0215 //Higher values result in more external fire damage to the skin (default 0.0215)
-#define AIR_DAMAGE_MODIFIER 2.025 //More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
-#define INFINITY 1.#INF
-#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary.
- // 1 will enable set background. 0 will disable set background.
-
- //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam
-#define MAX_MESSAGE_LEN 1024
-#define MAX_PAPER_MESSAGE_LEN 3072
-#define MAX_BOOK_MESSAGE_LEN 9216
-#define MAX_NAME_LEN 26
-
-#define shuttle_time_in_station 1800 // 3 minutes in the station
-#define shuttle_time_to_arrive 6000 // 10 minutes to arrive
-
-#define EVENT_LEVEL_MUNDANE 1
-#define EVENT_LEVEL_MODERATE 2
-#define EVENT_LEVEL_MAJOR 3
-
-// Suit sensor levels
-#define SUIT_SENSOR_OFF 0
-#define SUIT_SENSOR_BINARY 1
-#define SUIT_SENSOR_VITAL 2
-#define SUIT_SENSOR_TRACKING 3
-
- //away missions
+//away missions
var/list/awaydestinations = list() //a list of landmarks that the warpgate can take you to
- // MySQL configuration
-
+// MySQL configuration
var/sqladdress = "localhost"
var/sqlport = "3306"
var/sqldb = "tgstation"
var/sqllogin = "root"
var/sqlpass = ""
- // Feedback gathering sql connection
-
+// Feedback gathering sql connection
var/sqlfdbkdb = "test"
var/sqlfdbklogin = "root"
var/sqlfdbkpass = ""
-
var/sqllogging = 0 // Should we log deaths, population stats, etc?
-
-
- // Forum MySQL configuration (for use with forum account/key authentication)
- // These are all default values that will load should the forumdbconfig.txt
- // file fail to read for whatever reason.
-
+// Forum MySQL configuration (for use with forum account/key authentication)
+// These are all default values that will load should the forumdbconfig.txt
+// file fail to read for whatever reason.
var/forumsqladdress = "localhost"
var/forumsqlport = "3306"
var/forumsqldb = "tgstation"
@@ -241,8 +201,8 @@ var/forumsqlpass = ""
var/forum_activated_group = "2"
var/forum_authenticated_group = "10"
- // For FTP requests. (i.e. downloading runtime logs.)
- // However it'd be ok to use for accessing attack logs and such too, which are even laggier.
+// For FTP requests. (i.e. downloading runtime logs.)
+// However it'd be ok to use for accessing attack logs and such too, which are even laggier.
var/fileaccess_timer = 0
var/custom_event_msg = null
@@ -256,3 +216,18 @@ var/DBConnection/dbcon_old = new() //Tgstation database (Old database) - See the
//added for Xenoarchaeology, might be useful for other stuff
var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")
+
+// Chemistry lists.
+var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") //increase heart rate
+var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") //decrease heart rate
+var/list/heartstopper = list("potassium_phorochloride", "zombie_powder") //this stops the heart
+var/list/cheartstopper = list("potassium_chloride") //this stops the heart when overdose is met -- c = conditional
+
+//Used by robots and robot preferences.
+var/list/robot_module_types = list("Standard", "Engineering", "Construction", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security")
+
+// Some scary sounds.
+var/static/list/scarySounds = list('sound/weapons/thudswoosh.ogg','sound/weapons/Taser.ogg','sound/weapons/armbomb.ogg','sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg','sound/voice/hiss5.ogg','sound/voice/hiss6.ogg','sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg','sound/items/Welder.ogg','sound/items/Welder2.ogg','sound/machines/airlock.ogg','sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg')
+
+// Bomb cap!
+var/max_explosion_range = 14
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index 59e4182ac5..f1005b59a5 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -5,7 +5,7 @@ world/IsBanned(key,address,computer_id)
return ..()
//Guest Checking
- if(!guests_allowed && IsGuestKey(key))
+ if(!config.guests_allowed && IsGuestKey(key))
log_access("Failed Login: [key] - Guests not allowed")
message_admins("\blue Failed Login: [key] - Guests not allowed")
return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 93b2824ebe..9c3acb9c78 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -169,17 +169,29 @@ var/global/floorIsLava = 0
Shade
"}
-
- if (M.client)
- body += {"
+ body += {"
Other actions:
- Forcesay |
+ Forcesay
+ "}
+ if (M.client)
+ body += {" |
Thunderdome 1 |
Thunderdome 2 |
Thunderdome Admin |
Thunderdome Observer |
"}
+ // language toggles
+ body += "Languages: "
+ var/f = 1
+ for(var/k in all_languages)
+ var/datum/language/L = all_languages[k]
+ if(!f) body += " | "
+ else f = 0
+ if(L in M.languages)
+ body += "[k] "
+ else
+ body += "[k] "
body += {"