Crystal Agitators (#8609)

This commit is contained in:
Geeves
2020-09-01 14:04:12 +02:00
committed by GitHub
parent 737c201738
commit a24f4ddb79
36 changed files with 2062 additions and 742 deletions

View File

@@ -1006,6 +1006,7 @@
#include "code\game\objects\structures\barsign.dm" #include "code\game\objects\structures\barsign.dm"
#include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\bedsheet_bin.dm"
#include "code\game\objects\structures\coathanger.dm" #include "code\game\objects\structures\coathanger.dm"
#include "code\game\objects\structures\crystals.dm"
#include "code\game\objects\structures\curtains.dm" #include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm" #include "code\game\objects\structures\door_assembly.dm"
@@ -2277,6 +2278,7 @@
#include "code\modules\power\cable.dm" #include "code\modules\power\cable.dm"
#include "code\modules\power\cable_heavyduty.dm" #include "code\modules\power\cable_heavyduty.dm"
#include "code\modules\power\cell.dm" #include "code\modules\power\cell.dm"
#include "code\modules\power\crystal_agitator.dm"
#include "code\modules\power\fractal_reactor.dm" #include "code\modules\power\fractal_reactor.dm"
#include "code\modules\power\generator.dm" #include "code\modules\power\generator.dm"
#include "code\modules\power\generator_type2.dm" #include "code\modules\power\generator_type2.dm"

View File

@@ -376,6 +376,16 @@
#define AURA_TYPE_THROWN "Thrown" #define AURA_TYPE_THROWN "Thrown"
#define AURA_TYPE_LIFE "Life" #define AURA_TYPE_LIFE "Life"
// Remote Control defines
#define REMOTE_GENERIC_MECH "remotemechs"
#define REMOTE_AI_MECH "aimechs"
#define REMOTE_PRISON_MECH "prisonmechs"
#define REMOTE_GENERIC_ROBOT "remoterobots"
#define REMOTE_BUNKER_ROBOT "bunkerrobots"
#define REMOTE_PRISON_ROBOT "prisonrobots"
#define REMOTE_WARDEN_ROBOT "wardenrobots"
// Robot Overlay Defines // Robot Overlay Defines
#define ROBOT_PANEL_EXPOSED "exposed" #define ROBOT_PANEL_EXPOSED "exposed"
#define ROBOT_PANEL_CELL "cell" #define ROBOT_PANEL_CELL "cell"

View File

@@ -16,6 +16,7 @@
// department channels // department channels
var/const/PUB_FREQ = 1459 var/const/PUB_FREQ = 1459
var/const/PEN_FREQ = 1451
var/const/SEC_FREQ = 1359 var/const/SEC_FREQ = 1359
var/const/ENG_FREQ = 1357 var/const/ENG_FREQ = 1357
var/const/MED_FREQ = 1355 var/const/MED_FREQ = 1355
@@ -34,6 +35,7 @@ var/list/radiochannels = list(
"Medical" = MED_FREQ, "Medical" = MED_FREQ,
"Engineering" = ENG_FREQ, "Engineering" = ENG_FREQ,
"Security" = SEC_FREQ, "Security" = SEC_FREQ,
"Penal" = PEN_FREQ,
"Response Team" = ERT_FREQ, "Response Team" = ERT_FREQ,
"Special Ops" = DTH_FREQ, "Special Ops" = DTH_FREQ,
"Mercenary" = SYND_FREQ, "Mercenary" = SYND_FREQ,

View File

@@ -173,6 +173,8 @@ var/datum/controller/subsystem/radio/SSradio
. = "airadio" . = "airadio"
if (SEC_FREQ,SEC_I_FREQ) if (SEC_FREQ,SEC_I_FREQ)
. = "secradio" . = "secradio"
if (PEN_FREQ)
. = "penradio"
if (ENG_FREQ) if (ENG_FREQ)
. = "engradio" . = "engradio"
if (SCI_FREQ) if (SCI_FREQ)

View File

@@ -6,11 +6,11 @@
flags = SS_NO_FIRE flags = SS_NO_FIRE
// MECHA // MECHA
var/list/mechnetworks = list("remotemechs", "aimechs", "prisonmechs") // A list of all the networks a mech can possibly connect to var/list/mechnetworks = list(REMOTE_GENERIC_MECH, REMOTE_AI_MECH, REMOTE_PRISON_MECH) // A list of all the networks a mech can possibly connect to
var/list/list/mechs = list() // A list of lists, containing the mechs and their networks var/list/list/mechs = list() // A list of lists, containing the mechs and their networks
// IPC BODIES // IPC BODIES
var/list/robotnetworks = list("remoterobots", "bunkerrobots", "prisonrobots") var/list/robotnetworks = list(REMOTE_GENERIC_ROBOT, REMOTE_BUNKER_ROBOT, REMOTE_PRISON_ROBOT, REMOTE_WARDEN_ROBOT)
var/list/list/robots = list() var/list/list/robots = list()
/datum/controller/subsystem/virtualreality/New() /datum/controller/subsystem/virtualreality/New()
@@ -125,7 +125,6 @@
/datum/controller/subsystem/virtualreality/proc/mech_selection(var/user, var/network) /datum/controller/subsystem/virtualreality/proc/mech_selection(var/user, var/network)
var/list/mech = list() var/list/mech = list()
mech["Return"] = null
for(var/mob/living/heavy_vehicle/R in mechs[network]) for(var/mob/living/heavy_vehicle/R in mechs[network])
var/turf/T = get_turf(R) var/turf/T = get_turf(R)
@@ -144,23 +143,20 @@
continue continue
mech[R.name] = R mech[R.name] = R
if(mech.len == 1) if(!length(mech))
to_chat(user, SPAN_WARNING("No active remote mechs are available.")) to_chat(user, SPAN_WARNING("No active remote mechs are available."))
return return
var/desc = input("Please select a remote control compatible mech to take over.", "Remote Mech Selection") in mech|null var/choice = input("Please select a remote control compatible mech to take over.", "Remote Mech Selection") as null|anything in mech
if(!desc) if(!choice)
return return
var/mob/living/heavy_vehicle/chosen_mech = mech[desc] var/mob/living/heavy_vehicle/chosen_mech = mech[choice]
var/mob/living/remote_pilot = chosen_mech.pilots[1] // the first pilot var/mob/living/remote_pilot = chosen_mech.pilots[1] // the first pilot
mind_transfer(user, remote_pilot) mind_transfer(user, remote_pilot)
return
/datum/controller/subsystem/virtualreality/proc/robot_selection(var/user, var/network) /datum/controller/subsystem/virtualreality/proc/robot_selection(var/user, var/network)
var/list/robot = list() var/list/robot = list()
robot["Return"] = null
for(var/mob/living/R in robots[network]) for(var/mob/living/R in robots[network])
var/turf/T = get_turf(R) var/turf/T = get_turf(R)
@@ -174,14 +170,12 @@
continue continue
robot[R.name] = R robot[R.name] = R
if(robot.len == 1) if(!length(robot))
to_chat(user, SPAN_WARNING("No active remote robots are available.")) to_chat(user, SPAN_WARNING("No active remote robots are available."))
return return
var/desc = input("Please select a remote control robot to take over.", "Remote Robot Selection") in robot|null var/choice = input("Please select a remote control robot to take over.", "Remote Robot Selection") as null|anything in robot
if(!desc) if(!choice)
return return
mind_transfer(user, robot[desc]) mind_transfer(user, robot[choice])
return

View File

@@ -88,7 +88,7 @@
uniform = /obj/item/clothing/under/rank/warden uniform = /obj/item/clothing/under/rank/warden
shoes = /obj/item/clothing/shoes/jackboots shoes = /obj/item/clothing/shoes/jackboots
l_ear = /obj/item/device/radio/headset/headset_sec l_ear = /obj/item/device/radio/headset/headset_warden
pda = /obj/item/device/pda/warden pda = /obj/item/device/pda/warden
glasses = /obj/item/clothing/glasses/sunglasses/sechud/head glasses = /obj/item/clothing/glasses/sunglasses/sechud/head
l_pocket = /obj/item/device/flash l_pocket = /obj/item/device/flash

View File

@@ -69,7 +69,7 @@
to_chat(user, SPAN_NOTICE("You paint the target at [target].")) to_chat(user, SPAN_NOTICE("You paint the target at [target]."))
var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null) var/obj/item/device/radio/intercom/announcer = new /obj/item/device/radio/intercom(null)
announcer.config(list("Common" = FALSE, "Entertainment" = FALSE, "Response Team" = FALSE, "Science" = FALSE, "Command" = FALSE, "Medical" = FALSE, "Engineering" = FALSE, "Security" = FALSE, "Supply" = FALSE, "Service" = FALSE, "Mercenary" = FALSE, "Raider" = FALSE, "Ninja" = FALSE, "AI Private" = FALSE)) announcer.config(list("Common" = FALSE, "Entertainment" = FALSE, "Response Team" = FALSE, "Science" = FALSE, "Command" = FALSE, "Medical" = FALSE, "Engineering" = FALSE, "Security" = FALSE, "Penal" = FALSE, "Supply" = FALSE, "Service" = FALSE, "Mercenary" = FALSE, "Raider" = FALSE, "Ninja" = FALSE, "AI Private" = FALSE))
if(announcer) if(announcer)
if(!emagged) if(!emagged)
announcer.autosay(drop_message, announcer_name, announcer_channel) announcer.autosay(drop_message, announcer_name, announcer_channel)

View File

@@ -8,6 +8,7 @@
#define CHANNEL_SUPPLY "Supply" #define CHANNEL_SUPPLY "Supply"
#define CHANNEL_SERVICE "Service" #define CHANNEL_SERVICE "Service"
#define CHANNEL_AI_PRIVATE "AI Private" #define CHANNEL_AI_PRIVATE "AI Private"
#define CHANNEL_PENAL "Penal"
#define CHANNEL_RESPONSE_TEAM "Response Team" #define CHANNEL_RESPONSE_TEAM "Response Team"

View File

@@ -57,6 +57,16 @@
icon_state = "sec_cypherkey" icon_state = "sec_cypherkey"
channels = list(CHANNEL_SECURITY = TRUE) channels = list(CHANNEL_SECURITY = TRUE)
/obj/item/device/encryptionkey/headset_warden
name = "warden radio encryption key"
icon_state = "sec_cypherkey"
channels = list(CHANNEL_SECURITY = TRUE, CHANNEL_PENAL = TRUE)
/obj/item/device/encryptionkey/headset_penal
name = "penal radio encryption key"
icon_state = "cargo_cypherkey"
channels = list(CHANNEL_PENAL = TRUE)
/obj/item/device/encryptionkey/headset_eng /obj/item/device/encryptionkey/headset_eng
name = "engineering radio encryption key" name = "engineering radio encryption key"
icon_state = "eng_cypherkey" icon_state = "eng_cypherkey"
@@ -90,13 +100,13 @@
/obj/item/device/encryptionkey/heads/captain /obj/item/device/encryptionkey/heads/captain
name = "captain's encryption key" name = "captain's encryption key"
icon_state = "cap_cypherkey" icon_state = "cap_cypherkey"
channels = list(CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = TRUE, CHANNEL_ENGINEERING = FALSE, CHANNEL_SCIENCE = FALSE, CHANNEL_MEDICAL = FALSE, CHANNEL_SUPPLY = FALSE, CHANNEL_SERVICE = FALSE) channels = list(CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = TRUE, CHANNEL_PENAL = TRUE, CHANNEL_ENGINEERING = FALSE, CHANNEL_SCIENCE = FALSE, CHANNEL_MEDICAL = FALSE, CHANNEL_SUPPLY = FALSE, CHANNEL_SERVICE = FALSE)
/obj/item/device/encryptionkey/heads/ai_integrated /obj/item/device/encryptionkey/heads/ai_integrated
name = "ai integrated encryption key" name = "ai integrated encryption key"
desc = "Integrated encryption key" desc = "Integrated encryption key"
icon_state = "cap_cypherkey" icon_state = "cap_cypherkey"
channels = list(CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = TRUE, CHANNEL_ENGINEERING = TRUE, CHANNEL_SCIENCE = TRUE, CHANNEL_MEDICAL = TRUE, CHANNEL_SUPPLY = TRUE, CHANNEL_SERVICE = TRUE, CHANNEL_AI_PRIVATE = TRUE) channels = list(CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = TRUE, CHANNEL_PENAL = TRUE, CHANNEL_ENGINEERING = TRUE, CHANNEL_SCIENCE = TRUE, CHANNEL_MEDICAL = TRUE, CHANNEL_SUPPLY = TRUE, CHANNEL_SERVICE = TRUE, CHANNEL_AI_PRIVATE = TRUE)
/obj/item/device/encryptionkey/heads/rd /obj/item/device/encryptionkey/heads/rd
name = "research director's encryption key" name = "research director's encryption key"
@@ -106,7 +116,7 @@
/obj/item/device/encryptionkey/heads/hos /obj/item/device/encryptionkey/heads/hos
name = "head of security's encryption key" name = "head of security's encryption key"
icon_state = "hos_cypherkey" icon_state = "hos_cypherkey"
channels = list(CHANNEL_SECURITY = TRUE, CHANNEL_COMMAND = TRUE) channels = list(CHANNEL_SECURITY = TRUE, CHANNEL_COMMAND = TRUE, CHANNEL_PENAL = TRUE)
/obj/item/device/encryptionkey/heads/ce /obj/item/device/encryptionkey/heads/ce
name = "chief engineer's encryption key" name = "chief engineer's encryption key"
@@ -121,7 +131,7 @@
/obj/item/device/encryptionkey/heads/hop /obj/item/device/encryptionkey/heads/hop
name = "head of personnel's encryption key" name = "head of personnel's encryption key"
icon_state = "hop_cypherkey" icon_state = "hop_cypherkey"
channels = list(CHANNEL_SUPPLY = TRUE, CHANNEL_SERVICE = TRUE, CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = FALSE) channels = list(CHANNEL_SUPPLY = TRUE, CHANNEL_SERVICE = TRUE, CHANNEL_COMMAND = TRUE, CHANNEL_SECURITY = FALSE, CHANNEL_PENAL = FALSE)
/obj/item/device/encryptionkey/headset_cargo /obj/item/device/encryptionkey/headset_cargo
name = "supply radio encryption key" name = "supply radio encryption key"

View File

@@ -315,6 +315,23 @@
icon_state = "sec_headset_alt" icon_state = "sec_headset_alt"
item_state = "headset_alt" item_state = "headset_alt"
/obj/item/device/radio/headset/headset_warden
name = "warden radio headset"
desc = "This is used by your all-powerful overseer."
icon_state = "sec_headset"
ks2type = /obj/item/device/encryptionkey/headset_warden
/obj/item/device/radio/headset/headset_warden/alt
name = "warden bowman headset"
icon_state = "sec_headset_alt"
item_state = "headset_alt"
/obj/item/device/radio/headset/headset_penal
name = "penal radio headset"
desc = "A headset used by people who have chosen or been chosen to work the fields."
icon_state = "mine_headset"
ks2type = /obj/item/device/encryptionkey/headset_penal
/obj/item/device/radio/headset/heads/hos /obj/item/device/radio/headset/heads/hos
name = "head of security's headset" name = "head of security's headset"
desc = "The headset of the man who protects your worthless lifes." desc = "The headset of the man who protects your worthless lifes."

View File

@@ -10,6 +10,7 @@ var/global/list/default_internal_channels = list(
num2text(MED_I_FREQ)=list(access_medical_equip), num2text(MED_I_FREQ)=list(access_medical_equip),
num2text(SEC_FREQ) = list(access_security), num2text(SEC_FREQ) = list(access_security),
num2text(SEC_I_FREQ)=list(access_security), num2text(SEC_I_FREQ)=list(access_security),
num2text(PEN_FREQ) = list(access_armory),
num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology), num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology),
num2text(SUP_FREQ) = list(access_cargo), num2text(SUP_FREQ) = list(access_cargo),
num2text(SRV_FREQ) = list(access_janitor, access_hydroponics) num2text(SRV_FREQ) = list(access_janitor, access_hydroponics)

