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\bedsheet_bin.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\displaycase.dm"
#include "code\game\objects\structures\door_assembly.dm"
@@ -2277,6 +2278,7 @@
#include "code\modules\power\cable.dm"
#include "code\modules\power\cable_heavyduty.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\generator.dm"
#include "code\modules\power\generator_type2.dm"

View File

@@ -376,6 +376,16 @@
#define AURA_TYPE_THROWN "Thrown"
#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
#define ROBOT_PANEL_EXPOSED "exposed"
#define ROBOT_PANEL_CELL "cell"

View File

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

View File

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

View File

@@ -6,11 +6,11 @@
flags = SS_NO_FIRE
// 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
// 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()
/datum/controller/subsystem/virtualreality/New()
@@ -125,7 +125,6 @@
/datum/controller/subsystem/virtualreality/proc/mech_selection(var/user, var/network)
var/list/mech = list()
mech["Return"] = null
for(var/mob/living/heavy_vehicle/R in mechs[network])
var/turf/T = get_turf(R)
@@ -144,23 +143,20 @@
continue
mech[R.name] = R
if(mech.len == 1)
if(!length(mech))
to_chat(user, SPAN_WARNING("No active remote mechs are available."))
return
var/desc = input("Please select a remote control compatible mech to take over.", "Remote Mech Selection") in mech|null
if(!desc)
var/choice = input("Please select a remote control compatible mech to take over.", "Remote Mech Selection") as null|anything in mech
if(!choice)
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
mind_transfer(user, remote_pilot)
return
/datum/controller/subsystem/virtualreality/proc/robot_selection(var/user, var/network)
var/list/robot = list()
robot["Return"] = null
for(var/mob/living/R in robots[network])
var/turf/T = get_turf(R)
@@ -174,14 +170,12 @@
continue
robot[R.name] = R
if(robot.len == 1)
if(!length(robot))
to_chat(user, SPAN_WARNING("No active remote robots are available."))
return
var/desc = input("Please select a remote control robot to take over.", "Remote Robot Selection") in robot|null
if(!desc)
var/choice = input("Please select a remote control robot to take over.", "Remote Robot Selection") as null|anything in robot
if(!choice)
return
mind_transfer(user, robot[desc])
return
mind_transfer(user, robot[choice])

View File

@@ -88,7 +88,7 @@
uniform = /obj/item/clothing/under/rank/warden
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
glasses = /obj/item/clothing/glasses/sunglasses/sechud/head
l_pocket = /obj/item/device/flash

View File

@@ -69,7 +69,7 @@
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)
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(!emagged)
announcer.autosay(drop_message, announcer_name, announcer_channel)

View File

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

View File

@@ -57,6 +57,16 @@
icon_state = "sec_cypherkey"
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
name = "engineering radio encryption key"
icon_state = "eng_cypherkey"
@@ -90,13 +100,13 @@
/obj/item/device/encryptionkey/heads/captain
name = "captain's encryption key"
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
name = "ai integrated encryption key"
desc = "Integrated encryption key"
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
name = "research director's encryption key"
@@ -106,7 +116,7 @@
/obj/item/device/encryptionkey/heads/hos
name = "head of security's encryption key"
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
name = "chief engineer's encryption key"
@@ -121,7 +131,7 @@
/obj/item/device/encryptionkey/heads/hop
name = "head of personnel's encryption key"
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
name = "supply radio encryption key"

View File