View File

@@ -219,8 +219,8 @@
new /obj/item/clothing/gloves/black_leather(src) new /obj/item/clothing/gloves/black_leather(src)
//Tools //Tools
new /obj/item/cartridge/security(src) new /obj/item/cartridge/security(src)
new /obj/item/device/radio/headset/headset_sec(src) new /obj/item/device/radio/headset/headset_warden(src)
new /obj/item/device/radio/headset/headset_sec/alt(src) new /obj/item/device/radio/headset/headset_warden/alt(src)
new /obj/item/clothing/glasses/sunglasses/sechud/aviator(src) new /obj/item/clothing/glasses/sunglasses/sechud/aviator(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/taperoll/police(src) new /obj/item/taperoll/police(src)

View File

@@ -0,0 +1,176 @@
/obj/structure/reagent_crystal
name = "chemical crystal cluster"
desc = "A cluster of hardened chemical crystals."
icon = 'icons/obj/crystals.dmi'
icon_state = "scattered"
anchored = TRUE
density = FALSE
layer = ABOVE_CABLE_LAYER
var/datum/reagent/reagent_id
var/state = 0
var/health = 100
var/mine_rate = 1 // how fast you can mine it
var/obj/machinery/power/crystal_agitator/creator // used to re-add dense turfs to agitation list when destroyed
/obj/structure/reagent_crystal/Initialize(mapload, var/reagent_i = null, var/our_creator = null)
. = ..()
if(!reagent_i)
var/list/chems = list(/datum/reagent/acetone, /datum/reagent/aluminum, /datum/reagent/ammonia, /datum/reagent/carbon, /datum/reagent/copper, /datum/reagent/iron, /datum/reagent/lithium, /datum/reagent/mercury, /datum/reagent/potassium, /datum/reagent/radium, /datum/reagent/sodium)
reagent_i = pick(chems)
reagent_id = reagent_i
name = replacetext(name, "chemical", lowertext(initial(reagent_id.name)))
desc = replacetext(desc, "chemical", lowertext(initial(reagent_id.name)))
var/mutable_appearance/crystal_overlay = mutable_appearance(icon, "[initial(icon_state)]-overlay")
crystal_overlay.color = initial(reagent_id.color)
add_overlay(crystal_overlay)
if(our_creator)
creator = our_creator
/obj/structure/reagent_crystal/examine(mob/user)
. = ..()
var/state
var/current_damage = health / initial(health)
switch(current_damage)
if(0 to 0.2)
state = SPAN_DANGER("The crystal is barely holding together!")
if(0.2 to 0.4)
state = SPAN_WARNING("The crystal has various cracks visible!")
if(0.4 to 0.8)
state = SPAN_WARNING("The crystal has scratches and deeper grooves on its surface.")
if(0.8 to 1)
state = SPAN_NOTICE("The crystal looks structurally sound.")
to_chat(user, state)
/obj/structure/reagent_crystal/proc/take_damage(var/damage)
health -= damage
if(health <= 0)
visible_message(SPAN_WARNING("\The [src] collapses into smaller crystals!"))
harvest()
/obj/structure/reagent_crystal/attack_hand(mob/user)
if(HULK in user.mutations)
user.visible_message(SPAN_WARNING("\The [user] smashes \the [src] apart!"), SPAN_WARNING("You smash \the [src] apart!"))
harvest()
return
return ..()
/obj/structure/reagent_crystal/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/gun/energy/plasmacutter))
mine_crystal(user, 30 / W.toolspeed, W.usesound)
else if(istype(W, /obj/item/melee/energy))
var/obj/item/melee/energy/WT = W
if(WT.active)
mine_crystal(user, 30 / W.toolspeed, W.usesound)
else
to_chat(user, SPAN_NOTICE("You need to activate \the [W] to do that!"))
return
else if(istype(W, /obj/item/melee/energy/blade))
mine_crystal(user, 30 / W.toolspeed, W.usesound)
else if(istype(W, /obj/item/pickaxe))
var/obj/item/pickaxe/P = W
mine_crystal(user, P.digspeed, W.usesound)
else if(W.force > 5)
user.do_attack_animation(src)
playsound(get_turf(src), 'sound/weapons/smash.ogg', 50)
visible_message(SPAN_WARNING("\The [user] smashes \the [W] into \the [src]."))
take_damage(W.force * 4)
/obj/structure/reagent_crystal/proc/mine_crystal(var/mob/user, var/time_to_dig, var/use_sound)
if(!user)
return
if(!time_to_dig)
time_to_dig = 50
if(do_after(user, time_to_dig * mine_rate, act_target = src))
if(!src)
return
harvest()
if(use_sound)
playsound(get_turf(src), use_sound, 30, TRUE)
/obj/structure/reagent_crystal/proc/harvest()
new /obj/item/reagent_crystal(get_turf(src), reagent_id, 5)
qdel(src)
/obj/structure/reagent_crystal/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
return
if(2.0)
if(prob(30))
harvest()
return
else
health -= rand(60,180)
if(3.0)
if(prob(5))
harvest()
return
else
health -= rand(40,80)
else
if(health <= 0)
harvest()
return
/obj/structure/reagent_crystal/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
if(!damage || !wallbreaker)
return FALSE
user.do_attack_animation(src)
visible_message(SPAN_WARNING("\The [user] [attack_message] \the [src]!"))
harvest()
return TRUE
/obj/structure/reagent_crystal/proc/become_dense()
var/health_mod = health / initial(health)
var/obj/structure/reagent_crystal/dense/P = new /obj/structure/reagent_crystal/dense(get_turf(src), reagent_id, creator)
P.health *= health_mod
if(creator)
creator.agitation_turfs -= get_turf(src)
qdel(src)
/obj/structure/reagent_crystal/dense
name = "dense chemical crystal cluster"
desc = "A dense cluster of hardened chemical crystals."
icon_state = "dense"
health = 200
mine_rate = 2
/obj/structure/reagent_crystal/dense/harvest()
var/turf/our_turf = get_turf(src)
for(var/i = 0 to 2)
new /obj/item/reagent_crystal(our_turf, reagent_id, 5)
if(creator)
creator.agitation_turfs += our_turf
qdel(src)
/obj/item/reagent_crystal
name = "crystal"
desc = "A clear, pointy crystal. It looks rough, unprocessed."
icon = 'icons/obj/crystals.dmi'
icon_state = "crystal"
/obj/item/reagent_crystal/Initialize(mapload, reagent_i, amount)
. = ..()
create_reagents(5)
reagents.add_reagent(reagent_i, amount)
var/datum/reagent/R = new reagent_i
name = "[lowertext(R.name)] crystal"
desc = "A [lowertext(R.name)] crystal. It looks rough, unprocessed."
desc_info = "This crystal can be grinded to obtain the chemical material locked within."
color = reagents.get_color()
/obj/item/storage/bag/crystal
name = "crystal satchel"
desc = "This big boy can store a vast amount of crystals."
icon = 'icons/obj/mining.dmi'
icon_state = "satchel"
slot_flags = SLOT_BELT | SLOT_POCKET
max_storage_space = 100
can_hold = list(/obj/item/reagent_crystal)

View File

@@ -1,7 +1,7 @@
/obj/structure/bed/chair/remote/mech /obj/structure/bed/chair/remote/mech
name = "mech control centre" name = "mech control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to exosuits attached to the remote network." desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to exosuits attached to the remote network."
remote_network = "remotemechs" remote_network = REMOTE_GENERIC_MECH
/obj/structure/bed/chair/remote/mech/user_buckle_mob(mob/user) /obj/structure/bed/chair/remote/mech/user_buckle_mob(mob/user)
..() ..()
@@ -15,7 +15,7 @@
/obj/structure/bed/chair/remote/mech/prison /obj/structure/bed/chair/remote/mech/prison
name = "brig mech control centre" name = "brig mech control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to exosuits attached to the brig network." desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to exosuits attached to the brig network."
remote_network = "prisonmechs" remote_network = REMOTE_PRISON_MECH
/obj/structure/bed/chair/remote/mech/prison/portable /obj/structure/bed/chair/remote/mech/prison/portable
portable_type = /obj/item/deployable_kit/remote_mech/brig portable_type = /obj/item/deployable_kit/remote_mech/brig

View File

@@ -1,7 +1,7 @@
/obj/structure/bed/chair/remote/robot /obj/structure/bed/chair/remote/robot
name = "robot control centre" name = "robot control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the remote network." desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the remote network."
remote_network = "remoterobots" remote_network = REMOTE_GENERIC_ROBOT
/obj/structure/bed/chair/remote/robot/user_buckle_mob(mob/user) /obj/structure/bed/chair/remote/robot/user_buckle_mob(mob/user)
..() ..()
@@ -12,4 +12,14 @@
/obj/structure/bed/chair/remote/robot/bunker /obj/structure/bed/chair/remote/robot/bunker
name = "bunker robot control centre" name = "bunker robot control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the bunker network." desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the bunker network."
remote_network = "bunkerrobots" remote_network = REMOTE_BUNKER_ROBOT
/obj/structure/bed/chair/remote/robot/prison
name = "penal robot control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the penal network."
remote_network = REMOTE_PRISON_ROBOT
/obj/structure/bed/chair/remote/robot/warden
name = "warden robot control centre"
desc = "A comfortable chair with full audio-visual transposition centres. This one gives you access to robots attached to the warden's network."
remote_network = REMOTE_WARDEN_ROBOT

View File