@@ -315,6 +315,23 @@
icon_state = "sec_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
name = "head of security's headset"
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(SEC_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(SUP_FREQ) = list(access_cargo),
num2text(SRV_FREQ) = list(access_janitor, access_hydroponics)

View File

@@ -219,8 +219,8 @@
new /obj/item/clothing/gloves/black_leather(src)
//Tools
new /obj/item/cartridge/security(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/device/radio/headset/headset_sec/alt(src)
new /obj/item/device/radio/headset/headset_warden(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(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
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."
remote_network = "remotemechs"
remote_network = REMOTE_GENERIC_MECH
/obj/structure/bed/chair/remote/mech/user_buckle_mob(mob/user)
..()
@@ -15,7 +15,7 @@
/obj/structure/bed/chair/remote/mech/prison
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."
remote_network = "prisonmechs"
remote_network = REMOTE_PRISON_MECH
/obj/structure/bed/chair/remote/mech/prison/portable
portable_type = /obj/item/deployable_kit/remote_mech/brig

View File

@@ -1,7 +1,7 @@
/obj/structure/bed/chair/remote/robot
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."
remote_network = "remoterobots"
remote_network = REMOTE_GENERIC_ROBOT
/obj/structure/bed/chair/remote/robot/user_buckle_mob(mob/user)
..()
@@ -12,4 +12,14 @@
/obj/structure/bed/chair/remote/robot/bunker
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."
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"
origin_tech = list(TECH_BLUESPACE = 3, TECH_MATERIAL = 4, TECH_DATA = 4)
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/dummy_path = /mob/living/simple_animal/spiderbot
@@ -19,7 +19,7 @@
/obj/item/remote_mecha/penal
name = "penal exosuit remote upgrade"
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
/obj/item/remote_mecha/penal/examine(mob/user)
@@ -30,5 +30,5 @@
/obj/item/remote_mecha/ai
name = "AI exosuit remote upgrade"
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

View File

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

View File

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

View File

@@ -151,20 +151,20 @@
/mob/living/heavy_vehicle/premade/ripley/remote
name = "remote power loader"
dummy_colour = "#ffc44f"
remote_network = "remotemechs"
remote_network = REMOTE_GENERIC_MECH
does_hardpoint_lock = FALSE
/mob/living/heavy_vehicle/premade/ripley/remote_prison
name = "penal power loader"
dummy_colour = "#302e2b"
remote_network = "prisonmechs"
remote_network = REMOTE_PRISON_MECH
/mob/living/heavy_vehicle/premade/ripley/remote_ai
name = "stationbound power loader"
e_color = COLOR_GREEN_GRAY
dummy_colour = COLOR_GREEN_GRAY
dummy_type = /mob/living/simple_animal/spiderbot/ai
remote_network = "aimechs"
remote_network = REMOTE_AI_MECH
does_hardpoint_lock = FALSE
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
status_flags |= NO_ANTAG
remote_network = "remoterobots"
remote_network = REMOTE_GENERIC_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/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/device/radio/headset/headset_com(src), slot_l_ear)
remote_network = "bunkerrobots"
remote_network = REMOTE_BUNKER_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/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")
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)
. = ..(mapload, SPECIES_IPC_ZENGHU)
@@ -246,7 +295,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
mind.name = real_name
status_flags |= NO_ANTAG
remote_network = "remoterobots"
remote_network = REMOTE_GENERIC_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/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/device/radio/headset/headset_com(src), slot_l_ear)
remote_network = "bunkerrobots"
remote_network = REMOTE_BUNKER_ROBOT
SSvirtualreality.add_robot(src, remote_network)
/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",
":e" = "Engineering", ".e" = "Engineering",
":s" = "Security", ".s" = "Security",
":q" = "Penal", ".q" = "Penal",
":w" = "whisper", ".w" = "whisper",
":t" = "Mercenary", ".t" = "Mercenary",
":x" = "Raider", ".x" = "Raider",
@@ -30,6 +31,7 @@ var/list/department_radio_keys = list(
":M" = "Medical", ".M" = "Medical",
":E" = "Engineering", ".E" = "Engineering",
":S" = "Security", ".S" = "Security",
":Q" = "Penal", ".Q" = "Penal",
":W" = "whisper", ".W" = "whisper",
":T" = "Mercenary", ".T" = "Mercenary",
":X" = "Raider", ".X" = "Raider",

View File

@@ -780,7 +780,7 @@ var/list/ai_verbs_default = list(
set name = "Remote Control Mech"
set category = "AI Commands"
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()
set name = "Toggle Hologram Movement"

View File

@@ -43,7 +43,7 @@
var/list/robots = list()
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
if(!ismech(M))
@@ -61,7 +61,7 @@
mechData["lockdown"] = M.lockdown
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
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
name = "Carbon"
description = "A chemical element, the builing block of life."
description = "A chemical element, the building block of life."
reagent_state = SOLID
color = "#1C1300"
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_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/uses_air = TRUE
active_power_usage = 2200 //the pneumatic pump power. 3 HP ~ 2200W
idle_power_usage = 100
/obj/machinery/disposal/airless
uses_air = FALSE
/obj/machinery/disposal/small
desc = "A compact pneumatic waste disposal unit."
icon_state = "disposal_small"
density = 0
density = FALSE
/obj/machinery/disposal/small/airless
uses_air = FALSE
/obj/machinery/disposal/small/Initialize()
. = ..()
@@ -38,21 +45,21 @@
return
else
switch(dir)
if(1)
if(NORTH)
pixel_y = -13
layer = MOB_LAYER + 0.1
if(2)
if(SOUTH)
pixel_y = 20
layer = OBJ_LAYER + 0.3
if(4)
if(EAST)
pixel_x = -12
if(8)
if(WEST)
pixel_x = 11
/obj/machinery/disposal/small/check_mob_size(mob/target)
if(target.mob_size > MOB_SMALL)
return 0
return 1
return FALSE
return TRUE
// create a new disposal
// 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.")
return
if(istype(I, /obj/item/storage/bag/trash))
var/obj/item/storage/bag/trash/T = I
to_chat(user, "<span class='notice'>You empty the bag.</span>")
for(var/obj/item/O in T.contents)
T.remove_from_storage(O,src)
T.update_icon()
if(istype(I, /obj/item/storage) && user.a_intent != I_HURT)
var/obj/item/storage/S = I
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 S.contents)
S.remove_from_storage(O, src)
S.update_icon()
update()
return
@@ -182,12 +189,7 @@
user.drop_from_inventory(I,src)
to_chat(user, "You place \the [I] into the [src].")
for(var/mob/M in viewers(src))
if(M == user)
continue
M.show_message("[user.name] places \the [I] into the [src].", 3)
user.visible_message("<b>[user]</b> places \the [I] into \the [src].", SPAN_NOTICE("You place \the [I] into the [src]."), range = 3)
update()
// mouse drop another mob or self
@@ -307,14 +309,19 @@
dat += "<BR><HR><A href='?src=\ref[src];eject=1'>Eject contents</A><HR>"
if(uses_air)
if(mode <= 0)
dat += "Pump: <B>Off</B> <A href='?src=\ref[src];pump=1'>On</A><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
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)
if(!uses_air)
per = 100
dat += "Pressure: [round(per, 1)]%<BR></body>"
@@ -421,12 +428,12 @@
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()
if(mode != 1) //if off or ready, no need to charge
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
update()
else

View File

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

View File

@@ -34,4 +34,7 @@
,/area/bridge/selfdestruct
,/area/medical/cryo
,/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;}
.airadio {color: #FF00FF;}
.secradio {color: #A30000;}
.penradio {color: #DB1270;}
.engradio {color: #A66300;}
.medradio {color: #008160;}
.sciradio {color: #993399;}