@@ -5,7 +5,7 @@
icon_state = "aislot" icon_state = "aislot"
origin_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 4, TECH_DATA = 4) origin_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 4, TECH_DATA = 4)
w_class = ITEMSIZE_SMALL w_class = ITEMSIZE_SMALL
var/mech_remote_network = "remotemechs" var/mech_remote_network = REMOTE_GENERIC_MECH
var/hardpoint_lock = FALSE // Whether mechs that receive this upgrade gets locked var/hardpoint_lock = FALSE // Whether mechs that receive this upgrade gets locked
var/dummy_path = /mob/living/simple_animal/spiderbot var/dummy_path = /mob/living/simple_animal/spiderbot
@@ -19,7 +19,7 @@
/obj/item/remote_mecha/penal /obj/item/remote_mecha/penal
name = "penal exosuit remote upgrade" name = "penal exosuit remote upgrade"
desc = "A device that, when inserted into an exosuit, allows it to be remotely piloted. Intended for prison networks." desc = "A device that, when inserted into an exosuit, allows it to be remotely piloted. Intended for prison networks."
mech_remote_network = "prisonmechs" mech_remote_network = REMOTE_PRISON_MECH
hardpoint_lock = TRUE hardpoint_lock = TRUE
/obj/item/remote_mecha/penal/examine(mob/user) /obj/item/remote_mecha/penal/examine(mob/user)
@@ -30,5 +30,5 @@
/obj/item/remote_mecha/ai /obj/item/remote_mecha/ai
name = "AI exosuit remote upgrade" name = "AI exosuit remote upgrade"
desc = "A device that, when inserted into an exosuit, allows it to be remotely piloted by the artificial intelligence." desc = "A device that, when inserted into an exosuit, allows it to be remotely piloted by the artificial intelligence."
mech_remote_network = "aimechs" mech_remote_network = REMOTE_AI_MECH
dummy_path = /mob/living/simple_animal/spiderbot/ai dummy_path = /mob/living/simple_animal/spiderbot/ai

View File

@@ -254,7 +254,7 @@
remote = TRUE remote = TRUE
name = name + " \"[pick("Jaeger", "Reaver", "Templar", "Juggernaut", "Basilisk")]-[rand(0, 999)]\"" name = name + " \"[pick("Jaeger", "Reaver", "Templar", "Juggernaut", "Basilisk")]-[rand(0, 999)]\""
if(!remote_network) if(!remote_network)
remote_network = "remotemechs" remote_network = REMOTE_GENERIC_MECH
SSvirtualreality.add_mech(src, remote_network) SSvirtualreality.add_mech(src, remote_network)
if(hatch_closed) if(hatch_closed)

View File

@@ -18,10 +18,10 @@
/mob/living/heavy_vehicle/premade/miner/remote /mob/living/heavy_vehicle/premade/miner/remote
name = "remote mining mecha" name = "remote mining mecha"
dummy_colour = "#ffc44f" dummy_colour = "#ffc44f"
remote_network = "remotemechs" remote_network = REMOTE_GENERIC_MECH
does_hardpoint_lock = FALSE does_hardpoint_lock = FALSE
/mob/living/heavy_vehicle/premade/miner/remote_prison /mob/living/heavy_vehicle/premade/miner/remote_prison
name = "penal mining mecha" name = "penal mining mecha"
dummy_colour = "#302e2b" dummy_colour = "#302e2b"
remote_network = "prisonmechs" remote_network = REMOTE_PRISON_MECH

View File

@@ -151,20 +151,20 @@
/mob/living/heavy_vehicle/premade/ripley/remote /mob/living/heavy_vehicle/premade/ripley/remote
name = "remote power loader" name = "remote power loader"
dummy_colour = "#ffc44f" dummy_colour = "#ffc44f"
remote_network = "remotemechs" remote_network = REMOTE_GENERIC_MECH
does_hardpoint_lock = FALSE does_hardpoint_lock = FALSE
/mob/living/heavy_vehicle/premade/ripley/remote_prison /mob/living/heavy_vehicle/premade/ripley/remote_prison
name = "penal power loader" name = "penal power loader"
dummy_colour = "#302e2b" dummy_colour = "#302e2b"
remote_network = "prisonmechs" remote_network = REMOTE_PRISON_MECH
/mob/living/heavy_vehicle/premade/ripley/remote_ai /mob/living/heavy_vehicle/premade/ripley/remote_ai
name = "stationbound power loader" name = "stationbound power loader"
e_color = COLOR_GREEN_GRAY e_color = COLOR_GREEN_GRAY
dummy_colour = COLOR_GREEN_GRAY dummy_colour = COLOR_GREEN_GRAY
dummy_type = /mob/living/simple_animal/spiderbot/ai dummy_type = /mob/living/simple_animal/spiderbot/ai
remote_network = "aimechs" remote_network = REMOTE_AI_MECH
does_hardpoint_lock = FALSE does_hardpoint_lock = FALSE
h_l_hand = /obj/item/mecha_equipment/toolset h_l_hand = /obj/item/mecha_equipment/toolset

View File

@@ -161,7 +161,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
mind.name = real_name mind.name = real_name
status_flags |= NO_ANTAG status_flags |= NO_ANTAG
remote_network = "remoterobots" remote_network = REMOTE_GENERIC_ROBOT
SSvirtualreality.add_robot(src, remote_network) SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/industrial_xion_remote/Stat() /mob/living/carbon/human/industrial_xion_remote/Stat()
@@ -200,7 +200,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(src), slot_shoes) equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(src), slot_shoes)
equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(src), slot_l_ear) equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(src), slot_l_ear)
remote_network = "bunkerrobots" remote_network = REMOTE_BUNKER_ROBOT
SSvirtualreality.add_robot(src, remote_network) SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/industrial_xion_remote_bunker/Stat() /mob/living/carbon/human/industrial_xion_remote_bunker/Stat()
@@ -209,6 +209,55 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
if(client?.statpanel == "Status") if(client?.statpanel == "Status")
stat("Battery Charge: ", "[nutrition]/[max_nutrition]") stat("Battery Charge: ", "[nutrition]/[max_nutrition]")
/mob/living/carbon/human/industrial_xion_remote_penal/Initialize(mapload)
. = ..(mapload, "Remote Xion Industrial Frame")
real_name = "Remote Robot [pick("Jim", "Slart", "Whacker")]-[rand(0, 999)]"
name = real_name
dna.real_name = real_name
if(mind)
mind.name = real_name
status_flags |= NO_ANTAG
equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_penal(src), slot_l_ear)
remote_network = REMOTE_PRISON_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/industrial_xion_remote_penal/Stat()
..()
if(client?.statpanel == "Status")
stat(null, "Battery Charge: [nutrition]/[max_nutrition]")
/mob/living/carbon/human/industrial_xion_remote_warden/Initialize(mapload)
. = ..(mapload, "Remote Xion Industrial Frame")
real_name = "Remote Robot Overseer-[rand(0, 999)]"
name = real_name
dna.real_name = real_name
if(mind)
mind.name = real_name
status_flags |= NO_ANTAG
var/obj/item/card/id/ID = new /obj/item/card/id(get_turf(src))
ID.assignment = "Overseer"
src.set_id_info(ID)
ID.access = list(access_armory)
equip_to_slot_or_del(ID, slot_wear_id)
equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(src), slot_w_uniform)
equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(src), slot_shoes)
equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_warden(src), slot_l_ear)
remote_network = REMOTE_WARDEN_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/industrial_xion_remote_warden/Stat()
..()
if(client?.statpanel == "Status")
stat(null, "Battery Charge: [nutrition]/[max_nutrition]")
/mob/living/carbon/human/industrial_zenghu/Initialize(mapload) /mob/living/carbon/human/industrial_zenghu/Initialize(mapload)
. = ..(mapload, SPECIES_IPC_ZENGHU) . = ..(mapload, SPECIES_IPC_ZENGHU)
@@ -246,7 +295,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
mind.name = real_name mind.name = real_name
status_flags |= NO_ANTAG status_flags |= NO_ANTAG
remote_network = "remoterobots" remote_network = REMOTE_GENERIC_ROBOT
SSvirtualreality.add_robot(src, remote_network) SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/unbranded_frame_remote/Stat() /mob/living/carbon/human/unbranded_frame_remote/Stat()
@@ -269,7 +318,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(src), slot_shoes) equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(src), slot_shoes)
equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(src), slot_l_ear) equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(src), slot_l_ear)
remote_network = "bunkerrobots" remote_network = REMOTE_BUNKER_ROBOT
SSvirtualreality.add_robot(src, remote_network) SSvirtualreality.add_robot(src, remote_network)
/mob/living/carbon/human/unbranded_frame_remote_bunker/Stat() /mob/living/carbon/human/unbranded_frame_remote_bunker/Stat()

View File

@@ -10,6 +10,7 @@ var/list/department_radio_keys = list(
":m" = "Medical", ".m" = "Medical", ":m" = "Medical", ".m" = "Medical",
":e" = "Engineering", ".e" = "Engineering", ":e" = "Engineering", ".e" = "Engineering",
":s" = "Security", ".s" = "Security", ":s" = "Security", ".s" = "Security",
":q" = "Penal", ".q" = "Penal",
":w" = "whisper", ".w" = "whisper", ":w" = "whisper", ".w" = "whisper",
":t" = "Mercenary", ".t" = "Mercenary", ":t" = "Mercenary", ".t" = "Mercenary",
":x" = "Raider", ".x" = "Raider", ":x" = "Raider", ".x" = "Raider",
@@ -30,6 +31,7 @@ var/list/department_radio_keys = list(
":M" = "Medical", ".M" = "Medical", ":M" = "Medical", ".M" = "Medical",
":E" = "Engineering", ".E" = "Engineering", ":E" = "Engineering", ".E" = "Engineering",
":S" = "Security", ".S" = "Security", ":S" = "Security", ".S" = "Security",
":Q" = "Penal", ".Q" = "Penal",
":W" = "whisper", ".W" = "whisper", ":W" = "whisper", ".W" = "whisper",
":T" = "Mercenary", ".T" = "Mercenary", ":T" = "Mercenary", ".T" = "Mercenary",
":X" = "Raider", ".X" = "Raider", ":X" = "Raider", ".X" = "Raider",

View File

@@ -780,7 +780,7 @@ var/list/ai_verbs_default = list(
set name = "Remote Control Mech" set name = "Remote Control Mech"
set category = "AI Commands" set category = "AI Commands"
set desc = "Remotely control any active mechs on your AI mech network." set desc = "Remotely control any active mechs on your AI mech network."
SSvirtualreality.mech_selection(src, "aimechs") SSvirtualreality.mech_selection(src, REMOTE_AI_MECH)
/mob/living/silicon/ai/proc/toggle_hologram_movement() /mob/living/silicon/ai/proc/toggle_hologram_movement()
set name = "Toggle Hologram Movement" set name = "Toggle Hologram Movement"

View File

@@ -43,7 +43,7 @@
var/list/robots = list() var/list/robots = list()
if(signal.data["done"]) if(signal.data["done"])
for(var/mech in SSvirtualreality.mechs["prisonmechs"]) for(var/mech in SSvirtualreality.mechs[REMOTE_PRISON_MECH])
var/mob/living/heavy_vehicle/M = mech var/mob/living/heavy_vehicle/M = mech
if(!ismech(M)) if(!ismech(M))
@@ -61,7 +61,7 @@
mechData["lockdown"] = M.lockdown mechData["lockdown"] = M.lockdown
mechs[++mechs.len] = mechData mechs[++mechs.len] = mechData
for(var/robot in SSvirtualreality.robots["prisonrobots"]) for(var/robot in SSvirtualreality.robots[REMOTE_PRISON_ROBOT])
var/mob/living/R = robot var/mob/living/R = robot
if(!ismob(R)) if(!ismob(R))

View File

@@ -0,0 +1,120 @@
/obj/machinery/power/crystal_agitator
name = "crystal agitator"
desc = "A device of incredibly niche design. This agitator disturbs the ashy turf around it, causing chemical crystals to form."
icon = 'icons/obj/crystal_agitator.dmi'
icon_state = "agitator"
density = TRUE
anchored = TRUE
use_power = 0
active_power_usage = 3000
var/agitation_range = 4
var/agitation_rate = 80
var/last_agitation = 0
var/active = FALSE
var/last_turf_check = 0
var/turf_check_rate = 3 MINUTES
var/list/agitation_turfs = list()
component_types = list(
/obj/item/stack/cable_coil{amount = 5},
/obj/item/stock_parts/capacitor,
/obj/item/stock_parts/manipulator,
/obj/item/bluespace_crystal,
/obj/item/circuitboard/crystal_agitator
)
/obj/machinery/power/crystal_agitator/Initialize()
. = ..()
connect_to_network()
/obj/machinery/power/crystal_agitator/attack_hand(mob/user)
toggle_active()
visible_message("<b>[user]</b> turns \the [src] [active ? "on" : "off"].", SPAN_NOTICE("You turn \the [src] [active ? "on" : "off"]."))
/obj/machinery/power/crystal_agitator/proc/toggle_active()
active = !active
icon_state = "[initial(icon_state)][active ? "-active": ""]"
if(active)
check_turfs()
/obj/machinery/power/crystal_agitator/proc/check_turfs()
var/turf/our_turf = get_turf(src)
var/list/grow_turfs = list()
for(var/thing in RANGE_TURFS(agitation_range, our_turf))
var/turf/T = thing
if(our_turf == T)
continue
if(!istype(T, /turf/unsimulated/floor/asteroid))
continue
if(locate(/obj/structure/reagent_crystal/dense) in T)
continue
grow_turfs += T
agitation_turfs = grow_turfs
last_turf_check = world.time + turf_check_rate
/obj/machinery/power/crystal_agitator/machinery_process()
if(!active)
return
if(stat & (BROKEN) || !powernet)
return
if(last_agitation + agitation_rate > world.time)
return
if(!length(agitation_turfs))
toggle_active()
return
var/actual_load = draw_power(active_power_usage)
if(actual_load < active_power_usage)
toggle_active()
return
// recheck the agitation turfs every few minutes to make sure we're not getting stuck
if(last_turf_check < world.time)
check_turfs()
var/turf/selected_turf = pick(agitation_turfs)
var/obj/structure/reagent_crystal/P = locate() in selected_turf
if(P)
P.become_dense()
return
if(prob(1) && prob(1))
new /mob/living/simple_animal/hostile/phoron_worm/small(selected_turf)
else
new /obj/structure/reagent_crystal(selected_turf, null, src)
last_agitation = world.time
/obj/machinery/power/crystal_agitator/RefreshParts()
for(var/obj/item/stock_parts/SP in component_parts)
if(ismanipulator(SP))
agitation_rate = initial(agitation_rate) - (SP.rating * 5)
if(iscapacitor(SP))
active_power_usage = initial(active_power_usage) - (SP.rating * 500)
/obj/machinery/power/crystal_agitator/attackby(obj/item/I, mob/user, params)
if(default_part_replacement(user, I))
return
else if(default_deconstruction_screwdriver(user, I))
return
else if(default_deconstruction_crowbar(user, I))
return
return ..()
/obj/item/circuitboard/crystal_agitator
name = T_BOARD("Crystal Agitator")
build_path = /obj/machinery/power/crystal_agitator
board_type = "machine"
origin_tech = list(
TECH_ENGINEERING = 3,
TECH_DATA = 2,
TECH_MATERIAL = 4,
TECH_POWER = 3
)
req_components = list(
"/obj/item/stack/cable_coil" = 5,
"/obj/item/stock_parts/capacitor" = 1,
"/obj/item/stock_parts/manipulator" = 1,
"/obj/item/bluespace_crystal" = 1
)

View File

@@ -56,7 +56,7 @@
/datum/reagent/carbon /datum/reagent/carbon
name = "Carbon" name = "Carbon"
description = "A chemical element, the builing block of life." description = "A chemical element, the building block of life."
reagent_state = SOLID reagent_state = SOLID
color = "#1C1300" color = "#1C1300"
ingest_met = REM * 5 ingest_met = REM * 5

View File

@@ -24,13 +24,20 @@
var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush var/flush_every_ticks = 30 //Every 30 ticks it will look whether it is ready to flush
var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush. var/flush_count = 0 //this var adds 1 once per tick. When it reaches flush_every_ticks it resets and tries to flush.
var/last_sound = 0 var/last_sound = 0
var/uses_air = TRUE
active_power_usage = 2200 //the pneumatic pump power. 3 HP ~ 2200W active_power_usage = 2200 //the pneumatic pump power. 3 HP ~ 2200W
idle_power_usage = 100 idle_power_usage = 100
/obj/machinery/disposal/airless
uses_air = FALSE
/obj/machinery/disposal/small /obj/machinery/disposal/small
desc = "A compact pneumatic waste disposal unit." desc = "A compact pneumatic waste disposal unit."
icon_state = "disposal_small" icon_state = "disposal_small"
density = 0 density = FALSE
/obj/machinery/disposal/small/airless
uses_air = FALSE
/obj/machinery/disposal/small/Initialize() /obj/machinery/disposal/small/Initialize()
. = ..() . = ..()
@@ -38,21 +45,21 @@
return return
else else
switch(dir) switch(dir)
if(1) if(NORTH)
pixel_y = -13 pixel_y = -13
layer = MOB_LAYER + 0.1 layer = MOB_LAYER + 0.1
if(2) if(SOUTH)
pixel_y = 20 pixel_y = 20
layer = OBJ_LAYER + 0.3 layer = OBJ_LAYER + 0.3
if(4) if(EAST)
pixel_x = -12 pixel_x = -12
if(8) if(WEST)
pixel_x = 11 pixel_x = 11
/obj/machinery/disposal/small/check_mob_size(mob/target) /obj/machinery/disposal/small/check_mob_size(mob/target)
if(target.mob_size > MOB_SMALL) if(target.mob_size > MOB_SMALL)
return 0 return FALSE
return 1 return TRUE
// create a new disposal // create a new disposal
// find the attached trunk (if present) and init gas resvr. // find the attached trunk (if present) and init gas resvr.
@@ -129,12 +136,12 @@
to_chat(user, "You can't place that item inside the disposal unit.") to_chat(user, "You can't place that item inside the disposal unit.")
return return
if(istype(I, /obj/item/storage/bag/trash)) if(istype(I, /obj/item/storage) && user.a_intent != I_HURT)
var/obj/item/storage/bag/trash/T = I var/obj/item/storage/S = I
to_chat(user, "<span class='notice'>You empty the bag.</span>") user.visible_message("<b>[user]</b> empties \the [S] into \the [src].", SPAN_NOTICE("You empty \the [S] into \the [src]."), range = 3)
for(var/obj/item/O in T.contents) for(var/obj/item/O in S.contents)
T.remove_from_storage(O,src) S.remove_from_storage(O, src)
T.update_icon() S.update_icon()
update() update()
return return
@@ -182,12 +189,7 @@
user.drop_from_inventory(I,src) user.drop_from_inventory(I,src)
to_chat(user, "You place \the [I] into the [src].") user.visible_message("<b>[user]</b> places \the [I] into \the [src].", SPAN_NOTICE("You place \the [I] into the [src]."), range = 3)
for(var/mob/M in viewers(src))
if(M == user)
continue
M.show_message("[user.name] places \the [I] into the [src].", 3)
update() update()
// mouse drop another mob or self // mouse drop another mob or self
@@ -307,14 +309,19 @@
dat += "<BR><HR><A href='?src=\ref[src];eject=1'>Eject contents</A><HR>" dat += "<BR><HR><A href='?src=\ref[src];eject=1'>Eject contents</A><HR>"
if(mode <= 0) if(uses_air)
dat += "Pump: <B>Off</B> <A href='?src=\ref[src];pump=1'>On</A><BR>" if(mode <= 0)
else if(mode == 1) dat += "Pump: <B>Off</B> <A href='?src=\ref[src];pump=1'>On</A><BR>"
dat += "Pump: <A href='?src=\ref[src];pump=0'>Off</A> <B>On</B> (pressurizing)<BR>" else if(mode == 1)
dat += "Pump: <A href='?src=\ref[src];pump=0'>Off</A> <B>On</B> (pressurizing)<BR>"
else
dat += "Pump: <A href='?src=\ref[src];pump=0'>Off</A> <B>On</B> (idle)<BR>"
else else
dat += "Pump: <A href='?src=\ref[src];pump=0'>Off</A> <B>On</B> (idle)<BR>" dat += "Pump: <A href='?src=\ref[src];pump=0'>Off</A> <B>On</B> (idle)<BR>"
var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE) var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE)
if(!uses_air)
per = 100
dat += "Pressure: [round(per, 1)]%<BR></body>" dat += "Pressure: [round(per, 1)]%<BR></body>"
@@ -421,12 +428,12 @@
src.updateDialog() src.updateDialog()
if(flush && air_contents.return_pressure() >= SEND_PRESSURE ) // flush can happen even without power if(flush && (air_contents.return_pressure() >= SEND_PRESSURE || !uses_air)) // flush can happen even without power
flush() flush()
if(mode != 1) //if off or ready, no need to charge if(mode != 1) //if off or ready, no need to charge
update_use_power(1) update_use_power(1)
else if(air_contents.return_pressure() >= SEND_PRESSURE) else if((air_contents.return_pressure() >= SEND_PRESSURE || !uses_air))
mode = 2 //if full enough, switch to ready mode mode = 2 //if full enough, switch to ready mode
update() update()
else else

View File

@@ -52,6 +52,7 @@ em {font-style: normal;font-weight: bold;}
.entradio {color: #bd893c;} .entradio {color: #bd893c;}
.secradio {color: #A30000;} .secradio {color: #A30000;}
.penradio {color: #DB1270;}
.engradio {color: #A66300;} .engradio {color: #A66300;}
.medradio {color: #0a5c47;} .medradio {color: #0a5c47;}
.sciradio {color: #993399;} .sciradio {color: #993399;}

View File

@@ -0,0 +1,7 @@
author: Geeves
delete-after: True
changes:
- rscadd: "Implements Crystal Agitators, machines that agitate asteroid turf to form chemical crystals. Check the communal out."
- tweak: "You can now dump the contents of a storage item into a disposal bin, by clicking on it on any intent other than harm. Doing so on harm will place the storage item in too."

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
icons/obj/crystals.dmi Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -48,11 +48,19 @@
temp_timer.releasetime = 1 temp_timer.releasetime = 1
..() ..()
/area/security/prison/remote
name = "\improper Security - Remote Prison Wing"
icon_state = "sec_prison"
/area/security/warden /area/security/warden
name = "Security - Warden's Office" name = "Security - Warden's Office"
icon_state = "Warden" icon_state = "Warden"
sound_env = SMALL_SOFTFLOOR sound_env = SMALL_SOFTFLOOR
/area/security/warden/remote
name = "\improper Security - Remote Warden's Office"
icon_state = "Warden"
/area/security/armory /area/security/armory
name = "Security - Armory" name = "Security - Armory"
icon_state = "Warden" icon_state = "Warden"
@@ -149,3 +157,8 @@
/area/security/vacantoffice2 /area/security/vacantoffice2
name = "Security - Meeting Room" name = "Security - Meeting Room"
/area/security/penal_colony
name = "\improper Security - Penal Mining Colony"
icon_state = "security"
icon_state = "security"

File diff suppressed because it is too large Load Diff

View File

@@ -20,6 +20,7 @@
/obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/industrial/warning,
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/obj/machinery/floodlight, /obj/machinery/floodlight,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aag" = ( "aag" = (
@@ -34,6 +35,11 @@
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/industrial/warning,
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/obj/structure/disposalpipe/segment{
dir = 4;
icon_state = "pipe-c"
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aah" = ( "aah" = (
@@ -46,10 +52,11 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 4 dir = 4
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aaj" = ( "aaj" = (
/obj/structure/lattice/catwalk, /obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/open, /turf/simulated/open,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aak" = ( "aak" = (
@@ -60,6 +67,8 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 8 dir = 8
}, },
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aal" = ( "aal" = (
@@ -96,6 +105,7 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 4 dir = 4
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aao" = ( "aao" = (
@@ -108,6 +118,8 @@
/obj/machinery/light/small{ /obj/machinery/light/small{
dir = 4 dir = 4
}, },
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aap" = ( "aap" = (
@@ -159,6 +171,8 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 8 dir = 8
}, },
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aas" = ( "aas" = (
@@ -205,6 +219,12 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 dir = 1
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aaw" = ( "aaw" = (
@@ -216,11 +236,24 @@
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 1 dir = 1
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aax" = ( "aax" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment,
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 2;
d2 = 8;
icon_state = "2-8"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"aay" = ( "aay" = (
@@ -811,6 +844,10 @@
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/disposalpipe/segment{
dir = 2;
icon_state = "pipe-c"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"abI" = ( "abI" = (
@@ -917,7 +954,10 @@
"abU" = ( "abU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/plating, /obj/effect/floor_decal/corner/purple{
dir = 9
},
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"abV" = ( "abV" = (
/obj/structure/closet/crate, /obj/structure/closet/crate,
@@ -1194,13 +1234,28 @@
dir = 6 dir = 6
}, },
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/floor/plating, /obj/effect/floor_decal/corner/purple{
dir = 9
},
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"acy" = ( "acy" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 9 dir = 9
}, },
/turf/simulated/floor/plating, /obj/machinery/light/small/emergency{
dir = 4
},
/obj/structure/disposaloutlet{
name = "ore delivery outlet"
},
/obj/structure/disposalpipe/trunk{
dir = 1
},
/obj/effect/floor_decal/corner/purple{
dir = 6
},
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"acz" = ( "acz" = (
/obj/structure/table/standard, /obj/structure/table/standard,
@@ -1555,10 +1610,6 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/brig) /area/security/brig)
"adb" = (
/obj/structure/barricade,
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard)
"adc" = ( "adc" = (
/obj/structure/table/standard, /obj/structure/table/standard,
/obj/effect/floor_decal/corner_wide/paleblue/full{ /obj/effect/floor_decal/corner_wide/paleblue/full{
@@ -1768,11 +1819,11 @@
name = "Security Blast Door"; name = "Security Blast Door";
opacity = 0 opacity = 0
}, },
/obj/machinery/door/airlock/maintenance{ /obj/machinery/door/airlock/glass_security{
name = "Security Maintenance"; name = "Ore Retrieval";
req_access = list(63) req_access = list(63)
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/tiled,
/area/security/brig) /area/security/brig)
"adw" = ( "adw" = (
/obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/portable_atmospherics/canister/nitrogen,
@@ -3514,6 +3565,11 @@
/obj/machinery/door/airlock/maintenance{ /obj/machinery/door/airlock/maintenance{
req_access = list(12) req_access = list(12)
}, },
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"agD" = ( "agD" = (
@@ -7752,9 +7808,7 @@
icon_state = "0-4" icon_state = "0-4"
}, },
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
d1 = 0;
d2 = 8; d2 = 8;
dir = 2;
icon_state = "0-8" icon_state = "0-8"
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
@@ -17295,6 +17349,9 @@
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/warden) /area/security/warden)
"aEx" = ( "aEx" = (
/obj/structure/bed/chair/remote/robot/warden{
dir = 8
},
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/warden) /area/security/warden)
"aEy" = ( "aEy" = (
@@ -20726,6 +20783,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{ /obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4 dir = 4
}, },
/obj/item/toy/prize/deathripley{
desc = "This is Johnny 5. Is he alive?";
name = "Johnny 5"
},
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aJV" = ( "aJV" = (
@@ -23733,31 +23794,26 @@
/area/security/prison) /area/security/prison)
"aPm" = ( "aPm" = (
/obj/structure/window/reinforced, /obj/structure/window/reinforced,
/obj/structure/table/standard, /obj/structure/bed/chair/remote/robot/prison,
/obj/item/storage/box/donkpockets{ /obj/machinery/door/window/brigdoor/northright{
pixel_x = 3; id = "Remote Chair";
pixel_y = 3 name = "Remote Chair";
req_access = list(2)
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
}, },
/obj/item/storage/box/donkpockets,
/turf/simulated/floor/tiled,
/area/security/prison)
"aPn" = (
/obj/structure/window/reinforced,
/obj/structure/table/standard,
/obj/machinery/microwave,
/turf/simulated/floor/tiled,
/area/security/prison)
"aPo" = (
/obj/structure/window/reinforced,
/obj/structure/table/standard,
/obj/item/paper_bin,
/obj/item/pen,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aPp" = ( "aPp" = (
/obj/machinery/newscaster{ /obj/machinery/newscaster{
pixel_x = 27 pixel_x = 27
}, },
/obj/structure/table/standard,
/obj/machinery/microwave,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aPq" = ( "aPq" = (
@@ -24690,6 +24746,10 @@
id = null; id = null;
use_power = 1 use_power = 1
}, },
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/table/standard,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aQT" = ( "aQT" = (
@@ -24727,18 +24787,18 @@
d2 = 4; d2 = 4;
icon_state = "2-4" icon_state = "2-4"
}, },
/obj/item/stool/padded,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aQX" = ( "aQX" = (
/obj/item/toy/prize/deathripley{
desc = "This is Johnny 5. Is he alive?";
name = "Johnny 5"
},
/obj/structure/cable/green{ /obj/structure/cable/green{
d1 = 4; d1 = 4;
d2 = 8; d2 = 8;
icon_state = "4-8" icon_state = "4-8"
}, },
/obj/structure/table/standard,
/obj/item/paper_bin,
/obj/item/pen,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/prison) /area/security/prison)
"aQZ" = ( "aQZ" = (
@@ -59368,7 +59428,10 @@
/obj/machinery/meter{ /obj/machinery/meter{
name = "Air supply" name = "Air supply"
}, },
/turf/simulated/floor/plating, /obj/effect/floor_decal/corner/purple/full{
dir = 8
},
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"cMI" = ( "cMI" = (
/obj/structure/cable/green{ /obj/structure/cable/green{
@@ -59718,6 +59781,10 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{ /obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 6 dir = 6
}, },
/obj/machinery/door/airlock/maintenance{
name = "Security Maintenance";
req_access = list(63)
},
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"dEG" = ( "dEG" = (
@@ -59993,9 +60060,7 @@
dir = 1 dir = 1
}, },
/obj/structure/cable/yellow{ /obj/structure/cable/yellow{
d1 = 0;
d2 = 8; d2 = 8;
dir = 2;
icon_state = "0-8" icon_state = "0-8"
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
@@ -60487,10 +60552,6 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/library) /area/maintenance/library)
"fFq" = (
/obj/machinery/light/small/emergency,
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"fFw" = ( "fFw" = (
/obj/machinery/light/small/emergency, /obj/machinery/light/small/emergency,
/obj/effect/floor_decal/spline/plain{ /obj/effect/floor_decal/spline/plain{
@@ -60655,6 +60716,16 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/storage/tech) /area/storage/tech)
"fZm" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/grille,
/turf/simulated/floor/plating,
/area/security/brig)
"fZq" = ( "fZq" = (
/obj/structure/closet, /obj/structure/closet,
/obj/random/junk, /obj/random/junk,
@@ -61102,6 +61173,15 @@
}, },
/turf/simulated/floor/tiled/freezer, /turf/simulated/floor/tiled/freezer,
/area/crew_quarters/locker/locker_toilet) /area/crew_quarters/locker/locker_toilet)
"heb" = (
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"heQ" = ( "heQ" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -61479,6 +61559,13 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/research_port) /area/maintenance/research_port)
"hSk" = (
/obj/structure/table/standard,
/obj/effect/floor_decal/corner/purple{
dir = 6
},
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard)
"hSJ" = ( "hSJ" = (
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
dir = 4 dir = 4
@@ -62169,6 +62256,7 @@
/obj/machinery/alarm{ /obj/machinery/alarm{
pixel_y = 28 pixel_y = 28
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"kbS" = ( "kbS" = (
@@ -63105,6 +63193,19 @@
}, },
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/assembly/robotics_cyborgification) /area/assembly/robotics_cyborgification)
"mlY" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/maintenance{
req_access = list(12)
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"mmr" = ( "mmr" = (
/obj/structure/table/wood, /obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/drinkingglass{ /obj/item/reagent_containers/food/drinks/drinkingglass{
@@ -64022,6 +64123,17 @@
}, },
/turf/simulated/floor/wood, /turf/simulated/floor/wood,
/area/crew_quarters/bar) /area/crew_quarters/bar)
"orw" = (
/obj/structure/ladder{
pixel_y = 16
},
/obj/structure/cable{
d1 = 32;
d2 = 2;
icon_state = "11-2"
},
/turf/simulated/open,
/area/maintenance/security_starboard)
"osb" = ( "osb" = (
/obj/effect/floor_decal/corner_wide/mauve/full{ /obj/effect/floor_decal/corner_wide/mauve/full{
dir = 4 dir = 4
@@ -64512,6 +64624,10 @@
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/tiled/old, /turf/simulated/floor/tiled/old,
/area/maintenance/engineering) /area/maintenance/engineering)
"pnV" = (
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"pok" = ( "pok" = (
/obj/structure/curtain/medical, /obj/structure/curtain/medical,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
@@ -64961,7 +65077,13 @@
/obj/machinery/meter{ /obj/machinery/meter{
name = "Scrubbers" name = "Scrubbers"
}, },
/turf/simulated/floor/plating, /obj/structure/disposalpipe/segment,
/obj/effect/floor_decal/corner/purple/full{
dir = 1
},
/obj/structure/table/rack,
/obj/item/pickaxe,
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"qwE" = ( "qwE" = (
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
@@ -65290,6 +65412,14 @@
/obj/item/toy/figure/roboticist, /obj/item/toy/figure/roboticist,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/research_port) /area/maintenance/research_port)
"rkv" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/disposalpipe/segment{
dir = 1;
icon_state = "pipe-c"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"rlF" = ( "rlF" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
@@ -65360,6 +65490,10 @@
/obj/structure/table/rack, /obj/structure/table/rack,
/obj/random/toolbox, /obj/random/toolbox,
/obj/random/tool, /obj/random/tool,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"rtt" = ( "rtt" = (
@@ -65523,6 +65657,7 @@
/obj/machinery/light/small{ /obj/machinery/light/small{
dir = 8 dir = 8
}, },
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"rNi" = ( "rNi" = (
@@ -65581,11 +65716,6 @@
/obj/effect/floor_decal/corner/grey/diagonal, /obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/old_white, /turf/simulated/floor/tiled/old_white,
/area/maintenance/medbay) /area/maintenance/medbay)
"rVD" = (
/obj/structure/lattice/catwalk,
/obj/item/hoist_kit,
/turf/simulated/open,
/area/maintenance/security_starboard)
"rWE" = ( "rWE" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
@@ -65801,6 +65931,20 @@
}, },
/turf/simulated/floor/carpet, /turf/simulated/floor/carpet,
/area/lawoffice) /area/lawoffice)
"snv" = (
/obj/structure/cable/green{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/structure/table/standard,
/obj/item/storage/box/donkpockets{
pixel_x = 3;
pixel_y = 3
},
/obj/item/storage/box/donkpockets,
/turf/simulated/floor/tiled,
/area/security/prison)
"sny" = ( "sny" = (
/obj/machinery/power/apc{ /obj/machinery/power/apc{
dir = 1; dir = 1;
@@ -66108,6 +66252,12 @@
}, },
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/bar) /area/maintenance/bar)
"sZw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/effect/floor_decal/corner/purple/full,
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard)
"taq" = ( "taq" = (
/obj/structure/extinguisher_cabinet{ /obj/structure/extinguisher_cabinet{
pixel_y = -32 pixel_y = -32
@@ -66139,7 +66289,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{ /obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 9 dir = 9
}, },
/turf/simulated/floor/plating, /obj/structure/disposalpipe/segment,
/turf/simulated/wall,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"tgQ" = ( "tgQ" = (
/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment,
@@ -66201,6 +66352,31 @@
/obj/machinery/hologram/holopad, /obj/machinery/hologram/holopad,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/engineering/atmos/storage) /area/engineering/atmos/storage)
"tnQ" = (
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/structure/disposalpipe/segment,
/obj/structure/cable{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"tow" = ( "tow" = (
/obj/structure/table/standard, /obj/structure/table/standard,
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
@@ -67164,6 +67340,23 @@
}, },
/turf/simulated/floor/tiled/white, /turf/simulated/floor/tiled/white,
/area/rnd/lab) /area/rnd/lab)
"vfO" = (
/obj/machinery/atmospherics/pipe/simple/hidden,
/obj/structure/window/reinforced,
/obj/structure/bed/chair/remote/robot/prison,
/obj/machinery/door/window/brigdoor/northright{
id = "Remote Chair";
name = "Remote Chair";
req_access = list(2)
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/turf/simulated/floor/tiled,
/area/security/prison)
"vgi" = ( "vgi" = (
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
@@ -67323,6 +67516,17 @@
/obj/effect/floor_decal/spline/plain, /obj/effect/floor_decal/spline/plain,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/security/nuke_storage) /area/security/nuke_storage)
"vuW" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced,
/obj/structure/grille,
/turf/simulated/floor/plating,
/area/security/brig)
"vvS" = ( "vvS" = (
/obj/structure/bed/chair/office/dark{ /obj/structure/bed/chair/office/dark{
dir = 8 dir = 8
@@ -67713,6 +67917,30 @@
/obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/floor_decal/industrial/hatch/yellow,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/hallway/primary/aft) /area/hallway/primary/aft)
"wkn" = (
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/structure/cable{
d1 = 1;
d2 = 8;
icon_state = "1-8"
},
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"wlr" = ( "wlr" = (
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
/obj/structure/window/reinforced{ /obj/structure/window/reinforced{
@@ -68011,6 +68239,7 @@
dir = 4; dir = 4;
pixel_x = -28 pixel_x = -28
}, },
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"wZf" = ( "wZf" = (
@@ -68197,6 +68426,29 @@
icon_state = "asteroidplating" icon_state = "asteroidplating"
}, },
/area/mine/unexplored) /area/mine/unexplored)
"xmv" = (
/obj/effect/floor_decal/industrial/warning{
dir = 1
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
/obj/structure/cable{
d1 = 1;
d2 = 4;
icon_state = "1-4"
},
/obj/structure/cable{
icon_state = "1-8"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"xmZ" = ( "xmZ" = (
/obj/structure/plasticflaps/airtight, /obj/structure/plasticflaps/airtight,
/obj/machinery/door/firedoor, /obj/machinery/door/firedoor,
@@ -68246,6 +68498,15 @@
/obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/atmospherics/unary/vent_pump/on,
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/hallway/primary/starboard) /area/hallway/primary/starboard)
"xoV" = (
/obj/structure/lattice/catwalk/indoor/grate,
/obj/structure/cable{
d1 = 2;
d2 = 4;
icon_state = "2-4"
},
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"xpb" = ( "xpb" = (
/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt,
/obj/structure/morgue{ /obj/structure/morgue{
@@ -68311,6 +68572,22 @@
/obj/machinery/atmospherics/pipe/manifold/hidden, /obj/machinery/atmospherics/pipe/manifold/hidden,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
/area/maintenance/atmos_control) /area/maintenance/atmos_control)
"xDq" = (
/obj/structure/disposalpipe/segment{
dir = 2;
icon_state = "pipe-c"
},
/obj/structure/lattice/catwalk/indoor/grate,
/turf/simulated/floor/plating,
/area/maintenance/security_starboard)
"xFo" = (
/obj/structure/table/standard,
/obj/effect/floor_decal/corner/purple/full{
dir = 4
},
/obj/item/storage/bag/crystal,
/turf/simulated/floor/tiled,
/area/maintenance/security_starboard)
"xGz" = ( "xGz" = (
/obj/effect/decal/cleanable/generic, /obj/effect/decal/cleanable/generic,
/turf/simulated/floor/plating, /turf/simulated/floor/plating,
@@ -68501,10 +68778,25 @@
/turf/simulated/floor/tiled, /turf/simulated/floor/tiled,
/area/outpost/mining_main/eva) /area/outpost/mining_main/eva)
"yck" = ( "yck" = (
/obj/structure/lattice/catwalk, /obj/structure/lattice,
/obj/random/tool, /obj/structure/disposalpipe/down{
dir = 1
},
/turf/simulated/open, /turf/simulated/open,
/area/maintenance/security_starboard) /area/maintenance/security_starboard)
"ydb" = (
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/grille,
/turf/simulated/floor/plating,
/area/security/brig)
"yfc" = ( "yfc" = (
/obj/machinery/disposal, /obj/machinery/disposal,
/obj/structure/disposalpipe/trunk{ /obj/structure/disposalpipe/trunk{
@@ -100023,9 +100315,9 @@ kbF
aai aai
rKr rKr
aan aan
aah xoV
agC agC
aaJ wkn
aaU aaU
abg abg
abD abD
@@ -100535,20 +100827,20 @@ aaa
aad aad
aag aag
yck yck
aaj orw
aaj heb
aav xmv
aad aad
udz udz
aaV aaV
abi abi
abF abF
abF
acm acm
abF
abF
abF
abF
acw acw
abF
abF
abF
adR adR
auN auN
afd afd
@@ -100791,7 +101083,7 @@ aaa
aaa aaa
aad aad
rsL rsL
rVD aaj
aaj aaj
aaj aaj
aaw aaw
@@ -100801,10 +101093,10 @@ aaV
aaV aaV
abG abG
aaV aaV
aaV ydb
aaV fZm
aaV fZm
aaV vuW
aaV aaV
adS adS
aeC aeC
@@ -101047,21 +101339,21 @@ aaa
aaa aaa
aaa aaa
aad aad
aah xDq
aak aak
aao aao
aar aar
aax aax
agC mlY
aaJ tnQ
aah pnV
wZe wZe
aae rkv
dED dED
cMe cMe
acx acx
abU abU
abU sZw
adv adv
adT adT
aeD aeD
@@ -101317,8 +101609,8 @@ abH
tgD tgD
qvD qvD
acy acy
aah hSk
aaD xFo
aaV aaV
adU adU
aeE aeE
@@ -101572,9 +101864,9 @@ aad
aaJ aaJ
abJ abJ
aad aad
adb aad
aah aad
fFq aad
aad aad
aaV aaV
adV adV
@@ -101865,7 +102157,7 @@ aIA
aJT aJT
aLG aLG
aNz aNz
aLG vfO
aQS aQS
azK azK
aUe aUe
@@ -102379,7 +102671,7 @@ aIC
aJV aJV
azK azK
azK azK
aPn aPm
aQU aQU
azK azK
aUf aUf
@@ -102635,8 +102927,8 @@ aGA
aGx aGx
aJW aJW
azK azK
aGx azK
aPo aPm
aQV aQV
azK azK
aUg aUg
@@ -103149,7 +103441,7 @@ aEC
aIE aIE
aJY aJY
azK azK
aEC snv
aPp aPp
aQX aQX
azK azK

View File

@@ -34,4 +34,7 @@
,/area/bridge/selfdestruct ,/area/bridge/selfdestruct
,/area/medical/cryo ,/area/medical/cryo
,/area/medical/patient_c ,/area/medical/patient_c
,/area/security/penal_colony
,/area/security/prison/remote
,/area/security/warden/remote
) )

View File

@@ -11,6 +11,7 @@ Used In File(s): /code/game/objects/item/devices/radio/radio.dm
.centradio {color: #5C5C8A;} .centradio {color: #5C5C8A;}
.airadio {color: #FF00FF;} .airadio {color: #FF00FF;}
.secradio {color: #A30000;} .secradio {color: #A30000;}
.penradio {color: #DB1270;}
.engradio {color: #A66300;} .engradio {color: #A66300;}
.medradio {color: #008160;} .medradio {color: #008160;}
.sciradio {color: #993399;} .sciradio {color: #993399;}