mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-07-20 11:32:51 +01:00
@@ -171,12 +171,12 @@ var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_
|
||||
if(!omni_icons)
|
||||
omni_icons = new()
|
||||
|
||||
var/icon/omni = new('icons/atmos/omni_devices.dmi')
|
||||
var/icon/omni = new('icons/atmos/omni_devices_vr.dmi') //VOREStation Edit - New Icons
|
||||
|
||||
for(var/state in omni.IconStates())
|
||||
if(!state || findtext(state, "map"))
|
||||
continue
|
||||
omni_icons[state] = image('icons/atmos/omni_devices.dmi', icon_state = state)
|
||||
omni_icons[state] = image('icons/atmos/omni_devices_vr.dmi', icon_state = state) //VOREStation Edit - New Icons
|
||||
|
||||
|
||||
/datum/pipe_icon_manager/proc/gen_underlay_icons()
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
#define MATERIAL_ALGAE "algae"
|
||||
#define MATERIAL_CARBON "carbon"
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm
|
||||
name = "algae oxygen generator"
|
||||
desc = "An oxygen generator using algae to convert carbon dioxide to oxygen."
|
||||
icon = 'icons/obj/machines/algae_vr.dmi'
|
||||
icon_state = "algae-off"
|
||||
circuit = /obj/item/weapon/circuitboard/algae_farm
|
||||
anchored = 1
|
||||
density = 1
|
||||
use_power = 2
|
||||
idle_power_usage = 100 // Minimal lights to keep algae alive
|
||||
active_power_usage = 5000 // Powerful grow lights to stimulate oxygen production
|
||||
//power_rating = 7500 //7500 W ~ 10 HP
|
||||
|
||||
var/list/stored_material = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 0)
|
||||
// Capacity increases with matter bin quality
|
||||
var/list/storage_capacity = list(MATERIAL_ALGAE = 10000, MATERIAL_CARBON = 10000)
|
||||
// Speed at which we convert CO2 to O2. Increases with manipulator quality
|
||||
var/moles_per_tick = 1
|
||||
// Power required to convert one mole of CO2 to O2 (this is powering the grow lights). Improves with capacitors
|
||||
var/power_per_mole = 1000
|
||||
var/algae_per_mole = 2
|
||||
var/carbon_per_mole = 2
|
||||
|
||||
var/recent_power_used = 0
|
||||
var/recent_moles_transferred = 0
|
||||
var/ui_error = null // For error messages to show up in nano ui.
|
||||
|
||||
var/datum/gas_mixture/internal = new()
|
||||
var/const/input_gas = "carbon_dioxide"
|
||||
var/const/output_gas = "oxygen"
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/New()
|
||||
..()
|
||||
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
|
||||
default_apply_parts()
|
||||
update_icon()
|
||||
// TODO - Make these in acutal icon states so its not silly like this
|
||||
var/image/I = image(icon = icon, icon_state = "algae-pipe-overlay", dir = dir)
|
||||
I.color = PIPE_COLOR_BLUE
|
||||
overlays += I
|
||||
I = image(icon = icon, icon_state = "algae-pipe-overlay", dir = reverse_dir[dir])
|
||||
I.color = PIPE_COLOR_BLACK
|
||||
overlays += I
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/Destroy()
|
||||
..()
|
||||
internal = null
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/process()
|
||||
..()
|
||||
recent_moles_transferred = 0
|
||||
|
||||
if(inoperable() || use_power < 2)
|
||||
return 0
|
||||
|
||||
// STEP 1 - Check material resources
|
||||
if(stored_material[MATERIAL_ALGAE] < algae_per_mole)
|
||||
ui_error = "Insufficient [material_display_name(MATERIAL_ALGAE)] to process."
|
||||
return
|
||||
if(stored_material[MATERIAL_CARBON] + carbon_per_mole > storage_capacity[MATERIAL_CARBON])
|
||||
ui_error = "[material_display_name(MATERIAL_CARBON)] output storage is full."
|
||||
return
|
||||
var/moles_to_convert = min(moles_per_tick,\
|
||||
stored_material[MATERIAL_ALGAE] * algae_per_mole,\
|
||||
storage_capacity[MATERIAL_CARBON] - stored_material[MATERIAL_CARBON] * carbon_per_mole)
|
||||
|
||||
// STEP 2 - Take the CO2 out of the input!
|
||||
var/power_draw = scrub_gas(src, list(input_gas), air1, internal, moles_to_convert)
|
||||
if(network1)
|
||||
network1.update = 1
|
||||
if (power_draw > 0)
|
||||
use_power(power_draw)
|
||||
last_power_draw += power_draw
|
||||
|
||||
// STEP 3 - Convert CO2 to O2 (Note: We know our internal group multipier is 1, so just be cool)
|
||||
var/co2_moles = internal.gas[input_gas]
|
||||
if(co2_moles < MINIMUM_MOLES_TO_FILTER)
|
||||
ui_error = "Insufficient [gas_data.name[input_gas]] to process."
|
||||
return
|
||||
|
||||
// STEP 4 - Consume the resources
|
||||
var/converted_moles = min(co2_moles, moles_per_tick)
|
||||
use_power(converted_moles * power_per_mole)
|
||||
last_power_draw += converted_moles * power_per_mole
|
||||
stored_material[MATERIAL_ALGAE] -= converted_moles * algae_per_mole
|
||||
stored_material[MATERIAL_CARBON] += converted_moles * carbon_per_mole
|
||||
|
||||
// STEP 5 - Output the converted oxygen. Fow now we output for free!
|
||||
internal.adjust_gas(input_gas, -converted_moles)
|
||||
air2.adjust_gas_temp(output_gas, converted_moles, internal.temperature)
|
||||
if(network2)
|
||||
network2.update = 1
|
||||
recent_moles_transferred = converted_moles
|
||||
ui_error = null // Success!
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/update_icon()
|
||||
if(inoperable() || !anchored)
|
||||
icon_state = "algae-off"
|
||||
else if(recent_moles_transferred >= moles_per_tick)
|
||||
icon_state = "aglae-full"
|
||||
else if(recent_moles_transferred > 0)
|
||||
icon_state = "algae-full"
|
||||
else
|
||||
icon_state = "algae-on"
|
||||
return 1
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
if(try_load_materials(user, W))
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You cannot insert this item into \the [src]!</span>"
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/attack_hand(mob/user)
|
||||
if(..()) return 1
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nano_ui/master_ui = null, var/datum/topic_state/state = default_state)
|
||||
var/data[0]
|
||||
data["panelOpen"] = panel_open
|
||||
|
||||
var/materials_ui[0]
|
||||
for(var/M in stored_material)
|
||||
materials_ui[++materials_ui.len] = list(
|
||||
"name" = M,
|
||||
"display" = material_display_name(M),
|
||||
"qty" = stored_material[M],
|
||||
"max" = storage_capacity[M],
|
||||
"percent" = (stored_material[M] / storage_capacity[M] * 100))
|
||||
data["materials"] = materials_ui
|
||||
data["last_flow_rate"] = last_flow_rate
|
||||
data["last_power_draw"] = last_power_draw
|
||||
data["inputDir"] = dir2text(reverse_dir[dir])
|
||||
data["outputDir"] = dir2text(dir)
|
||||
data["usePower"] = use_power
|
||||
data["errorText"] = ui_error
|
||||
|
||||
if(air1 && network1 && node1)
|
||||
data["input"] = list(
|
||||
"pressure" = air1.return_pressure(),
|
||||
"name" = gas_data.name[input_gas],
|
||||
"percent" = air1.total_moles > 0 ? round((air1.gas[input_gas] / air1.total_moles) * 100) : 0,
|
||||
"moles" = round(air1.gas[input_gas], 0.01))
|
||||
if(air2 && network2 && node2)
|
||||
data["output"] = list(
|
||||
"pressure" = air2.return_pressure(),
|
||||
"name" = gas_data.name[output_gas],
|
||||
"percent" = air2.total_moles ? round((air2.gas[output_gas] / air2.total_moles) * 100) : 0,
|
||||
"moles" = round(air2.gas[output_gas], 0.01))
|
||||
|
||||
// update the ui if it exists, returns null if no ui is passed/found
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
ui = new(user, src, ui_key, "algae_farm_vr.tmpl", "Algae Farm Control Panel", 500, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.set_auto_update(TRUE)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/atmospherics/binary/algae_farm/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
usr.set_machine(src)
|
||||
add_fingerprint(usr)
|
||||
|
||||
// Queue management can be done even while busy
|
||||
if(href_list["activate"])
|
||||
update_use_power(2)
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(href_list["deactivate"])
|
||||
update_use_power(1)
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
if(href_list["ejectMaterial"])
|
||||
var/matName = href_list["ejectMaterial"]
|
||||
if(!(matName in stored_material))
|
||||
return
|
||||
eject_materials(matName, 0)
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
// TODO - These should be replaced with materials datum.
|
||||
|
||||
// 0 amount = 0 means ejecting a full stack; -1 means eject everything
|
||||
/obj/machinery/atmospherics/binary/algae_farm/proc/eject_materials(var/material_name, var/amount)
|
||||
var/recursive = amount == -1 ? 1 : 0
|
||||
var/material/matdata = get_material_by_name(material_name)
|
||||
var/stack_type = matdata.stack_type
|
||||
var/obj/item/stack/material/S = new stack_type(loc)
|
||||
if(amount <= 0)
|
||||
amount = S.max_amount
|
||||
var/ejected = min(round(stored_material[material_name] / S.perunit), amount)
|
||||
S.amount = min(ejected, amount)
|
||||
if(S.amount <= 0)
|
||||
qdel(S)
|
||||
return
|
||||
stored_material[material_name] -= ejected * S.perunit
|
||||
if(recursive && stored_material[material_name] >= S.perunit)
|
||||
eject_materials(material_name, -1)
|
||||
|
||||
// Attept to load materials. Returns 0 if item wasn't a stack of materials, otherwise 1 (even if failed to load)
|
||||
/obj/machinery/atmospherics/binary/algae_farm/proc/try_load_materials(var/mob/user, var/obj/item/stack/material/S)
|
||||
if(!istype(S))
|
||||
return 0
|
||||
if(!(S.material.name in stored_material))
|
||||
user << "<span class='warning'>\The [src] doesn't accept [material_display_name(S.material)]!</span>"
|
||||
return 1
|
||||
var/max_res_amount = storage_capacity[S.material.name]
|
||||
if(stored_material[S.material.name] + S.perunit <= max_res_amount)
|
||||
var/count = 0
|
||||
while(stored_material[S.material.name] + S.perunit <= max_res_amount && S.amount >= 1)
|
||||
stored_material[S.material.name] += S.perunit
|
||||
S.use(1)
|
||||
count++
|
||||
user.visible_message("\The [user] inserts [S.name] into \the [src].", "<span class='notice'>You insert [count] [S.name] into \the [src].</span>")
|
||||
updateUsrDialog()
|
||||
else
|
||||
user << "<span class='warning'>\The [src] cannot hold more [S.name].</span>"
|
||||
return 1
|
||||
|
||||
/material/algae
|
||||
name = MATERIAL_ALGAE
|
||||
stack_type = /obj/item/stack/material/algae
|
||||
icon_colour = "#557722"
|
||||
shard_type = SHARD_STONE_PIECE
|
||||
weight = 10
|
||||
hardness = 10
|
||||
sheet_singular_name = "sheet"
|
||||
sheet_plural_name = "sheets"
|
||||
|
||||
/obj/item/stack/material/algae
|
||||
name = "algae sheet"
|
||||
icon_state = "sheet-uranium"
|
||||
color = "#557722"
|
||||
default_type = MATERIAL_ALGAE
|
||||
|
||||
/material/carbon
|
||||
name = MATERIAL_CARBON
|
||||
stack_type = /obj/item/stack/material/carbon
|
||||
icon_colour = "#303030"
|
||||
shard_type = SHARD_SPLINTER
|
||||
weight = 5
|
||||
hardness = 20
|
||||
icon_base = "stone"
|
||||
icon_reinf = "reinf_stone"
|
||||
door_icon_base = "stone"
|
||||
sheet_singular_name = "sheet"
|
||||
sheet_plural_name = "sheets"
|
||||
|
||||
/obj/item/stack/material/carbon
|
||||
name = "carbon sheet"
|
||||
icon_state = "sheet-metal"
|
||||
color = "#303030"
|
||||
default_type = MATERIAL_CARBON
|
||||
|
||||
#undef MATERIAL_ALGAE
|
||||
#undef MATERIAL_CARBON
|
||||
@@ -3,7 +3,7 @@
|
||||
//--------------------------------------------
|
||||
/obj/machinery/atmospherics/omni
|
||||
name = "omni device"
|
||||
icon = 'icons/atmos/omni_devices.dmi'
|
||||
icon = 'icons/atmos/omni_devices_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "base"
|
||||
use_power = 1
|
||||
initialize_directions = 0
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/atmospherics/unary/freezer
|
||||
name = "gas cooling system"
|
||||
desc = "Cools gas when connected to pipe network"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi'
|
||||
icon_state = "freezer_0"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/atmospherics/unary/heater
|
||||
name = "gas heating system"
|
||||
desc = "Heats gas when connected to a pipe network"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi'
|
||||
icon_state = "heater_0"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -1053,7 +1053,7 @@
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/pipe/tank
|
||||
icon = 'icons/atmos/tank.dmi'
|
||||
icon = 'icons/atmos/tank_vr.dmi' //VOREStation Edit - New Icons
|
||||
icon_state = "air_map"
|
||||
|
||||
name = "Pressure Tank"
|
||||
|
||||
@@ -87,6 +87,12 @@ Class Procs:
|
||||
|
||||
/datum/controller/air_system/var/next_id = 1 //Used to keep track of zone UIDs.
|
||||
|
||||
|
||||
#if UNIT_TEST
|
||||
#define CHECK_SLEEP_ZAS_SETUP // For unit tests we don't care about a smooth lobby screen experience. We care about speed.
|
||||
#else
|
||||
#define CHECK_SLEEP_ZAS_SETUP if(++done_turfs > 10000) { done_turfs=0;sleep(world.tick_lag); }
|
||||
#endif
|
||||
/datum/controller/air_system/proc/Setup()
|
||||
//Purpose: Call this at the start to setup air groups geometry
|
||||
// (Warning: Very processor intensive but only must be done once per round)
|
||||
@@ -94,6 +100,9 @@ Class Procs:
|
||||
//Inputs: None.
|
||||
//Outputs: None.
|
||||
|
||||
#if !UNIT_TEST
|
||||
var/done_turfs = 0
|
||||
#endif
|
||||
#ifndef ZASDBG
|
||||
set background = 1
|
||||
#endif
|
||||
@@ -108,6 +117,7 @@ Class Procs:
|
||||
for(var/turf/simulated/S in world)
|
||||
simulated_turf_count++
|
||||
S.update_air_properties()
|
||||
CHECK_SLEEP_ZAS_SETUP
|
||||
|
||||
admin_notice({"<span class='danger'>Geometry initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>
|
||||
<span class='info'>
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ Notes for people who used ZAS before:
|
||||
*/
|
||||
|
||||
//#define ZASDBG
|
||||
//#define MULTIZAS
|
||||
#define MULTIZAS
|
||||
#define AIR_BLOCKED 1
|
||||
#define ZONE_BLOCKED 2
|
||||
#define BLOCKED 3
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
/*This file is a list of all preclaimed planes & layers
|
||||
|
||||
All planes & layers should be given a value here instead of using a magic/arbitrary number.
|
||||
|
||||
After fiddling with planes and layers for some time, I figured I may as well provide some documentation:
|
||||
|
||||
What are planes?
|
||||
Think of Planes as a sort of layer for a layer - if plane X is a larger number than plane Y, the highest number for a layer in X will be below the lowest
|
||||
number for a layer in Y.
|
||||
Planes also have the added bonus of having planesmasters.
|
||||
|
||||
What are Planesmasters?
|
||||
Planesmasters, when in the sight of a player, will have its appearance properties (for example, colour matrices, alpha, transform, etc)
|
||||
applied to all the other objects in the plane. This is all client sided.
|
||||
Usually you would want to add the planesmaster as an invisible image in the client's screen.
|
||||
|
||||
What can I do with Planesmasters?
|
||||
You can: Make certain players not see an entire plane,
|
||||
Make an entire plane have a certain colour matrices,
|
||||
Make an entire plane transform in a certain way,
|
||||
Make players see a plane which is hidden to normal players - I intend to implement this with the antag HUDs for example.
|
||||
Planesmasters can be used as a neater way to deal with client images or potentially to do some neat things
|
||||
|
||||
How do planes work?
|
||||
A plane can be any integer from -100 to 100. (If you want more, bug lummox.)
|
||||
All planes above 0, the 'base plane', are visible even when your character cannot 'see' them, for example, the HUD.
|
||||
All planes below 0, the 'base plane', are only visible when a character can see them.
|
||||
|
||||
How do I add a plane?
|
||||
Think of where you want the plane to appear, look through the pre-existing planes and find where it is above and where it is below
|
||||
Slot it in in that place, and change the pre-existing planes, making sure no plane shares a number.
|
||||
Add a description with a comment as to what the plane does.
|
||||
|
||||
How do I make something a planesmaster?
|
||||
Add the PLANE_MASTER appearance flag to the appearance_flags variable.
|
||||
|
||||
What is the naming convention for planes or layers?
|
||||
Make sure to use the name of your object before the _LAYER or _PLANE, eg: [NAME_OF_YOUR_OBJECT HERE]_LAYER or [NAME_OF_YOUR_OBJECT HERE]_PLANE
|
||||
Also, as it's a define, it is standard practice to use capital letters for the variable so people know this.
|
||||
|
||||
*/
|
||||
|
||||
#define DEFAULT_PLANE 0 // BYOND's default value for plane, the "base plane"
|
||||
|
||||
#define SPACE_PLANE -32 // Reserved for use in space/parallax
|
||||
|
||||
#define PARALLAX_PLANE -30 // Reserved for use in space/parallax
|
||||
|
||||
// OPENSPACE_PLANE reserves all planes between OPENSPACE_PLANE_START and OPENSPACE_PLANE_END inclusive
|
||||
#define OPENSPACE_PLANE_START -23
|
||||
#define OPENSPACE_PLANE_END -8
|
||||
#define OPENSPACE_PLANE -25 // /turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17)
|
||||
|
||||
#define OVER_OPENSPACE_PLANE -7
|
||||
@@ -0,0 +1,49 @@
|
||||
//
|
||||
// Constants and standard colors for the holomap
|
||||
//
|
||||
|
||||
#define WORLD_ICON_SIZE 32 // Size of a standard tile in pixels (world.icon_size)
|
||||
#define PIXEL_MULTIPLIER WORLD_ICON_SIZE/32 // Convert from normal icon size of 32 to whatever insane thing this server is using.
|
||||
#define HOLOMAP_ICON 'icons/480x480_vr.dmi' // Icon file to start with when drawing holomaps (to get a 480x480 canvas).
|
||||
#define ui_holomap "CENTER-7, CENTER-7" // Screen location of the holomap "hud"
|
||||
|
||||
// Holomap colors
|
||||
#define HOLOMAP_OBSTACLE "#FFFFFFDD" // Color of walls and barriers
|
||||
#define HOLOMAP_PATH "#66666699" // Color of floors
|
||||
#define HOLOMAP_ROCK "#66666644" // Color of mineral walls
|
||||
#define HOLOMAP_HOLOFIER "#79FF79" // Whole map is multiplied by this to give it a green holoish look
|
||||
|
||||
#define HOLOMAP_AREACOLOR_COMMAND "#0000F099"
|
||||
#define HOLOMAP_AREACOLOR_SECURITY "#AE121299"
|
||||
#define HOLOMAP_AREACOLOR_MEDICAL "#447FC299"
|
||||
#define HOLOMAP_AREACOLOR_SCIENCE "#A154A699"
|
||||
#define HOLOMAP_AREACOLOR_ENGINEERING "#F1C23199"
|
||||
#define HOLOMAP_AREACOLOR_CARGO "#E06F0099"
|
||||
#define HOLOMAP_AREACOLOR_HALLWAYS "#FFFFFF66"
|
||||
#define HOLOMAP_AREACOLOR_ARRIVALS "#0000FFCC"
|
||||
#define HOLOMAP_AREACOLOR_ESCAPE "#FF0000CC"
|
||||
#define HOLOMAP_AREACOLOR_DORMS "#CCCC0099"
|
||||
|
||||
// Handy defines to lookup the pixel offsets for this Z-level. Cache these if you use them in a loop tho.
|
||||
#define HOLOMAP_PIXEL_OFFSET_X(zLevel) ((using_map.holomap_offset_x.len >= zLevel) ? using_map.holomap_offset_x[zLevel] : 0)
|
||||
#define HOLOMAP_PIXEL_OFFSET_Y(zLevel) ((using_map.holomap_offset_y.len >= zLevel) ? using_map.holomap_offset_y[zLevel] : 0)
|
||||
#define HOLOMAP_LEGEND_X(zLevel) ((using_map.holomap_legend_x.len >= zLevel) ? using_map.holomap_legend_x[zLevel] : 96)
|
||||
#define HOLOMAP_LEGEND_Y(zLevel) ((using_map.holomap_legend_y.len >= zLevel) ? using_map.holomap_legend_y[zLevel] : 96)
|
||||
|
||||
// VG stuff we probably won't use
|
||||
// #define HOLOMAP_FILTER_DEATHSQUAD 1
|
||||
// #define HOLOMAP_FILTER_ERT 2
|
||||
// #define HOLOMAP_FILTER_NUKEOPS 4
|
||||
// #define HOLOMAP_FILTER_ELITESYNDICATE 8
|
||||
// #define HOLOMAP_FILTER_VOX 16
|
||||
// #define HOLOMAP_FILTER_STATIONMAP 32
|
||||
// #define HOLOMAP_FILTER_STATIONMAP_STRATEGIC 64//features markers over the captain's office, the armory, the SMES
|
||||
|
||||
// #define HOLOMAP_MARKER_SMES "smes"
|
||||
// #define HOLOMAP_MARKER_DISK "diskspawn"
|
||||
// #define HOLOMAP_MARKER_SKIPJACK "skipjack"
|
||||
// #define HOLOMAP_MARKER_SYNDISHUTTLE "syndishuttle"
|
||||
|
||||
#define HOLOMAP_EXTRA_STATIONMAP "stationmapformatted"
|
||||
#define HOLOMAP_EXTRA_STATIONMAPAREAS "stationareas"
|
||||
#define HOLOMAP_EXTRA_STATIONMAPSMALL "stationmapsmall"
|
||||
@@ -87,6 +87,7 @@
|
||||
#define SHUTTLE_IDLE 0
|
||||
#define SHUTTLE_WARMUP 1
|
||||
#define SHUTTLE_INTRANSIT 2
|
||||
#define SHUTTLE_CRASHED 3 // VOREStation Edit - Yup that can happen now
|
||||
|
||||
// Ferry shuttle processing status.
|
||||
#define IDLE_STATE 0
|
||||
@@ -126,6 +127,7 @@
|
||||
#define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
|
||||
#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put
|
||||
#define SCREEN_LAYER 22 //Mob HUD/effects layer
|
||||
#define ABOVE_WINDOW_LAYER 3.25 //Above full tile windows so wall items are clickable // VOREStation Edit
|
||||
|
||||
// Convoluted setup so defines can be supplied by Bay12 main server compile script.
|
||||
// Should still work fine for people jamming the icons into their repo.
|
||||
|
||||
@@ -12,7 +12,8 @@ var/list/global_huds = list(
|
||||
global_hud.nvg,
|
||||
global_hud.thermal,
|
||||
global_hud.meson,
|
||||
global_hud.science
|
||||
global_hud.science,
|
||||
global_hud.holomap
|
||||
)
|
||||
|
||||
/datum/hud/var/obj/screen/grab_intent
|
||||
@@ -30,6 +31,7 @@ var/list/global_huds = list(
|
||||
var/obj/screen/thermal
|
||||
var/obj/screen/meson
|
||||
var/obj/screen/science
|
||||
var/obj/screen/holomap
|
||||
|
||||
/datum/global_hud/proc/setup_overlay(var/icon_state)
|
||||
var/obj/screen/screen = new /obj/screen()
|
||||
@@ -69,6 +71,18 @@ var/list/global_huds = list(
|
||||
meson = setup_overlay("meson_hud")
|
||||
science = setup_overlay("science_hud")
|
||||
|
||||
// The holomap screen object is actually totally invisible.
|
||||
// Station maps work by setting it as an images location before sending to client, not
|
||||
// actually changing the icon or icon state of the screen object itself!
|
||||
// Why do they work this way? I don't know really, that is how /vg designed them, but since they DO
|
||||
// work this way, we can take advantage of their immutability by making them part of
|
||||
// the global_hud (something we have and /vg doesn't) instead of an instance per mob.
|
||||
holomap = new /obj/screen()
|
||||
holomap.name = "holomap"
|
||||
holomap.icon = null
|
||||
holomap.screen_loc = ui_holomap
|
||||
holomap.mouse_opacity = 0
|
||||
|
||||
var/obj/screen/O
|
||||
var/i
|
||||
//that nasty looking dither you get when you're short-sighted
|
||||
|
||||
@@ -38,34 +38,18 @@ datum/controller/game_controller/proc/setup()
|
||||
SetupXenoarch()
|
||||
|
||||
transfer_controller = new
|
||||
admin_notice("<span class='danger'>Initializations complete.</span>", R_DEBUG)
|
||||
|
||||
#if UNIT_TEST
|
||||
#define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed.
|
||||
#else
|
||||
#define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); }
|
||||
#endif
|
||||
|
||||
datum/controller/game_controller/proc/setup_objects()
|
||||
admin_notice("<span class='danger'>Initializing objects</span>", R_DEBUG)
|
||||
sleep(-1)
|
||||
for(var/atom/movable/object in world)
|
||||
if(isnull(object.gcDestroyed))
|
||||
object.initialize()
|
||||
|
||||
admin_notice("<span class='danger'>Initializing areas</span>", R_DEBUG)
|
||||
sleep(-1)
|
||||
for(var/area/area in all_areas)
|
||||
area.initialize()
|
||||
|
||||
admin_notice("<span class='danger'>Initializing pipe networks</span>", R_DEBUG)
|
||||
sleep(-1)
|
||||
for(var/obj/machinery/atmospherics/machine in machines)
|
||||
machine.build_network()
|
||||
|
||||
admin_notice("<span class='danger'>Initializing atmos machinery.</span>", R_DEBUG)
|
||||
sleep(-1)
|
||||
for(var/obj/machinery/atmospherics/unary/U in machines)
|
||||
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/T = U
|
||||
T.broadcast_status()
|
||||
else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
|
||||
T.broadcast_status()
|
||||
#if !UNIT_TEST
|
||||
var/initialized_objects = 0
|
||||
#endif
|
||||
|
||||
// Set up antagonists.
|
||||
populate_antag_type_list()
|
||||
@@ -73,12 +57,50 @@ datum/controller/game_controller/proc/setup_objects()
|
||||
//Set up spawn points.
|
||||
populate_spawn_points()
|
||||
|
||||
admin_notice("<span class='danger'>Initializing Floor Decals</span>", R_DEBUG)
|
||||
var/list/turfs_with_decals = list()
|
||||
for(var/obj/effect/floor_decal/D in world)
|
||||
var/T = D.add_to_turf_decals()
|
||||
if(T) turfs_with_decals |= T
|
||||
CHECK_SLEEP_MASTER
|
||||
for(var/item in turfs_with_decals)
|
||||
var/turf/T = item
|
||||
if(T.decals) T.apply_decals()
|
||||
CHECK_SLEEP_MASTER
|
||||
floor_decals_initialized = TRUE
|
||||
sleep(1)
|
||||
|
||||
admin_notice("<span class='danger'>Initializing objects</span>", R_DEBUG)
|
||||
for(var/obj/object in world)
|
||||
if(isnull(object.gcDestroyed))
|
||||
object.initialize()
|
||||
CHECK_SLEEP_MASTER
|
||||
sleep(1)
|
||||
|
||||
admin_notice("<span class='danger'>Initializing areas</span>", R_DEBUG)
|
||||
for(var/area/area in all_areas)
|
||||
area.initialize()
|
||||
CHECK_SLEEP_MASTER
|
||||
sleep(1)
|
||||
|
||||
admin_notice("<span class='danger'>Initializing pipe networks</span>", R_DEBUG)
|
||||
for(var/obj/machinery/atmospherics/machine in machines)
|
||||
machine.build_network()
|
||||
CHECK_SLEEP_MASTER
|
||||
|
||||
admin_notice("<span class='danger'>Initializing atmos machinery.</span>", R_DEBUG)
|
||||
for(var/obj/machinery/atmospherics/unary/U in machines)
|
||||
if(istype(U, /obj/machinery/atmospherics/unary/vent_pump))
|
||||
var/obj/machinery/atmospherics/unary/vent_pump/T = U
|
||||
T.broadcast_status()
|
||||
else if(istype(U, /obj/machinery/atmospherics/unary/vent_scrubber))
|
||||
var/obj/machinery/atmospherics/unary/vent_scrubber/T = U
|
||||
T.broadcast_status()
|
||||
CHECK_SLEEP_MASTER
|
||||
|
||||
admin_notice("<span class='danger'>Initializing turbolifts</span>", R_DEBUG)
|
||||
for(var/thing in turbolifts)
|
||||
if(!deleted(thing))
|
||||
var/obj/turbolift_map_holder/lift = thing
|
||||
lift.initialize()
|
||||
sleep(-1)
|
||||
|
||||
admin_notice("<span class='danger'>Initializations complete.</span>", R_DEBUG)
|
||||
sleep(-1)
|
||||
CHECK_SLEEP_MASTER
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
|
||||
var/global/datum/shuttle_controller/shuttle_controller
|
||||
|
||||
|
||||
/datum/shuttle_controller
|
||||
var/list/shuttles //maps shuttle tags to shuttle datums, so that they can be looked up.
|
||||
var/list/process_shuttles //simple list of shuttles, for processing
|
||||
|
||||
/datum/shuttle_controller/proc/process()
|
||||
//process ferry shuttles
|
||||
for (var/datum/shuttle/ferry/shuttle in process_shuttles)
|
||||
if (shuttle.process_state)
|
||||
shuttle.process()
|
||||
|
||||
|
||||
//This is called by gameticker after all the machines and radio frequencies have been properly initialized
|
||||
/datum/shuttle_controller/proc/setup_shuttle_docks()
|
||||
for(var/shuttle_tag in shuttles)
|
||||
var/datum/shuttle/shuttle = shuttles[shuttle_tag]
|
||||
shuttle.init_docking_controllers()
|
||||
shuttle.dock() //makes all shuttles docked to something at round start go into the docked state
|
||||
|
||||
for(var/obj/machinery/embedded_controller/C in machines)
|
||||
if(istype(C.program, /datum/computer/file/embedded_program/docking))
|
||||
C.program.tag = null //clear the tags, 'cause we don't need 'em anymore
|
||||
|
||||
/datum/shuttle_controller/New()
|
||||
shuttles = list()
|
||||
process_shuttles = list()
|
||||
|
||||
var/datum/shuttle/ferry/shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Escape shuttle and pods
|
||||
shuttle = new/datum/shuttle/ferry/emergency()
|
||||
shuttle.location = 1 // At offsite
|
||||
shuttle.warmup_time = 10
|
||||
shuttle.area_offsite = locate(/area/shuttle/escape/centcom)
|
||||
shuttle.area_station = locate(/area/shuttle/escape/station)
|
||||
shuttle.area_transition = locate(/area/shuttle/escape/transit)
|
||||
shuttle.docking_controller_tag = "escape_shuttle"
|
||||
shuttle.dock_target_station = "escape_dock"
|
||||
shuttle.dock_target_offsite = "centcom_dock"
|
||||
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN
|
||||
shuttles["Escape"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
shuttle = new/datum/shuttle/ferry/escape_pod()
|
||||
shuttle.location = 0 // At station
|
||||
shuttle.warmup_time = 0
|
||||
shuttle.area_station = locate(/area/shuttle/large_escape_pod1/station)
|
||||
shuttle.area_offsite = locate(/area/shuttle/large_escape_pod1/centcom)
|
||||
shuttle.area_transition = locate(/area/shuttle/large_escape_pod1/transit)
|
||||
shuttle.docking_controller_tag = "large_escape_pod_1"
|
||||
shuttle.dock_target_station = "large_escape_pod_1_berth"
|
||||
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
||||
process_shuttles += shuttle
|
||||
shuttles["Large Escape Pod 1"] = shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
shuttle = new/datum/shuttle/ferry/escape_pod()
|
||||
shuttle.location = 0 // At station
|
||||
shuttle.warmup_time = 0
|
||||
shuttle.area_station = locate(/area/shuttle/large_escape_pod2/station)
|
||||
shuttle.area_offsite = locate(/area/shuttle/large_escape_pod2/centcom)
|
||||
shuttle.area_transition = locate(/area/shuttle/large_escape_pod2/transit)
|
||||
shuttle.docking_controller_tag = "large_escape_pod_2"
|
||||
shuttle.dock_target_station = "large_escape_pod_2_berth"
|
||||
shuttle.move_time = SHUTTLE_TRANSIT_DURATION_RETURN + rand(-30, 60) //randomize this so it seems like the pods are being picked up one by one
|
||||
process_shuttles += shuttle
|
||||
shuttles["Large Escape Pod 2"] = shuttle
|
||||
|
||||
//give the emergency shuttle controller it's shuttles
|
||||
emergency_shuttle.shuttle = shuttles["Escape"]
|
||||
emergency_shuttle.escape_pods = list(
|
||||
shuttles["Large Escape Pod 1"],
|
||||
shuttles["Large Escape Pod 2"],
|
||||
)
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Supply shuttle
|
||||
shuttle = new/datum/shuttle/ferry/supply()
|
||||
shuttle.location = 1
|
||||
shuttle.warmup_time = 10
|
||||
shuttle.area_offsite = locate(/area/supply/dock)
|
||||
shuttle.area_station = locate(/area/supply/station)
|
||||
shuttle.docking_controller_tag = "supply_shuttle"
|
||||
shuttle.dock_target_station = "cargo_bay"
|
||||
shuttles["Supply"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
supply_controller.shuttle = shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Trade Ship
|
||||
shuttle = new()
|
||||
shuttle.location = 1
|
||||
shuttle.warmup_time = 10 //want some warmup time so people can cancel.
|
||||
shuttle.area_offsite = locate(/area/shuttle/trade/centcom)
|
||||
shuttle.area_station = locate(/area/shuttle/trade/station)
|
||||
shuttle.docking_controller_tag = "trade_shuttle"
|
||||
shuttle.dock_target_station = "trade_shuttle_dock_airlock"
|
||||
shuttle.dock_target_offsite = "trade_shuttle_bay"
|
||||
shuttles["Trade"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Away Mission Shuttle
|
||||
var/datum/shuttle/multi_shuttle/AM = new/datum/shuttle/multi_shuttle()
|
||||
AM.legit = 1
|
||||
AM.origin = locate(/area/shuttle/awaymission/home)
|
||||
AM.start_location = "NSS Adephagia (AM)"
|
||||
|
||||
AM.destinations = list(
|
||||
"Old Engineering Base (AM)" = locate(/area/shuttle/awaymission/oldengbase)
|
||||
)
|
||||
|
||||
AM.docking_controller_tag = "awaymission_shuttle"
|
||||
AM.destination_dock_targets = list(
|
||||
"NSS Adephagia (AM)" = "d1a2_dock_airlock"
|
||||
)
|
||||
|
||||
var/area/awaym_dest = locate(/area/shuttle/awaymission/away)
|
||||
if(awaym_dest.contents.len) //Otherwise this is an empty imaginary area
|
||||
AM.destinations["Unknown Location [rand(1000,9999)]"] = awaym_dest
|
||||
|
||||
AM.announcer = "Automated Traffic Control"
|
||||
//These seem backwards because they are written from the perspective of the merc and vox ships
|
||||
AM.departure_message = "Attention. The away mission vessel is approaching the colony."
|
||||
AM.arrival_message = "Attention. The away mission vessel is now leaving from the colony."
|
||||
AM.interim = locate(/area/shuttle/awaymission/warp)
|
||||
|
||||
AM.move_time = 60
|
||||
AM.warmup_time = 8
|
||||
shuttles["AwayMission"] = AM
|
||||
|
||||
|
||||
// TODO - Not implemented yet on new map
|
||||
///////////////////////////////////////////////
|
||||
//VOREStation Add - Belter Shuttle
|
||||
// shuttle = new/datum/shuttle/ferry()
|
||||
// shuttle.location = 0
|
||||
// shuttle.warmup_time = 6
|
||||
// shuttle.area_station = locate(/area/shuttle/belter/station)
|
||||
// shuttle.area_offsite = locate(/area/shuttle/belter/belt/zone1)
|
||||
// shuttle.area_transition = locate(/area/shuttle/belter/transit)
|
||||
// shuttle.docking_controller_tag = "belter_docking"
|
||||
// shuttle.dock_target_station = "belter_nodocking" //Fake tags to prevent the shuttle from opening doors.
|
||||
// shuttle.dock_target_offsite = "belter_nodocking"
|
||||
// shuttle.transit_direction = EAST
|
||||
// shuttle.move_time = 60 + rand(10,40)
|
||||
// process_shuttles += shuttle
|
||||
// shuttles["Belter"] = shuttle
|
||||
//VOREStation Add End - Belter Shuttle
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Tether Shuttle
|
||||
var/datum/shuttle/ferry/tether_backup/TB = new()
|
||||
TB.location = 1 // At offsite
|
||||
TB.warmup_time = 5
|
||||
TB.move_time = 45
|
||||
TB.area_offsite = locate(/area/shuttle/tether/surface)
|
||||
TB.area_station = locate(/area/shuttle/tether/station)
|
||||
TB.area_transition = locate(/area/shuttle/tether/transit)
|
||||
TB.crash_areas = list(locate(/area/shuttle/tether/crash1), locate(/area/shuttle/tether/crash2))
|
||||
TB.docking_controller_tag = "tether_shuttle"
|
||||
TB.dock_target_station = "tether_dock_airlock"
|
||||
TB.dock_target_offsite = "tether_pad_airlock"
|
||||
shuttles["Tether Backup"] = TB
|
||||
process_shuttles += TB
|
||||
|
||||
for(var/obj/structure/shuttle/engine/propulsion/E in TB.area_offsite)
|
||||
TB.engines += E
|
||||
for(var/obj/machinery/computer/shuttle_control/tether_backup/comp in TB.area_offsite)
|
||||
TB.computer = comp
|
||||
break
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Antag Space "Proto Shuttle" Shuttle
|
||||
AM = new/datum/shuttle/multi_shuttle()
|
||||
AM.docking_controller_tag = "antag_space_shuttle"
|
||||
AM.start_location = "Home Base"
|
||||
AM.origin = locate(/area/shuttle/antag_space/base)
|
||||
AM.interim = locate(/area/shuttle/antag_space/transit)
|
||||
AM.destinations = list(
|
||||
"Nearby" = locate(/area/shuttle/antag_space/north),
|
||||
"Docks" = locate(/area/shuttle/antag_space/docks)
|
||||
)
|
||||
AM.destination_dock_targets = list("Home Base" = "antag_space_dock")
|
||||
AM.move_time = 60
|
||||
AM.warmup_time = 8
|
||||
shuttles["Proto"] = AM
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Antag Surface "Land Crawler" Shuttle
|
||||
AM = new/datum/shuttle/multi_shuttle()
|
||||
AM.docking_controller_tag = "antag_ground_shuttle"
|
||||
AM.start_location = "Home Base"
|
||||
AM.origin = locate(/area/shuttle/antag_ground/base)
|
||||
AM.interim = locate(/area/shuttle/antag_ground/transit)
|
||||
AM.destinations = list(
|
||||
"Solar Array" = locate(/area/shuttle/antag_ground/solars),
|
||||
"Mining Outpost" = locate(/area/shuttle/antag_ground/mining)
|
||||
)
|
||||
AM.destination_dock_targets = list("Home Base" = "antag_ground_dock")
|
||||
AM.move_time = 60
|
||||
AM.warmup_time = 8
|
||||
shuttles["Land Crawler"] = AM
|
||||
@@ -11,4 +11,24 @@
|
||||
/datum/category_item/autolathe/arms/speedloader_357_rubber
|
||||
name = "speedloader (.357 rubber)"
|
||||
path =/obj/item/ammo_magazine/a357/rubber
|
||||
hidden = 1
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/speedloader_44
|
||||
name = "speedloader (.44)"
|
||||
path =/obj/item/ammo_magazine/a44sl
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/speedloader_44_rubber
|
||||
name = "speedloader (.44 rubber)"
|
||||
path =/obj/item/ammo_magazine/a44sl/rubber
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/mag_44
|
||||
name = "magazine (.44)"
|
||||
path =/obj/item/ammo_magazine/a44
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/mag_44_rubber
|
||||
name = "magazine (.44 rubber)"
|
||||
path =/obj/item/ammo_magazine/a44/rubber
|
||||
hidden = 1
|
||||
|
||||
@@ -7,12 +7,12 @@ var/global/datum/repository/crew/crew_repository = new()
|
||||
cache_data = list()
|
||||
..()
|
||||
|
||||
/datum/repository/crew/proc/health_data(var/turf/T)
|
||||
/datum/repository/crew/proc/health_data(var/zLevel)
|
||||
var/list/crewmembers = list()
|
||||
if(!T)
|
||||
if(!zLevel)
|
||||
return crewmembers
|
||||
|
||||
var/z_level = "[T.z]"
|
||||
var/z_level = "[zLevel]"
|
||||
var/datum/cache_entry/cache_entry = cache_data[z_level]
|
||||
if(!cache_entry)
|
||||
cache_entry = new/datum/cache_entry
|
||||
@@ -24,7 +24,7 @@ var/global/datum/repository/crew/crew_repository = new()
|
||||
var/tracked = scan()
|
||||
for(var/obj/item/clothing/under/C in tracked)
|
||||
var/turf/pos = get_turf(C)
|
||||
if((C) && (C.has_sensor) && (pos) && (T && pos.z == T.z) && (C.sensor_mode != SUIT_SENSOR_OFF))
|
||||
if((C) && (C.has_sensor) && (pos) && (pos.z == zLevel) && (C.sensor_mode != SUIT_SENSOR_OFF))
|
||||
if(istype(C.loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C.loc
|
||||
if(H.w_uniform != C)
|
||||
@@ -51,6 +51,7 @@ var/global/datum/repository/crew/crew_repository = new()
|
||||
crewmemberData["area"] = sanitize(A.name)
|
||||
crewmemberData["x"] = pos.x
|
||||
crewmemberData["y"] = pos.y
|
||||
crewmemberData["z"] = pos.z
|
||||
|
||||
crewmembers[++crewmembers.len] = crewmemberData
|
||||
|
||||
|
||||
@@ -1443,6 +1443,7 @@ area/space/atmosalert()
|
||||
name = "\improper Library"
|
||||
icon_state = "library"
|
||||
sound_env = LARGE_SOFTFLOOR
|
||||
lightswitch = 0 // VOREStation Edit - We like dark libraries
|
||||
|
||||
/area/library_conference_room
|
||||
name = "\improper Library Conference Room"
|
||||
|
||||
@@ -145,49 +145,89 @@
|
||||
|
||||
/area/houseboat/bridge
|
||||
name = "Houseboat - Bridge"
|
||||
icon_state = "red"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/neck
|
||||
name = "Houseboat - Neck"
|
||||
icon_state = "blue"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/cap_room
|
||||
name = "Houseboat - Captain's Room"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/guest_room
|
||||
name = "Houseboat - Guest Room"
|
||||
icon_state = "blue"
|
||||
/area/houseboat/office
|
||||
name = "Houseboat - Office"
|
||||
icon_state = "red2"
|
||||
/area/houseboat/teleporter
|
||||
name = "Houseboat - Teleporter"
|
||||
icon_state = "blue"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/robotics
|
||||
name = "Houseboat - Robotics"
|
||||
icon_state = "red2"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/cargo
|
||||
name = "Houseboat - Cargo"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/medical
|
||||
name = "Houseboat - Medical"
|
||||
icon_state = "red"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/engineering
|
||||
name = "Houseboat - Engineering"
|
||||
icon_state = "red2"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/shower
|
||||
name = "Houseboat - Shower"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/toilet
|
||||
name = "Houseboat - Toilet"
|
||||
icon_state = "red2"
|
||||
/area/houseboat/docking
|
||||
name = "Houseboat - Docking"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/airlock
|
||||
name = "Houseboat - Airlock"
|
||||
icon_state = "red"
|
||||
/area/houseboat/common_area
|
||||
name = "Houseboat - Common Area"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/dining_area
|
||||
name = "Houseboat - Dining Area"
|
||||
icon_state = "red"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck_area
|
||||
name = "Houseboat - Holodeck"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/lockers
|
||||
name = "Houseboat - Locker Room"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/fountain
|
||||
name = "Houseboat - Fountain"
|
||||
icon_state = "blue2"
|
||||
|
||||
/area/houseboat/holodeck/off
|
||||
name = "Houseboat Holo - Off"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/beach
|
||||
name = "Houseboat Holo - Beach"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/snow
|
||||
name = "Houseboat Holo - Snow"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/desert
|
||||
name = "Houseboat Holo - Desert"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/picnic
|
||||
name = "Houseboat Holo - Picnic"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/thunderdome
|
||||
name = "Houseboat Holo - Thunderdome"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/basketball
|
||||
name = "Houseboat Holo - Basketball"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/gaming
|
||||
name = "Houseboat Holo - Gaming Table"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/space
|
||||
name = "Houseboat Holo - Space"
|
||||
icon_state = "blue2"
|
||||
/area/houseboat/holodeck/bunking
|
||||
name = "Houseboat Holo - Bunking"
|
||||
icon_state = "blue2"
|
||||
|
||||
|
||||
// Tether Map has this shuttle
|
||||
/area/shuttle/tether/surface
|
||||
name = "Tether Shuttle Landed"
|
||||
icon_state = "shuttle"
|
||||
base_turf = /turf/simulated/floor/reinforced
|
||||
|
||||
/area/shuttle/tether/station
|
||||
name = "Tether Shuttle Dock"
|
||||
icon_state = "shuttle2"
|
||||
|
||||
/area/shuttle/tether/transit
|
||||
name = "Tether Shuttle Transit"
|
||||
icon_state = "shuttle2"
|
||||
|
||||
+13
-1
@@ -68,8 +68,20 @@
|
||||
/area/proc/firedoors_update()
|
||||
if(fire || party || atmosalm)
|
||||
firedoors_close()
|
||||
// VOREStation Edit - Make the lights colored!
|
||||
if(fire)
|
||||
for(var/obj/machinery/light/L in src)
|
||||
L.set_alert_fire()
|
||||
else if(atmosalm)
|
||||
for(var/obj/machinery/light/L in src)
|
||||
L.set_alert_atmos()
|
||||
// VOREStation Edit End
|
||||
else
|
||||
firedoors_open()
|
||||
// VOREStation Edit - Put the lights back!
|
||||
for(var/obj/machinery/light/L in src)
|
||||
L.reset_alert()
|
||||
// VOREStation Edit End
|
||||
|
||||
// Close all firedoors in the area
|
||||
/area/proc/firedoors_close()
|
||||
@@ -137,7 +149,7 @@
|
||||
/area/proc/updateicon()
|
||||
if ((fire || eject || party) && (!requires_power||power_environ) && !istype(src, /area/space))//If it doesn't require power, can still activate this proc.
|
||||
if(fire && !eject && !party)
|
||||
icon_state = "blue"
|
||||
icon_state = null // Let lights take care of it
|
||||
/*else if(atmosalm && !fire && !eject && !party)
|
||||
icon_state = "bluenew"*/
|
||||
else if(!fire && eject && !party)
|
||||
|
||||
@@ -10,8 +10,6 @@ var/global/datum/controller/gameticker/ticker
|
||||
var/event_time = null
|
||||
var/event = 0
|
||||
|
||||
var/login_music // music played in pregame lobby
|
||||
|
||||
var/list/datum/mind/minds = list()//The people in the game. Used for objective tracking.
|
||||
|
||||
var/Bible_icon_state // icon_state the chaplain has chosen for his bible
|
||||
@@ -34,15 +32,6 @@ var/global/datum/controller/gameticker/ticker
|
||||
var/round_end_announced = 0 // Spam Prevention. Announce round end only once.
|
||||
|
||||
/datum/controller/gameticker/proc/pregame()
|
||||
login_music = pick(\
|
||||
/*'sound/music/halloween/skeletons.ogg',\
|
||||
'sound/music/halloween/halloween.ogg',\
|
||||
'sound/music/halloween/ghosts.ogg'*/
|
||||
'sound/music/space.ogg',\
|
||||
'sound/music/traitor.ogg',\
|
||||
'sound/music/title2.ogg',\
|
||||
'sound/music/clouds.s3m',\
|
||||
'sound/music/space_oddity.ogg') //Ground Control to Major Tom, this song is cool, what's going on?
|
||||
do
|
||||
pregame_timeleft = 180
|
||||
world << "<B><FONT color='blue'>Welcome to the pre-game lobby!</FONT></B>"
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
economic_modifier = 10
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
access_research, access_engine, access_mining, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)//VOREStation Edit
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
|
||||
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
|
||||
access_research, access_engine, access_mining, access_construction, access_mailsorting,
|
||||
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)//VOREStation Edit
|
||||
alt_titles = list("Commander", "Chief of Security")
|
||||
minimum_character_age = 25
|
||||
minimal_player_age = 14
|
||||
|
||||
@@ -626,7 +626,7 @@ var/global/datum/controller/occupations/job_master
|
||||
else
|
||||
spawnpos = spawntypes[H.client.prefs.spawnpoint]
|
||||
|
||||
if(spawnpos && istype(spawnpos))
|
||||
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len) // VOREStation Edit - Fix runtime if no landmarks exist for a spawntype
|
||||
if(spawnpos.check_job_spawning(rank))
|
||||
H.forceMove(pick(spawnpos.turfs))
|
||||
. = spawnpos.msg
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
/obj/machinery/sleep_console
|
||||
name = "Sleeper Console"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icon.
|
||||
icon_state = "sleeperconsole"
|
||||
var/obj/machinery/sleeper/sleeper
|
||||
anchored = 1 //About time someone fixed this.
|
||||
density = 0
|
||||
density = 1 //VOREStation Edit - Big console
|
||||
dir = 8
|
||||
use_power = 1
|
||||
idle_power_usage = 40
|
||||
@@ -62,7 +62,7 @@
|
||||
/obj/machinery/sleeper
|
||||
name = "sleeper"
|
||||
desc = "A fancy bed with built-in injectors, a dialysis machine, and a limited health scanner."
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - Better icons
|
||||
icon_state = "sleeper_0"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
return
|
||||
M.forceMove(src)
|
||||
occupant = M
|
||||
icon_state = "body_scanner_1"
|
||||
update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
|
||||
add_fingerprint(user)
|
||||
qdel(G)
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
|
||||
O.forceMove(src)
|
||||
occupant = O
|
||||
icon_state = "body_scanner_1"
|
||||
update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/machinery/bodyscanner/relaymove(mob/user as mob)
|
||||
@@ -121,7 +121,7 @@
|
||||
occupant.client.perspective = MOB_PERSPECTIVE
|
||||
occupant.loc = src.loc
|
||||
occupant = null
|
||||
icon_state = "body_scanner_0"
|
||||
update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
|
||||
return
|
||||
|
||||
/obj/machinery/bodyscanner/ex_act(severity)
|
||||
@@ -194,6 +194,7 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/body_scanconsole/power_change()
|
||||
/* VOREStation Removal
|
||||
if(stat & BROKEN)
|
||||
icon_state = "body_scannerconsole-p"
|
||||
else if(powered() && !panel_open)
|
||||
@@ -203,6 +204,8 @@
|
||||
spawn(rand(0, 15))
|
||||
icon_state = "body_scannerconsole-p"
|
||||
stat |= NOPOWER
|
||||
*/
|
||||
update_icon() //icon_state = "body_scanner_1" //VOREStation Edit - Health display for consoles with light and such.
|
||||
|
||||
/obj/machinery/body_scanconsole/ex_act(severity)
|
||||
switch(severity)
|
||||
@@ -262,6 +265,7 @@
|
||||
|
||||
var/occupantData[0]
|
||||
if(scanner.occupant && ishuman(scanner.occupant))
|
||||
update_icon() //VOREStation Edit - Health display for consoles with light and such.
|
||||
var/mob/living/carbon/human/H = scanner.occupant
|
||||
occupantData["name"] = H.name
|
||||
occupantData["stat"] = H.stat
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
/obj/machinery/bodyscanner
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi'
|
||||
icon_state = "scanner_open"
|
||||
|
||||
/obj/machinery/body_scanconsole
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi'
|
||||
icon_state = "scanner_terminal_off"
|
||||
density = 1
|
||||
|
||||
/obj/machinery/bodyscanner/proc/get_occupant_data_vr(list/incoming,mob/living/carbon/human/H)
|
||||
var/humanprey = 0
|
||||
var/livingprey = 0
|
||||
@@ -19,3 +28,54 @@
|
||||
incoming["weight"] = H.weight
|
||||
|
||||
return incoming
|
||||
|
||||
/obj/machinery/bodyscanner/update_icon()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
icon_state = "scanner_off"
|
||||
set_light(0)
|
||||
else
|
||||
var/h_ratio
|
||||
if(occupant)
|
||||
h_ratio = occupant.health / occupant.maxHealth
|
||||
switch(h_ratio)
|
||||
if(1.000)
|
||||
icon_state = "scanner_green"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_LIME)
|
||||
if(0.001 to 0.999)
|
||||
icon_state = "scanner_yellow"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_YELLOW)
|
||||
if(-0.999 to 0.000)
|
||||
icon_state = "scanner_red"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_RED)
|
||||
else
|
||||
icon_state = "scanner_death"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_RED)
|
||||
else
|
||||
icon_state = "scanner_open"
|
||||
set_light(0)
|
||||
if(console)
|
||||
console.update_icon(h_ratio)
|
||||
|
||||
/obj/machinery/body_scanconsole/update_icon(var/h_ratio)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
icon_state = "scanner_terminal_off"
|
||||
set_light(0)
|
||||
else
|
||||
if(scanner)
|
||||
if(h_ratio)
|
||||
switch(h_ratio)
|
||||
if(1.000)
|
||||
icon_state = "scanner_terminal_green"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_LIME)
|
||||
if(-0.999 to 0.000)
|
||||
icon_state = "scanner_terminal_red"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_RED)
|
||||
else
|
||||
icon_state = "scanner_terminal_dead"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_RED)
|
||||
else
|
||||
icon_state = "scanner_terminal_blue"
|
||||
set_light(l_range = 1.5, l_power = 2, l_color = COLOR_BLUE)
|
||||
else
|
||||
icon_state = "scanner_terminal_off"
|
||||
set_light(0)
|
||||
|
||||
@@ -262,6 +262,7 @@
|
||||
|
||||
if(environment_pressure <= pressure_levels[1]) //low pressures
|
||||
if(!(mode == AALARM_MODE_PANIC || mode == AALARM_MODE_CYCLE))
|
||||
playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -972,7 +973,7 @@ FIRE ALARM
|
||||
for(var/obj/machinery/firealarm/FA in area)
|
||||
fire_alarm.triggerAlarm(loc, FA, duration)
|
||||
update_icon()
|
||||
//playsound(src.loc, 'sound/ambience/signal.ogg', 75, 0)
|
||||
playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4)
|
||||
return
|
||||
|
||||
/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
|
||||
|
||||
@@ -6,177 +6,155 @@
|
||||
light_color = "#e6ffff"
|
||||
circuit = /obj/item/weapon/circuitboard/area_atmos
|
||||
|
||||
var/list/connectedscrubbers = new()
|
||||
var/list/connectedscrubbers = list()
|
||||
var/status = ""
|
||||
|
||||
var/range = 25
|
||||
|
||||
//Simple variable to prevent me from doing attack_hand in both this and the child computer
|
||||
var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters."
|
||||
var/zone = "This computer is working on a wireless range, the range is currently limited to "
|
||||
|
||||
New()
|
||||
..()
|
||||
//So the scrubbers have time to spawn
|
||||
spawn(10)
|
||||
scanscrubbers()
|
||||
/obj/machinery/computer/area_atmos/New()
|
||||
..()
|
||||
//So the scrubbers have time to spawn
|
||||
desc += "[range] meters."
|
||||
scanscrubbers()
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
/obj/machinery/computer/area_atmos/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
attack_hand(var/mob/user as mob)
|
||||
if(..(user))
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
var/dat = {"
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
a.green:link
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:visited
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:hover
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:active
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.red:link
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:visited
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:hover
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:active
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Area Air Control</h1></center>
|
||||
<font color="red">[status]</font><br>
|
||||
<a href="?src=\ref[src];scan=1">Scan</a>
|
||||
<table border="1" width="90%">"}
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers)
|
||||
dat += {"
|
||||
<tr>
|
||||
<td>
|
||||
[scrubber.name]<br>
|
||||
Pressure: [round(scrubber.air_contents.return_pressure(), 0.01)] kPa<br>
|
||||
Flow Rate: [round(scrubber.last_flow_rate,0.1)] L/s<br>
|
||||
</td>
|
||||
<td width="150">
|
||||
<a class="green" href="?src=\ref[src];scrub=\ref[scrubber];toggle=1">Turn On</a>
|
||||
<a class="red" href="?src=\ref[src];scrub=\ref[scrubber];toggle=0">Turn Off</a><br>
|
||||
Load: [round(scrubber.last_power_draw)] W
|
||||
</td>
|
||||
</tr>"}
|
||||
/obj/machinery/computer/area_atmos/attack_hand(var/mob/user as mob)
|
||||
if(..(user))
|
||||
return
|
||||
src.add_fingerprint(usr)
|
||||
var/dat = {"
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
a.green:link
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:visited
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:hover
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.green:active
|
||||
{
|
||||
color:#00CC00;
|
||||
}
|
||||
a.red:link
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:visited
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:hover
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
a.red:active
|
||||
{
|
||||
color:#FF0000;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<center><h1>Area Air Control</h1></center>
|
||||
<font color="red">[status]</font><br>
|
||||
<a href="?src=\ref[src];scan=1">Scan</a>
|
||||
<table border="1" width="90%">"}
|
||||
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers)
|
||||
dat += {"
|
||||
</table><br>
|
||||
<i>[zone]</i>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse("[dat]", "window=miningshuttle;size=400x400")
|
||||
status = ""
|
||||
<tr>
|
||||
<td>
|
||||
[scrubber.name]<br>
|
||||
Pressure: [round(scrubber.air_contents.return_pressure(), 0.01)] kPa<br>
|
||||
Flow Rate: [round(scrubber.last_flow_rate,0.1)] L/s<br>
|
||||
</td>
|
||||
<td width="150">
|
||||
<a class="green" href="?src=\ref[src];scrub=\ref[scrubber];toggle=1">Turn On</a>
|
||||
<a class="red" href="?src=\ref[src];scrub=\ref[scrubber];toggle=0">Turn Off</a><br>
|
||||
Load: [round(scrubber.last_power_draw)] W
|
||||
</td>
|
||||
</tr>"}
|
||||
|
||||
Topic(href, href_list)
|
||||
if(..())
|
||||
dat += {"
|
||||
</table><br>
|
||||
<i>[zone]</i>
|
||||
</body>
|
||||
</html>"}
|
||||
user << browse("[dat]", "window=miningshuttle;size=400x400")
|
||||
status = ""
|
||||
|
||||
/obj/machinery/computer/area_atmos/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
if(href_list["scan"])
|
||||
scanscrubbers()
|
||||
|
||||
else if(href_list["toggle"])
|
||||
var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"])
|
||||
|
||||
if(!validscrubber(scrubber))
|
||||
spawn(20)
|
||||
status = "ERROR: Couldn't connect to scrubber! (timeout)"
|
||||
connectedscrubbers -= scrubber
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
scrubber.on = text2num(href_list["toggle"])
|
||||
scrubber.update_icon()
|
||||
|
||||
if(href_list["scan"])
|
||||
scanscrubbers()
|
||||
else if(href_list["toggle"])
|
||||
var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"])
|
||||
/obj/machinery/computer/area_atmos/proc/scanscrubbers()
|
||||
connectedscrubbers.Cut()
|
||||
|
||||
if(!validscrubber(scrubber))
|
||||
spawn(20)
|
||||
status = "ERROR: Couldn't connect to scrubber! (timeout)"
|
||||
connectedscrubbers -= scrubber
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
var/found = 0
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in range(range, src.loc))
|
||||
found = 1
|
||||
connectedscrubbers += scrubber
|
||||
|
||||
scrubber.on = text2num(href_list["toggle"])
|
||||
scrubber.update_icon()
|
||||
if(!found)
|
||||
status = "ERROR: No scrubber found!"
|
||||
|
||||
proc/validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj )
|
||||
if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z)
|
||||
return 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/area_atmos/proc/validscrubber(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber)
|
||||
if((get_dist(src,scrubber) <= range) && src.z == scrubber.z)
|
||||
return 1
|
||||
|
||||
proc/scanscrubbers()
|
||||
connectedscrubbers = new()
|
||||
|
||||
var/found = 0
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in range(range, src.loc))
|
||||
if(istype(scrubber))
|
||||
found = 1
|
||||
connectedscrubbers += scrubber
|
||||
|
||||
if(!found)
|
||||
status = "ERROR: No scrubber found!"
|
||||
|
||||
src.updateUsrDialog()
|
||||
|
||||
return 0
|
||||
|
||||
// The one that only works in the same map area
|
||||
/obj/machinery/computer/area_atmos/area
|
||||
zone = "This computer is working in a wired network limited to this area."
|
||||
|
||||
validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj )
|
||||
if(!isobj(scrubber))
|
||||
return 0
|
||||
/obj/machinery/computer/area_atmos/area/scanscrubbers()
|
||||
connectedscrubbers.Cut()
|
||||
|
||||
/*
|
||||
wow this is stupid, someone help me
|
||||
*/
|
||||
var/turf/T_src = get_turf(src)
|
||||
if(!T_src.loc) return 0
|
||||
var/area/A_src = T_src.loc
|
||||
var/found = 0
|
||||
var/area/A = get_area(src)
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in A)
|
||||
connectedscrubbers += scrubber
|
||||
found = 1
|
||||
|
||||
var/turf/T_scrub = get_turf(scrubber)
|
||||
if(!T_scrub.loc) return 0
|
||||
var/area/A_scrub = T_scrub.loc
|
||||
if(!found)
|
||||
status = "ERROR: No scrubber found!"
|
||||
|
||||
if(A_scrub != A_src)
|
||||
return 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/area_atmos/area/validscrubber(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber)
|
||||
if(get_area(scrubber) == get_area(src))
|
||||
return 1
|
||||
|
||||
scanscrubbers()
|
||||
connectedscrubbers = new()
|
||||
|
||||
var/found = 0
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T.loc) return
|
||||
var/area/A = T.loc
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in world )
|
||||
var/turf/T2 = get_turf(scrubber)
|
||||
if(T2 && T2.loc)
|
||||
var/area/A2 = T2.loc
|
||||
if(istype(A2) && A2 == A)
|
||||
connectedscrubbers += scrubber
|
||||
found = 1
|
||||
|
||||
|
||||
if(!found)
|
||||
status = "ERROR: No scrubber found!"
|
||||
|
||||
src.updateUsrDialog()
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// The one that only works in the same map area
|
||||
/obj/machinery/portable_atmospherics/powered/scrubber/huge/var/scrub_id = "generic"
|
||||
|
||||
/obj/machinery/computer/area_atmos/tag
|
||||
name = "Heavy Scrubber Control"
|
||||
zone = "This computer is operating industrial scrubbers nearby."
|
||||
var/scrub_id = "generic"
|
||||
var/last_scan = 0
|
||||
|
||||
/obj/machinery/computer/area_atmos/tag/scanscrubbers()
|
||||
if(last_scan && world.time - last_scan < 20 SECONDS)
|
||||
return 0
|
||||
else
|
||||
last_scan = world.time
|
||||
|
||||
connectedscrubbers.Cut()
|
||||
|
||||
for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in world)
|
||||
if(scrubber.scrub_id == src.scrub_id)
|
||||
connectedscrubbers += scrubber
|
||||
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/computer/area_atmos/tag/validscrubber(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber)
|
||||
if(scrubber.scrub_id == src.scrub_id)
|
||||
return 1
|
||||
|
||||
return 0
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/meter
|
||||
name = "meter"
|
||||
desc = "It measures something."
|
||||
icon = 'icons/obj/meter.dmi'
|
||||
icon = 'icons/obj/meter_vr.dmi'
|
||||
icon_state = "meterX"
|
||||
var/obj/machinery/atmospherics/pipe/target = null
|
||||
anchored = 1.0
|
||||
|
||||
@@ -144,14 +144,16 @@
|
||||
//Huge scrubber
|
||||
/obj/machinery/portable_atmospherics/powered/scrubber/huge
|
||||
name = "Huge Air Scrubber"
|
||||
icon = 'icons/obj/atmos_vr.dmi' //VOREStation Edit - New Sprite
|
||||
icon_state = "scrubber:0"
|
||||
anchored = 1
|
||||
volume = 50000
|
||||
volume_rate = 5000
|
||||
volume = 500000
|
||||
volume_rate = 7000
|
||||
|
||||
use_power = 1
|
||||
idle_power_usage = 500 //internal circuitry, friction losses and stuff
|
||||
active_power_usage = 100000 //100 kW ~ 135 HP
|
||||
idle_power_usage = 50 //internal circuitry, friction losses and stuff
|
||||
active_power_usage = 1000 // Blowers running
|
||||
power_rating = 100000 //100 kW ~ 135 HP
|
||||
|
||||
var/global/gid = 1
|
||||
var/id = 0
|
||||
@@ -183,12 +185,17 @@
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/powered/scrubber/huge/process()
|
||||
if(!on || (stat & (NOPOWER|BROKEN)))
|
||||
update_use_power(0)
|
||||
if(!anchored || (stat & (NOPOWER|BROKEN)))
|
||||
on = 0
|
||||
last_flow_rate = 0
|
||||
last_power_draw = 0
|
||||
return 0
|
||||
|
||||
update_icon()
|
||||
var/new_use_power = 1 + on
|
||||
if(new_use_power != use_power)
|
||||
update_use_power(new_use_power)
|
||||
if(!on)
|
||||
return
|
||||
|
||||
var/power_draw = -1
|
||||
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/machinery/autolathe
|
||||
name = "autolathe"
|
||||
desc = "It produces items using metal and glass."
|
||||
icon = 'icons/obj/stationobjs_vr.dmi'
|
||||
icon_state = "autolathe"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -14,4 +14,10 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/button/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
return attack_hand(user)
|
||||
return attack_hand(user)
|
||||
|
||||
// VOREStation Edit Begin
|
||||
/obj/machinery/button/attack_hand(obj/item/weapon/W, mob/user as mob)
|
||||
if(..()) return 1
|
||||
playsound(loc, 'sound/machines/button.ogg', 100, 1)
|
||||
// VOREStation Edit End
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/camera
|
||||
name = "security camera"
|
||||
desc = "It's used to monitor rooms."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons
|
||||
icon_state = "camera"
|
||||
use_power = 2
|
||||
idle_power_usage = 5
|
||||
@@ -56,7 +56,12 @@
|
||||
error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]")
|
||||
ASSERT(src.network)
|
||||
ASSERT(src.network.len > 0)
|
||||
// VOREStation Edit Start - Make mapping with cameras easier
|
||||
if(!c_tag)
|
||||
var/area/A = get_area(src)
|
||||
c_tag = "[A ? A : "Unknown"] #[rand(111,999)]"
|
||||
..()
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
deactivate(null, 0) //kick anyone viewing out
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/camera_assembly
|
||||
name = "camera assembly"
|
||||
desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - New Icons
|
||||
icon_state = "cameracase"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
anchored = 0
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
|
||||
/obj/machinery/computer/operating/New()
|
||||
..()
|
||||
for(dir in list(NORTH,EAST,SOUTH,WEST))
|
||||
table = locate(/obj/machinery/optable, get_step(src, dir))
|
||||
for(var/direction in list(NORTH,EAST,SOUTH,WEST)) //VOREStation Edit - Stop turning
|
||||
table = locate(/obj/machinery/optable, get_step(src, direction))
|
||||
if (table)
|
||||
table.computer = src
|
||||
break
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
name = "\improper RCON console"
|
||||
desc = "Console used to remotely control machinery on the station."
|
||||
icon_keyboard = "power_key"
|
||||
icon_screen = "power:0"
|
||||
icon_screen = "ai_fixer" //VOREStation Edit
|
||||
light_color = "#a97faa"
|
||||
circuit = /obj/item/weapon/circuitboard/rcon_console
|
||||
req_one_access = list(access_engine)
|
||||
@@ -40,4 +40,4 @@
|
||||
/obj/machinery/computer/rcon/update_icon()
|
||||
..()
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
overlays += image('icons/obj/computer.dmi', "ai-fixer-empty", overlay_layer)
|
||||
overlays += image(icon, "ai-fixer-empty", overlay_layer) //VOREStation Edit
|
||||
@@ -35,7 +35,6 @@
|
||||
return viewflag
|
||||
|
||||
/obj/machinery/computer/security/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
|
||||
if(src.z > 6) return
|
||||
if(stat & (NOPOWER|BROKEN)) return
|
||||
if(user.stat) return
|
||||
|
||||
@@ -48,6 +47,7 @@
|
||||
data["cameras"] = camera_repository.cameras_in_network(current_network)
|
||||
if(current_camera)
|
||||
switch_to_camera(user, current_camera)
|
||||
data["station_levels"] = using_map.station_levels
|
||||
|
||||
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
||||
if (!ui)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
/obj/machinery/computer/communications/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if (src.z > 1)
|
||||
if (using_map && !(src.z in using_map.station_levels)) //VOREStation Edit
|
||||
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
||||
return
|
||||
usr.set_machine(src)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/computer
|
||||
name = "computer"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon = 'icons/obj/computer_vr.dmi'
|
||||
icon_state = "computer"
|
||||
density = 1
|
||||
anchored = 1.0
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
//Various overrides to make Eris sprites look nicer
|
||||
/obj/machinery/computer/power_monitor
|
||||
icon_keyboard = "power_key"
|
||||
icon_screen = "power_monitor"
|
||||
|
||||
/obj/machinery/computer/power_monitor/update_icon()
|
||||
if(stat & BROKEN)
|
||||
icon_screen = "broken"
|
||||
else if(alerting)
|
||||
icon_screen = "power_monitor_warn"
|
||||
else
|
||||
icon_screen = "power_monitor"
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/rcon
|
||||
icon_keyboard = "power_key"
|
||||
icon_screen = "ai-fixer"
|
||||
@@ -11,7 +11,7 @@
|
||||
/obj/machinery/computer/cryopod
|
||||
name = "cryogenic oversight console"
|
||||
desc = "An interface between crew and the cryogenic storage oversight systems."
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "cellconsole"
|
||||
circuit = /obj/item/weapon/circuitboard/cryopodcontrol
|
||||
density = 0
|
||||
@@ -191,7 +191,7 @@
|
||||
|
||||
name = "cryogenic feed"
|
||||
desc = "A bewildering tangle of machinery and pipes."
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "cryo_rear"
|
||||
anchored = 1
|
||||
dir = WEST
|
||||
@@ -200,14 +200,14 @@
|
||||
/obj/machinery/cryopod
|
||||
name = "cryogenic freezer"
|
||||
desc = "A man-sized pod for entering suspended animation."
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "body_scanner_0"
|
||||
icon = 'icons/obj/Cryogenic2_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "cryopod_0" //VOREStation Edit - New Icon
|
||||
density = 1
|
||||
anchored = 1
|
||||
dir = WEST
|
||||
|
||||
var/base_icon_state = "body_scanner_0"
|
||||
var/occupied_icon_state = "body_scanner_1"
|
||||
var/base_icon_state = "cryopod_0" //VOREStation Edit - New Icon
|
||||
var/occupied_icon_state = "cryopod_1" //VOREStation Edit - New Icon
|
||||
var/on_store_message = "has entered long-term storage."
|
||||
var/on_store_name = "Cryogenic Oversight"
|
||||
var/on_enter_visible_message = "starts climbing into the"
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
#define SAFE 0x10
|
||||
|
||||
/obj/machinery/button/remote/airlock
|
||||
icon = 'icons/obj/stationobjs_vr.dmi' // VOREStation Edit
|
||||
name = "remote door-control"
|
||||
desc = "It controls doors, remotely."
|
||||
|
||||
@@ -131,6 +132,7 @@
|
||||
Blast door remote control
|
||||
*/
|
||||
/obj/machinery/button/remote/blast_door
|
||||
icon = 'icons/obj/stationobjs_vr.dmi'
|
||||
name = "remote blast door-control"
|
||||
desc = "It controls blast doors, remotely."
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
//VOREStation Edit - Redone a lot of airlock things:
|
||||
/*
|
||||
- Specific department maintenance doors
|
||||
- Named doors properly according to type
|
||||
- Gave them default access levels with the access constants
|
||||
- Improper'd all of the names in the new()
|
||||
*/
|
||||
|
||||
/obj/machinery/door/airlock
|
||||
name = "Airlock"
|
||||
icon = 'icons/obj/doors/Doorint.dmi'
|
||||
@@ -63,41 +71,78 @@
|
||||
return get_material_by_name(DEFAULT_WALL_MATERIAL)
|
||||
|
||||
/obj/machinery/door/airlock/command
|
||||
name = "Airlock"
|
||||
name = "Command Airlock"
|
||||
icon = 'icons/obj/doors/Doorcom.dmi'
|
||||
req_one_access = list(access_heads)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_com
|
||||
|
||||
/obj/machinery/door/airlock/security
|
||||
name = "Airlock"
|
||||
name = "Security Airlock"
|
||||
icon = 'icons/obj/doors/Doorsec.dmi'
|
||||
req_one_access = list(access_security)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_sec
|
||||
|
||||
/obj/machinery/door/airlock/engineering
|
||||
name = "Airlock"
|
||||
name = "Engineering Airlock"
|
||||
icon = 'icons/obj/doors/Dooreng.dmi'
|
||||
req_one_access = list(access_engine)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_eng
|
||||
|
||||
/obj/machinery/door/airlock/engineeringatmos
|
||||
name = "Airlock"
|
||||
name = "Atmospherics Airlock"
|
||||
icon = 'icons/obj/doors/Doorengatmos.dmi'
|
||||
req_one_access = list(access_atmospherics)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_eat
|
||||
|
||||
/obj/machinery/door/airlock/medical
|
||||
name = "Airlock"
|
||||
name = "Medical Airlock"
|
||||
icon = 'icons/obj/doors/Doormed.dmi'
|
||||
req_one_access = list(access_medical)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_med
|
||||
|
||||
/obj/machinery/door/airlock/maintenance
|
||||
name = "Maintenance Access"
|
||||
icon = 'icons/obj/doors/Doormaint.dmi'
|
||||
req_one_access = list(access_maint_tunnels)
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_mai
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/cargo
|
||||
icon = 'icons/obj/doors/Doormaint_cargo.dmi'
|
||||
req_one_access = list(access_cargo)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/command
|
||||
icon = 'icons/obj/doors/Doormaint_command.dmi'
|
||||
req_one_access = list(access_heads)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/common
|
||||
icon = 'icons/obj/doors/Doormaint_common.dmi'
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/engi
|
||||
icon = 'icons/obj/doors/Doormaint_engi.dmi'
|
||||
req_one_access = list(access_engine)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/int
|
||||
icon = 'icons/obj/doors/Doormaint_int.dmi'
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/medical
|
||||
icon = 'icons/obj/doors/Doormaint_med.dmi'
|
||||
req_one_access = list(access_medical)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/rnd
|
||||
icon = 'icons/obj/doors/Doormaint_rnd.dmi'
|
||||
req_one_access = list(access_research)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance/sec
|
||||
icon = 'icons/obj/doors/Doormaint_sec.dmi'
|
||||
req_one_access = list(access_security)
|
||||
|
||||
/obj/machinery/door/airlock/external
|
||||
name = "External Airlock"
|
||||
icon = 'icons/obj/doors/Doorext.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_ext
|
||||
opacity = 0
|
||||
glass = 1
|
||||
req_one_access = list(access_external_airlocks)
|
||||
|
||||
/obj/machinery/door/airlock/glass
|
||||
name = "Glass Airlock"
|
||||
@@ -110,9 +155,10 @@
|
||||
glass = 1
|
||||
|
||||
/obj/machinery/door/airlock/centcom
|
||||
name = "Airlock"
|
||||
name = "Centcom Airlock"
|
||||
icon = 'icons/obj/doors/Doorele.dmi'
|
||||
opacity = 0
|
||||
//opacity = 0 //VOREStation Edit - Why is this like this??
|
||||
req_one_access = list(access_cent_general)
|
||||
|
||||
/obj/machinery/door/airlock/vault
|
||||
name = "Vault"
|
||||
@@ -121,6 +167,7 @@
|
||||
opacity = 1
|
||||
secured_wires = 1
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity //Until somebody makes better sprites.
|
||||
req_one_access = list(access_heads_vault)
|
||||
|
||||
/obj/machinery/door/airlock/vault/bolted
|
||||
icon_state = "door_locked"
|
||||
@@ -138,6 +185,7 @@
|
||||
explosion_resistance = 20
|
||||
opacity = 1
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_hatch
|
||||
req_one_access = list(access_maint_tunnels)
|
||||
|
||||
/obj/machinery/door/airlock/maintenance_hatch
|
||||
name = "Maintenance Hatch"
|
||||
@@ -145,9 +193,10 @@
|
||||
explosion_resistance = 20
|
||||
opacity = 1
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_mhatch
|
||||
req_one_access = list(access_maint_tunnels)
|
||||
|
||||
/obj/machinery/door/airlock/glass_command
|
||||
name = "Maintenance Hatch"
|
||||
name = "Command Airlock"
|
||||
icon = 'icons/obj/doors/Doorcomglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -155,9 +204,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_com
|
||||
glass = 1
|
||||
req_one_access = list(access_heads)
|
||||
|
||||
/obj/machinery/door/airlock/glass_engineering
|
||||
name = "Maintenance Hatch"
|
||||
name = "Engineering Airlock"
|
||||
icon = 'icons/obj/doors/Doorengglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -165,9 +215,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_eng
|
||||
glass = 1
|
||||
req_one_access = list(access_engine)
|
||||
|
||||
/obj/machinery/door/airlock/glass_engineeringatmos
|
||||
name = "Maintenance Hatch"
|
||||
name = "Atmospherics Airlock"
|
||||
icon = 'icons/obj/doors/Doorengatmoglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -175,9 +226,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_eat
|
||||
glass = 1
|
||||
req_one_access = list(access_atmospherics)
|
||||
|
||||
/obj/machinery/door/airlock/glass_security
|
||||
name = "Maintenance Hatch"
|
||||
name = "Security Airlock"
|
||||
icon = 'icons/obj/doors/Doorsecglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -185,9 +237,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_sec
|
||||
glass = 1
|
||||
req_one_access = list(access_security)
|
||||
|
||||
/obj/machinery/door/airlock/glass_medical
|
||||
name = "Maintenance Hatch"
|
||||
name = "Medical Airlock"
|
||||
icon = 'icons/obj/doors/Doormedglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -195,24 +248,27 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_med
|
||||
glass = 1
|
||||
req_one_access = list(access_medical)
|
||||
|
||||
/obj/machinery/door/airlock/mining
|
||||
name = "Mining Airlock"
|
||||
icon = 'icons/obj/doors/Doormining.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_min
|
||||
req_one_access = list(access_mining)
|
||||
|
||||
/obj/machinery/door/airlock/atmos
|
||||
name = "Atmospherics Airlock"
|
||||
icon = 'icons/obj/doors/Dooratmo.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_atmo
|
||||
req_one_access = list(access_atmospherics)
|
||||
|
||||
/obj/machinery/door/airlock/research
|
||||
name = "Airlock"
|
||||
name = "Research Airlock"
|
||||
icon = 'icons/obj/doors/Doorresearch.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_research
|
||||
|
||||
/obj/machinery/door/airlock/glass_research
|
||||
name = "Maintenance Hatch"
|
||||
name = "Research Airlock"
|
||||
icon = 'icons/obj/doors/Doorresearchglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -220,10 +276,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_research
|
||||
glass = 1
|
||||
heat_proof = 1
|
||||
req_one_access = list(access_research)
|
||||
|
||||
/obj/machinery/door/airlock/glass_mining
|
||||
name = "Maintenance Hatch"
|
||||
name = "Mining Airlock"
|
||||
icon = 'icons/obj/doors/Doorminingglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -231,9 +287,10 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_min
|
||||
glass = 1
|
||||
req_one_access = list(access_mining)
|
||||
|
||||
/obj/machinery/door/airlock/glass_atmos
|
||||
name = "Maintenance Hatch"
|
||||
name = "Atmospherics Airlock"
|
||||
icon = 'icons/obj/doors/Dooratmoglass.dmi'
|
||||
hitsound = 'sound/effects/Glasshit.ogg'
|
||||
maxhealth = 300
|
||||
@@ -241,6 +298,7 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_atmo
|
||||
glass = 1
|
||||
req_one_access = list(access_atmospherics)
|
||||
|
||||
/obj/machinery/door/airlock/gold
|
||||
name = "Gold Airlock"
|
||||
@@ -320,9 +378,10 @@
|
||||
mineral = "sandstone"
|
||||
|
||||
/obj/machinery/door/airlock/science
|
||||
name = "Airlock"
|
||||
name = "Research Airlock"
|
||||
icon = 'icons/obj/doors/Doorsci.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_science
|
||||
req_one_access = list(access_research)
|
||||
|
||||
/obj/machinery/door/airlock/glass_science
|
||||
name = "Glass Airlocks"
|
||||
@@ -330,6 +389,7 @@
|
||||
opacity = 0
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_science
|
||||
glass = 1
|
||||
req_one_access = list(access_research)
|
||||
|
||||
/obj/machinery/door/airlock/highsecurity
|
||||
name = "Secure Airlock"
|
||||
@@ -337,6 +397,7 @@
|
||||
explosion_resistance = 20
|
||||
secured_wires = 1
|
||||
assembly_type = /obj/structure/door_assembly/door_assembly_highsecurity
|
||||
req_one_access = list(access_heads_vault)
|
||||
|
||||
/obj/machinery/door/airlock/voidcraft
|
||||
name = "voidcraft hatch"
|
||||
@@ -1076,6 +1137,7 @@ About the new airlock wires panel:
|
||||
if(A.closeOtherId == src.closeOtherId && A != src)
|
||||
src.closeOther = A
|
||||
break
|
||||
name = "\improper [name]"
|
||||
|
||||
/obj/machinery/door/airlock/Destroy()
|
||||
qdel(wires)
|
||||
|
||||
@@ -437,7 +437,8 @@
|
||||
var/obj/fire/fire = locate() in loc
|
||||
if(fire)
|
||||
qdel(fire)
|
||||
return
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/proc/requiresID()
|
||||
return 1
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
/obj/machinery/door/firedoor/glass/hidden
|
||||
name = "\improper Emergency Shutter System"
|
||||
desc = "Emergency air-tight shutter, capable of sealing off breached areas. This model fits flush with the walls, and has a panel in the floor for maintenance."
|
||||
icon = 'icons/obj/doors/DoorHazardHidden.dmi'
|
||||
|
||||
/obj/machinery/door/firedoor/glass/hidden/steel
|
||||
name = "\improper Emergency Shutter System"
|
||||
desc = "Emergency air-tight shutter, capable of sealing off breached areas. This model fits flush with the walls, and has a panel in the floor for maintenance."
|
||||
icon = 'icons/obj/doors/DoorHazardHidden_steel.dmi'
|
||||
@@ -2,15 +2,46 @@
|
||||
/obj/machinery/door/airlock/multi_tile
|
||||
width = 2
|
||||
appearance_flags = 0
|
||||
var/obj/machinery/filler_object/filler1
|
||||
var/obj/machinery/filler_object/filler2
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/New()
|
||||
..()
|
||||
SetBounds()
|
||||
if(opacity)
|
||||
create_fillers()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/Destroy()
|
||||
if(filler1)
|
||||
qdel(filler1)
|
||||
if(filler2)
|
||||
qdel(filler2)
|
||||
..()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/Move()
|
||||
. = ..()
|
||||
SetBounds()
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/open()
|
||||
. = ..()
|
||||
|
||||
if(filler1)
|
||||
filler1.set_opacity(opacity)
|
||||
if(filler2)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/close()
|
||||
. = ..()
|
||||
|
||||
if(filler1)
|
||||
filler1.set_opacity(opacity)
|
||||
if(filler2)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/proc/SetBounds()
|
||||
if(dir in list(EAST, WEST))
|
||||
bound_width = width * world.icon_size
|
||||
@@ -19,9 +50,36 @@
|
||||
bound_width = world.icon_size
|
||||
bound_height = width * world.icon_size
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/proc/create_fillers()
|
||||
if(src.dir > 3)
|
||||
filler1 = new/obj/machinery/filler_object (src.loc)
|
||||
filler2 = new/obj/machinery/filler_object (get_step(src,EAST))
|
||||
else
|
||||
filler1 = new/obj/machinery/filler_object (src.loc)
|
||||
filler2 = new/obj/machinery/filler_object (get_step(src,NORTH))
|
||||
filler1.density = 0
|
||||
filler2.density = 0
|
||||
filler1.set_opacity(opacity)
|
||||
filler2.set_opacity(opacity)
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/glass
|
||||
name = "Glass Airlock"
|
||||
icon = 'icons/obj/doors/Door2x1glass.dmi'
|
||||
opacity = 0
|
||||
glass = 1
|
||||
assembly_type = /obj/structure/door_assembly/multi_tile
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/metal
|
||||
name = "Airlock"
|
||||
icon = 'icons/obj/doors/Door2x1metal.dmi'
|
||||
assembly_type = /obj/structure/door_assembly/multi_tile
|
||||
|
||||
/obj/machinery/filler_object
|
||||
name = ""
|
||||
icon = 'icons/obj/doors/rapid_pdoor.dmi'
|
||||
icon_state = ""
|
||||
density = 0
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/metal/mait
|
||||
icon = 'icons/obj/doors/Door2x1_Maint.dmi'
|
||||
req_one_access = list(access_maint_tunnels)
|
||||
|
||||
@@ -17,13 +17,20 @@
|
||||
construction_frame_floor += cancel
|
||||
|
||||
/datum/frame/frame_types
|
||||
var/name
|
||||
var/frame_size = 5
|
||||
var/frame_class
|
||||
var/circuit
|
||||
var/frame_style = "floor"
|
||||
var/x_offset
|
||||
var/y_offset
|
||||
var/icon/icon_override // Icon to set on frame object when building. If null icon is unchanged.
|
||||
var/name // Name assigned to the frame object.
|
||||
var/frame_size = 5 // Sheets of metal required to build.
|
||||
var/frame_class // Determines construction method. "machine", "computer", "alarm", or "display"
|
||||
var/circuit // Type path of the circuit board that comes built in with this frame. Null to require adding a circuit.
|
||||
var/frame_style = "floor" // "floor" or "wall"
|
||||
var/x_offset // For wall frames: pixel_x
|
||||
var/y_offset // For wall frames: pixel_y
|
||||
|
||||
// Get the icon state to use at a given state. Default implementation is based on the frame's name
|
||||
/datum/frame/frame_types/proc/get_icon_state(var/state)
|
||||
var/type = lowertext(name)
|
||||
type = replacetext(type, " ", "_")
|
||||
return "[type]_[state]"
|
||||
|
||||
/datum/frame/frame_types/computer
|
||||
name = "Computer"
|
||||
@@ -203,9 +210,9 @@
|
||||
|
||||
/obj/structure/frame/update_icon()
|
||||
..()
|
||||
var/type = lowertext(frame_type.name)
|
||||
type = replacetext(type, " ", "_")
|
||||
icon_state = "[type]_[state]"
|
||||
if(frame_type.icon_override)
|
||||
icon = frame_type.icon_override
|
||||
icon_state = frame_type.get_icon_state(state)
|
||||
|
||||
/obj/structure/frame/proc/check_components(mob/user as mob)
|
||||
components = list()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/light_switch
|
||||
name = "light switch"
|
||||
desc = "It turns lights on and off. What are you, simple?"
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon = 'icons/obj/power_vr.dmi' // VOREStation Edit
|
||||
icon_state = "light1"
|
||||
anchored = 1.0
|
||||
use_power = 1
|
||||
@@ -53,6 +53,7 @@
|
||||
|
||||
area.lightswitch = on
|
||||
area.updateicon()
|
||||
playsound(src, 'sound/machines/button.ogg', 100, 1, 0) // VOREStation Edit
|
||||
|
||||
for(var/obj/machinery/light_switch/L in area)
|
||||
L.on = on
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
obj/machinery/recharger
|
||||
name = "recharger"
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Edit
|
||||
icon_state = "recharger0"
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
// Request Console Presets! Make mapping 400% easier!
|
||||
// By using these presets we can rename the departments easily.
|
||||
|
||||
//Request Console Department Types
|
||||
// #define RC_ASSIST 1 //Request Assistance
|
||||
// #define RC_SUPPLY 2 //Request Supplies
|
||||
// #define RC_INFO 4 //Relay Info
|
||||
|
||||
/obj/machinery/requests_console/preset
|
||||
name = ""
|
||||
department = ""
|
||||
departmentType = ""
|
||||
announcementConsole = 0
|
||||
|
||||
// Departments
|
||||
/obj/machinery/requests_console/preset/cargo
|
||||
name = "Cargo RC"
|
||||
department = "Cargo Bay"
|
||||
departmentType = RC_SUPPLY
|
||||
|
||||
/obj/machinery/requests_console/preset/security
|
||||
name = "Security RC"
|
||||
department = "Security"
|
||||
departmentType = RC_ASSIST
|
||||
|
||||
/obj/machinery/requests_console/preset/engineering
|
||||
name = "Engineering RC"
|
||||
department = "Engineering"
|
||||
departmentType = RC_ASSIST|RC_SUPPLY
|
||||
|
||||
/obj/machinery/requests_console/preset/atmos
|
||||
name = "Atmospherics RC"
|
||||
department = "Atmospherics"
|
||||
departmentType = RC_ASSIST|RC_SUPPLY
|
||||
|
||||
/obj/machinery/requests_console/preset/medical
|
||||
name = "Medical RC"
|
||||
department = "Medical Department"
|
||||
departmentType = RC_ASSIST|RC_SUPPLY
|
||||
|
||||
/obj/machinery/requests_console/preset/research
|
||||
name = "Research RC"
|
||||
department = "Research Department"
|
||||
departmentType = RC_ASSIST|RC_SUPPLY
|
||||
|
||||
/obj/machinery/requests_console/preset/janitor
|
||||
name = "Janitor RC"
|
||||
department = "Janitorial"
|
||||
departmentType = RC_ASSIST
|
||||
|
||||
/obj/machinery/requests_console/preset/bridge
|
||||
name = "Bridge RC"
|
||||
department = "Bridge"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
// Heads
|
||||
|
||||
/obj/machinery/requests_console/preset/ce
|
||||
name = "Chief Engineer RC"
|
||||
department = "Chief Engineer's Desk"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
/obj/machinery/requests_console/preset/cmo
|
||||
name = "Chief Medical Officer RC"
|
||||
department = "Chief Medical Officer's Desk"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
/obj/machinery/requests_console/preset/hos
|
||||
name = "Head of Security RC"
|
||||
department = "Head of Security's Desk"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
/obj/machinery/requests_console/preset/rd
|
||||
name = "Research Director RC"
|
||||
department = "Research Director's Desk"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
/obj/machinery/requests_console/preset/captain
|
||||
name = "Captain RC"
|
||||
department = "Captain's Desk"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
announcementConsole = 1
|
||||
|
||||
/obj/machinery/requests_console/preset/ai
|
||||
name = "AI RC"
|
||||
department = "AI"
|
||||
departmentType = RC_ASSIST|RC_INFO
|
||||
@@ -4,7 +4,7 @@
|
||||
/obj/machinery/vending
|
||||
name = "Vendomat"
|
||||
desc = "A generic vending machine."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon = 'icons/obj/vending_vr.dmi' //VOREStation Edit - Eris vending machine sprites
|
||||
icon_state = "generic"
|
||||
layer = 2.9
|
||||
anchored = 1
|
||||
|
||||
@@ -115,4 +115,15 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread = 2
|
||||
)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/mysterysoup = 10)
|
||||
vend_delay = 15
|
||||
vend_delay = 15
|
||||
/* For later, then
|
||||
/obj/machinery/vending/weapon_machine
|
||||
name = "Frozen Star Guns&Ammo"
|
||||
desc = "A self-defense equipment vending machine. When you need to take care of that clown."
|
||||
product_slogans = "The best defense is good offense!;Buy for your whole family today!;Nobody can outsmart bullet!;God created man - Frozen Star made them EQUAL!;Nobody can outsmart bullet!;Stupidity can be cured! By LEAD.;Dead kids can't bully your children!"
|
||||
product_ads = "Stunning!;Take justice in your own hands!;LEADearship!"
|
||||
icon_state = "weapon"
|
||||
products = list(/obj/item/device/flash = 6,/obj/item/weapon/reagent_containers/spray/pepper = 6, /obj/item/weapon/gun/projectile/olivaw = 5, /obj/item/weapon/gun/projectile/giskard = 5, /obj/item/ammo_magazine/mg/cl32/rubber = 20)
|
||||
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6)
|
||||
prices = list(/obj/item/device/flash = 600,/obj/item/weapon/reagent_containers/spray/pepper = 800, /obj/item/weapon/gun/projectile/olivaw = 1600, /obj/item/weapon/gun/projectile/giskard = 1200, /obj/item/ammo_magazine/mg/cl32/rubber = 200)
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/mecha_part_fabricator
|
||||
icon = 'icons/obj/robotics.dmi'
|
||||
icon = 'icons/obj/robotics_vr.dmi' //VOREStation Edit - New icon
|
||||
icon_state = "fab-idle"
|
||||
name = "Exosuit Fabricator"
|
||||
desc = "A machine used for construction of mechas."
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/machinery/pros_fabricator
|
||||
icon = 'icons/obj/robotics.dmi'
|
||||
icon = 'icons/obj/robotics_vr.dmi' //VOREStation Edit - New icon
|
||||
icon_state = "fab-idle"
|
||||
name = "Prosthetics Fabricator"
|
||||
desc = "A machine used for construction of prosthetics."
|
||||
|
||||
@@ -123,4 +123,5 @@
|
||||
|
||||
/obj/item/device/encryptionkey/ert
|
||||
name = "\improper ERT radio encryption key"
|
||||
icon_state = "cent_cypherkey"
|
||||
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
/obj/item/device/radio/headset/centcom
|
||||
name = "centcom radio headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset"
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/headset/centcom/alt
|
||||
name = "centcom bowman headset"
|
||||
desc = "The headset of the boss's boss."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/headset/nanotrasen
|
||||
name = "\improper NT radio headset"
|
||||
desc = "The headset of a Nanotrasen corporate employee."
|
||||
icon_state = "nt_headset"
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/device/radio/intercom
|
||||
name = "station intercom (General)"
|
||||
desc = "Talk through this."
|
||||
icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "intercom"
|
||||
anchored = 1
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
@@ -22,8 +22,8 @@ var/global/list/default_medbay_channels = list(
|
||||
)
|
||||
|
||||
/obj/item/device/radio
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
name = "station bounced radio"
|
||||
icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit
|
||||
name = "shortwave radio" //VOREStation Edit
|
||||
suffix = "\[3\]"
|
||||
icon_state = "walkietalkie"
|
||||
item_state = "radio"
|
||||
|
||||
@@ -21,10 +21,11 @@
|
||||
|
||||
/obj/item/device/uplink/New(var/location, var/datum/mind/owner, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT)
|
||||
..()
|
||||
src.uplink_owner = owner
|
||||
if(owner) //VOREStation Edit - Owner optional
|
||||
src.uplink_owner = owner
|
||||
uses = owner.tcrystals
|
||||
purchase_log = list()
|
||||
world_uplinks += src
|
||||
uses = owner.tcrystals
|
||||
processing_objects += src
|
||||
|
||||
/obj/item/device/uplink/Destroy()
|
||||
|
||||
@@ -1,154 +1,190 @@
|
||||
/* Diffrent misc types of tiles
|
||||
* Contains:
|
||||
* Prototype
|
||||
* Grass
|
||||
* Wood
|
||||
* Carpet
|
||||
* Blue Carpet
|
||||
* Linoleum
|
||||
*
|
||||
* Put your stuff in fifty_stacks_tiles.dm as well.
|
||||
*/
|
||||
|
||||
/obj/item/stack/tile
|
||||
name = "tile"
|
||||
singular_name = "tile"
|
||||
desc = "A non-descript floor tile"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_amount = 60
|
||||
|
||||
/obj/item/stack/tile/New()
|
||||
..()
|
||||
pixel_x = rand(-7, 7)
|
||||
pixel_y = rand(-7, 7)
|
||||
|
||||
/*
|
||||
* Grass
|
||||
*/
|
||||
/obj/item/stack/tile/grass
|
||||
name = "grass tile"
|
||||
singular_name = "grass floor tile"
|
||||
desc = "A patch of grass like they often use on golf courses."
|
||||
icon_state = "tile_grass"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/obj/item/stack/tile/grass/fifty
|
||||
amount = 50
|
||||
/*
|
||||
* Wood
|
||||
*/
|
||||
/obj/item/stack/tile/wood
|
||||
name = "wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
desc = "An easy to fit wooden floor tile."
|
||||
icon_state = "tile-wood"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/wood/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/wood/cyborg
|
||||
name = "wood floor tile synthesizer"
|
||||
desc = "A device that makes wood floor tiles."
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/wood
|
||||
build_type = /obj/item/stack/tile/wood
|
||||
|
||||
/*
|
||||
* Carpets
|
||||
*/
|
||||
/obj/item/stack/tile/carpet
|
||||
name = "carpet"
|
||||
singular_name = "carpet"
|
||||
desc = "A piece of carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-carpet"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
name = "blue carpet"
|
||||
singular_name = "blue carpet"
|
||||
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-bluecarpet"
|
||||
|
||||
/obj/item/stack/tile/floor
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/stack/tile/floor_red
|
||||
name = "red floor tile"
|
||||
singular_name = "red floor tile"
|
||||
color = COLOR_RED_GRAY
|
||||
icon_state = "tile_white"
|
||||
|
||||
/obj/item/stack/tile/floor_steel
|
||||
name = "steel floor tile"
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor_white
|
||||
name = "white floor tile"
|
||||
singular_name = "white floor tile"
|
||||
icon_state = "tile_white"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor_yellow
|
||||
name = "yellow floor tile"
|
||||
singular_name = "yellow floor tile"
|
||||
color = COLOR_BROWN
|
||||
icon_state = "tile_white"
|
||||
|
||||
/obj/item/stack/tile/floor_dark
|
||||
name = "dark floor tile"
|
||||
singular_name = "dark floor tile"
|
||||
icon_state = "fr_tile"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor_freezer
|
||||
name = "freezer floor tile"
|
||||
singular_name = "freezer floor tile"
|
||||
icon_state = "tile_freezer"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
desc = "A device that makes floor tiles."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/floor
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
|
||||
/obj/item/stack/tile/linoleum
|
||||
name = "linoleum"
|
||||
singular_name = "linoleum"
|
||||
desc = "A piece of linoleum. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-linoleum"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
/* Diffrent misc types of tiles
|
||||
* Contains:
|
||||
* Prototype
|
||||
* Grass
|
||||
* Wood
|
||||
* Carpet
|
||||
* Blue Carpet
|
||||
* Linoleum
|
||||
*
|
||||
* Put your stuff in fifty_stacks_tiles.dm as well.
|
||||
*/
|
||||
|
||||
/obj/item/stack/tile
|
||||
name = "tile"
|
||||
singular_name = "tile"
|
||||
desc = "A non-descript floor tile"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
max_amount = 60
|
||||
|
||||
/obj/item/stack/tile/New()
|
||||
..()
|
||||
pixel_x = rand(-7, 7)
|
||||
pixel_y = rand(-7, 7)
|
||||
|
||||
/*
|
||||
* Grass
|
||||
*/
|
||||
/obj/item/stack/tile/grass
|
||||
name = "grass tile"
|
||||
singular_name = "grass floor tile"
|
||||
desc = "A patch of grass like they often use on golf courses."
|
||||
icon_state = "tile_grass"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
/obj/item/stack/tile/grass/fifty
|
||||
amount = 50
|
||||
/*
|
||||
* Wood
|
||||
*/
|
||||
/obj/item/stack/tile/wood
|
||||
name = "wood floor tile"
|
||||
singular_name = "wood floor tile"
|
||||
desc = "An easy to fit wooden floor tile."
|
||||
icon_state = "tile-wood"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/wood/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/tile/wood/cyborg
|
||||
name = "wood floor tile synthesizer"
|
||||
desc = "A device that makes wood floor tiles."
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/wood
|
||||
build_type = /obj/item/stack/tile/wood
|
||||
|
||||
/*
|
||||
* Carpets
|
||||
*/
|
||||
/obj/item/stack/tile/carpet
|
||||
name = "carpet"
|
||||
singular_name = "carpet"
|
||||
desc = "A piece of carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-carpet"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
name = "blue carpet"
|
||||
singular_name = "blue carpet"
|
||||
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-bluecarpet"
|
||||
|
||||
// VOREStation Edit
|
||||
// TODO - Add descriptions to these
|
||||
/obj/item/stack/tile/carpet/bcarpet
|
||||
icon_state = "tile-bcarpet"
|
||||
/obj/item/stack/tile/carpet/blucarpet
|
||||
icon_state = "tile-blucarpet"
|
||||
/obj/item/stack/tile/carpet/turcarpet
|
||||
icon_state = "tile-turcarpet"
|
||||
/obj/item/stack/tile/carpet/sblucarpet
|
||||
icon_state = "tile-sblucarpet"
|
||||
/obj/item/stack/tile/carpet/gaycarpet
|
||||
icon_state = "tile-gaycarpet"
|
||||
/obj/item/stack/tile/carpet/purcarpet
|
||||
icon_state = "tile-purcarpet"
|
||||
/obj/item/stack/tile/carpet/oracarpet
|
||||
icon_state = "tile-oracarpet"
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/item/stack/tile/floor
|
||||
name = "floor tile"
|
||||
singular_name = "floor tile"
|
||||
desc = "Those could work as a pretty decent throwing weapon" //why?
|
||||
icon_state = "tile"
|
||||
force = 6.0
|
||||
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
|
||||
throwforce = 15.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
|
||||
/obj/item/stack/tile/floor/red
|
||||
name = "red floor tile"
|
||||
singular_name = "red floor tile"
|
||||
color = COLOR_RED_GRAY
|
||||
icon_state = "tile_white"
|
||||
|
||||
// VOREStation Edit
|
||||
/obj/item/stack/tile/floor/techgrey
|
||||
name = "grey techfloor tile"
|
||||
singular_name = "grey techfloor tile"
|
||||
icon_state = "techtile_grey"
|
||||
|
||||
/obj/item/stack/tile/floor/techgrid
|
||||
name = "grid techfloor tile"
|
||||
singular_name = "grid techfloor tile"
|
||||
icon_state = "techtile_grid"
|
||||
|
||||
/obj/item/stack/tile/floor/steel_dirty
|
||||
name = "steel floor tile"
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/item/stack/tile/floor/steel
|
||||
name = "steel floor tile"
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor/white
|
||||
name = "white floor tile"
|
||||
singular_name = "white floor tile"
|
||||
icon_state = "tile_white"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor/yellow
|
||||
name = "yellow floor tile"
|
||||
singular_name = "yellow floor tile"
|
||||
color = COLOR_BROWN
|
||||
icon_state = "tile_white"
|
||||
|
||||
/obj/item/stack/tile/floor/dark
|
||||
name = "dark floor tile"
|
||||
singular_name = "dark floor tile"
|
||||
icon_state = "fr_tile"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor/freezer
|
||||
name = "freezer floor tile"
|
||||
singular_name = "freezer floor tile"
|
||||
icon_state = "tile_freezer"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
|
||||
/obj/item/stack/tile/floor/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
desc = "A device that makes floor tiles."
|
||||
gender = NEUTER
|
||||
matter = null
|
||||
uses_charge = 1
|
||||
charge_costs = list(250)
|
||||
stacktype = /obj/item/stack/tile/floor
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
|
||||
/obj/item/stack/tile/linoleum
|
||||
name = "linoleum"
|
||||
singular_name = "linoleum"
|
||||
desc = "A piece of linoleum. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-linoleum"
|
||||
force = 1.0
|
||||
throwforce = 1.0
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
@@ -14,3 +14,15 @@
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 2,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
// Board for the algae oxygen generator in algae_generator.dm
|
||||
/obj/item/weapon/circuitboard/algae_farm
|
||||
name = T_BOARD("algae oxygen generator")
|
||||
build_path = /obj/machinery/atmospherics/binary/algae_farm
|
||||
board_type = new /datum/frame/frame_types/machine
|
||||
origin_tech = list(TECH_ENGINEERING = 3, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/capacitor = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
/obj/item/weapon/storage/box/survival/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/gas(src) // VOREStation Edit - Tether
|
||||
new /obj/item/weapon/tank/emergency/oxygen(src)
|
||||
|
||||
//VS Edit
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
// Based on catwalk.dm from https://github.com/Endless-Horizon/CEV-Eris
|
||||
/obj/structure/catwalk
|
||||
layer = TURF_LAYER + 0.5
|
||||
icon = 'icons/turf/catwalks.dmi'
|
||||
icon_state = "catwalk"
|
||||
name = "catwalk"
|
||||
desc = "Cats really don't like these things."
|
||||
density = 0
|
||||
anchored = 1.0
|
||||
|
||||
/obj/structure/catwalk/New()
|
||||
..()
|
||||
spawn(4)
|
||||
if(src)
|
||||
for(var/obj/structure/catwalk/C in get_turf(src))
|
||||
if(C != src)
|
||||
qdel(C)
|
||||
update_icon()
|
||||
redraw_nearby_catwalks()
|
||||
|
||||
/obj/structure/catwalk/Destroy()
|
||||
..()
|
||||
redraw_nearby_catwalks()
|
||||
|
||||
/obj/structure/catwalk/proc/redraw_nearby_catwalks()
|
||||
for(var/direction in alldirs)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, direction)))
|
||||
var/obj/structure/catwalk/L = locate(/obj/structure/catwalk, get_step(src, direction))
|
||||
L.update_icon() //so siding get updated properly
|
||||
|
||||
|
||||
/obj/structure/catwalk/update_icon()
|
||||
var/connectdir = 0
|
||||
for(var/direction in cardinal)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, direction)))
|
||||
connectdir |= direction
|
||||
|
||||
//Check the diagonal connections for corners, where you have, for example, connections both north and east. In this case it checks for a north-east connection to determine whether to add a corner marker or not.
|
||||
var/diagonalconnect = 0 //1 = NE; 2 = SE; 4 = NW; 8 = SW
|
||||
//NORTHEAST
|
||||
if(connectdir & NORTH && connectdir & EAST)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, NORTHEAST)))
|
||||
diagonalconnect |= 1
|
||||
//SOUTHEAST
|
||||
if(connectdir & SOUTH && connectdir & EAST)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, SOUTHEAST)))
|
||||
diagonalconnect |= 2
|
||||
//NORTHWEST
|
||||
if(connectdir & NORTH && connectdir & WEST)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, NORTHWEST)))
|
||||
diagonalconnect |= 4
|
||||
//SOUTHWEST
|
||||
if(connectdir & SOUTH && connectdir & WEST)
|
||||
if(locate(/obj/structure/catwalk, get_step(src, SOUTHWEST)))
|
||||
diagonalconnect |= 8
|
||||
|
||||
icon_state = "catwalk[connectdir]-[diagonalconnect]"
|
||||
|
||||
|
||||
/obj/structure/catwalk/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
if(2.0)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/catwalk/attackby(obj/item/C as obj, mob/user as mob)
|
||||
if (istype(C, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = C
|
||||
if(WT.isOn())
|
||||
if(WT.remove_fuel(0, user))
|
||||
to_chat(user, "<span class='notice'>Slicing lattice joints ...</span>")
|
||||
new /obj/item/stack/rods(src.loc)
|
||||
new /obj/item/stack/rods(src.loc)
|
||||
new /obj/structure/lattice(src.loc)
|
||||
qdel(src)
|
||||
return ..()
|
||||
|
||||
/obj/structure/catwalk/Crossed()
|
||||
. = ..()
|
||||
if(isliving(usr))
|
||||
playsound(src, pick('sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', 'sound/effects/footstep/catwalk3.ogg', 'sound/effects/footstep/catwalk4.ogg', 'sound/effects/footstep/catwalk5.ogg'), 25, 1)
|
||||
@@ -46,6 +46,7 @@
|
||||
new /obj/item/clothing/gloves/sterile/latex(src)
|
||||
new /obj/item/device/radio/headset/heads/rd(src)
|
||||
new /obj/item/device/radio/headset/heads/rd/alt(src)
|
||||
new /obj/item/weapon/bluespace_harpoon //VOREStation Edit
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flash(src)
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
new /obj/item/device/radio/headset/heads/hop/alt(src)
|
||||
new /obj/item/weapon/storage/box/ids(src)
|
||||
new /obj/item/weapon/storage/box/ids( src )
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/gun/projectile/sec/flash(src)
|
||||
new /obj/item/weapon/gun/energy/gun/martin(src) //VOREStation Edit
|
||||
//new /obj/item/weapon/gun/projectile/sec/flash(src) //VOREStation Edit
|
||||
new /obj/item/device/flash(src)
|
||||
return
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hos
|
||||
name = "head of security's locker"
|
||||
name = "head of security's attire" //VOREStation Edit
|
||||
req_access = list(access_hos)
|
||||
icon_state = "hossecure1"
|
||||
icon_closed = "hossecure"
|
||||
@@ -92,7 +92,7 @@
|
||||
icon_broken = "hossecurebroken"
|
||||
icon_off = "hossecureoff"
|
||||
storage_capacity = 2.5 * MOB_MEDIUM
|
||||
|
||||
//VOREStation Edit - This list split into two lockers
|
||||
New()
|
||||
..()
|
||||
if(prob(50))
|
||||
@@ -108,33 +108,50 @@
|
||||
new /obj/item/clothing/suit/storage/vest/hoscoat/jensen(src)
|
||||
new /obj/item/clothing/suit/storage/vest/hoscoat(src)
|
||||
new /obj/item/clothing/head/helmet/HoS/dermal(src)
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos/alt(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/accessory/holster/waist(src)
|
||||
new /obj/item/clothing/head/beret/sec/corporate/hos(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
|
||||
new /obj/item/clothing/mask/gas/half(src)
|
||||
return
|
||||
|
||||
//VOREStation Edit - Locker has too much junk in it, splitting it up
|
||||
/obj/structure/closet/secure_closet/hos2
|
||||
name = "head of security's gear"
|
||||
req_access = list(access_hos)
|
||||
icon_state = "hossecure1"
|
||||
icon_closed = "hossecure"
|
||||
icon_locked = "hossecure1"
|
||||
icon_opened = "hossecureopen"
|
||||
icon_broken = "hossecurebroken"
|
||||
icon_off = "hossecureoff"
|
||||
storage_capacity = 2.5 * MOB_MEDIUM
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/shield/riot(src)
|
||||
new /obj/item/weapon/shield/riot/tele(src)
|
||||
new /obj/item/weapon/storage/box/holobadge/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/projectile/lamia(src)
|
||||
new /obj/item/ammo_magazine/a44/rubber(src)
|
||||
new /obj/item/ammo_magazine/a44(src)
|
||||
new /obj/item/ammo_magazine/a44(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/cell/device/weapon(src)
|
||||
new /obj/item/clothing/accessory/holster/waist(src)
|
||||
new /obj/item/weapon/melee/telebaton(src)
|
||||
new /obj/item/clothing/head/beret/sec/corporate/hos(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/security(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/clothing/mask/gas/half(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/warden
|
||||
name = "warden's locker"
|
||||
req_access = list(access_armory)
|
||||
@@ -277,10 +294,10 @@
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/clothing/suit/storage/vest/detective(src)
|
||||
new /obj/item/ammo_magazine/c45m/rubber(src)
|
||||
new /obj/item/ammo_magazine/c45m/rubber(src)
|
||||
new /obj/item/ammo_magazine/a44sl/rubber(src) //VOREStation Edit
|
||||
new /obj/item/ammo_magazine/a44sl/rubber(src) //VOREStation Edit
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/gun/projectile/colt/detective(src)
|
||||
new /obj/item/weapon/gun/projectile/revolver/consul(src) //VOREStation Edit
|
||||
new /obj/item/clothing/accessory/holster/armpit(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask/detflask(src)
|
||||
|
||||
@@ -7,4 +7,151 @@
|
||||
icon_opened = "hossecureopen"
|
||||
icon_broken = "hossecurebroken"
|
||||
icon_off = "hossecureoff"
|
||||
storage_capacity = 3 * MOB_MEDIUM
|
||||
storage_capacity = 3 * MOB_MEDIUM
|
||||
|
||||
//Custom NT Security Lockers, Only found at central command
|
||||
|
||||
/obj/structure/closet/secure_closet/nanotrasen_security
|
||||
name = "NanoTrasen security officer's locker"
|
||||
req_access = list(access_brig)
|
||||
icon = 'icons/obj/closet_vr.dmi'
|
||||
icon_state = "secC1"
|
||||
icon_closed = "secC"
|
||||
icon_locked = "sec1C"
|
||||
icon_opened = "secCopen"
|
||||
icon_broken = "secCbroken"
|
||||
icon_off = "seCcoff"
|
||||
storage_capacity = 3.5 * MOB_MEDIUM
|
||||
|
||||
New()
|
||||
..()
|
||||
if(prob(25))
|
||||
new /obj/item/weapon/storage/backpack/security(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/sec(src)
|
||||
if(prob(75))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
|
||||
new /obj/item/clothing/suit/storage/vest/nanotrasen(src)
|
||||
new /obj/item/clothing/head/helmet(src)
|
||||
new /obj/item/weapon/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/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/grenade/flashbang(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/device/hailer(src)
|
||||
new /obj/item/device/flashlight/flare(src)
|
||||
new /obj/item/clothing/accessory/storage/black_vest(src)
|
||||
new /obj/item/weapon/gun/energy/taser(src)
|
||||
new /obj/item/weapon/cell/device/weapon(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/clothing/head/soft/nanotrasen(src)
|
||||
new /obj/item/clothing/head/beret/nanotrasen(src)
|
||||
new /obj/item/clothing/under/nanotrasen/security(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots/toeless(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/nanotrasen_commander
|
||||
name = "NanoTrasen commander's locker"
|
||||
req_access = list(access_brig)
|
||||
icon = 'icons/obj/closet_vr.dmi'
|
||||
icon_state = "secC1"
|
||||
icon_closed = "secC"
|
||||
icon_locked = "sec1C"
|
||||
icon_opened = "secCopen"
|
||||
icon_broken = "secCbroken"
|
||||
icon_off = "seCcoff"
|
||||
storage_capacity = 3.5 * MOB_MEDIUM
|
||||
|
||||
New()
|
||||
..()
|
||||
if(prob(25))
|
||||
new /obj/item/weapon/storage/backpack/security(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/sec(src)
|
||||
if(prob(75))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
|
||||
new /obj/item/clothing/head/helmet/HoS(src)
|
||||
new /obj/item/clothing/suit/storage/vest/hos(src)
|
||||
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
|
||||
new /obj/item/clothing/suit/storage/vest/hoscoat/jensen(src)
|
||||
new /obj/item/clothing/suit/storage/vest/hoscoat(src)
|
||||
new /obj/item/clothing/head/helmet/HoS/dermal(src)
|
||||
new /obj/item/weapon/cartridge/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos(src)
|
||||
new /obj/item/device/radio/headset/heads/hos/alt(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/shield/riot(src)
|
||||
new /obj/item/weapon/shield/riot/tele(src)
|
||||
new /obj/item/weapon/storage/box/holobadge/hos(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/hos(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/cell/device/weapon(src)
|
||||
new /obj/item/clothing/accessory/holster/waist(src)
|
||||
new /obj/item/weapon/melee/telebaton(src)
|
||||
new /obj/item/clothing/head/beret/sec/corporate/hos(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots/toeless(src)
|
||||
new /obj/item/clothing/under/nanotrasen/security/commander(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/nanotrasen_warden
|
||||
name = "NanoTrasen warden's locker"
|
||||
req_access = list(access_brig)
|
||||
icon = 'icons/obj/closet_vr.dmi'
|
||||
icon_state = "secC1"
|
||||
icon_closed = "secC"
|
||||
icon_locked = "sec1C"
|
||||
icon_opened = "secCopen"
|
||||
icon_broken = "secCbroken"
|
||||
icon_off = "seCcoff"
|
||||
storage_capacity = 3.5 * MOB_MEDIUM
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
if(prob(25))
|
||||
new /obj/item/weapon/storage/backpack/security(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/sec(src)
|
||||
if(prob(75))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/sec(src)
|
||||
new /obj/item/clothing/suit/storage/vest/warden(src)
|
||||
new /obj/item/clothing/under/nanotrasen/security/warden(src)
|
||||
new /obj/item/clothing/suit/storage/vest/wardencoat/alt(src)
|
||||
new /obj/item/clothing/head/helmet/warden(src)
|
||||
new /obj/item/weapon/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/clothing/glasses/sunglasses/sechud(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/clothing/accessory/badge/holo/warden(src)
|
||||
new /obj/item/weapon/storage/box/flashbangs(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/weapon/reagent_containers/spray/pepper(src)
|
||||
new /obj/item/weapon/melee/baton/loaded(src)
|
||||
new /obj/item/weapon/gun/energy/gun(src)
|
||||
new /obj/item/weapon/cell/device/weapon(src)
|
||||
new /obj/item/weapon/storage/box/holobadge(src)
|
||||
new /obj/item/clothing/head/beret/sec/corporate/warden(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/device/megaphone(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots(src)
|
||||
new /obj/item/clothing/shoes/boots/jackboots/toeless(src)
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/structure/grille
|
||||
name = "grille"
|
||||
desc = "A flimsy lattice of metal rods, with screws to secure it to the floor."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons
|
||||
icon_state = "grille"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -67,7 +67,18 @@
|
||||
user << "<span class='notice'>Slicing lattice joints ...</span>"
|
||||
new /obj/item/stack/rods(src.loc)
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
// VOREStation Edit - Added Catwalks
|
||||
if (istype(C, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/R = C
|
||||
if(R.use(2))
|
||||
user << "<span class='notice'>You start connecting \the [R.name] to \the [src.name] ...</span>"
|
||||
if(do_after(user, 5 SECONDS))
|
||||
src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana
|
||||
new /obj/structure/catwalk(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
// VOREStation Edit End
|
||||
return
|
||||
|
||||
/obj/structure/lattice/proc/updateOverlays()
|
||||
|
||||
@@ -0,0 +1,318 @@
|
||||
// Based on railing.dmi from https://github.com/Endless-Horizon/CEV-Eris
|
||||
/obj/structure/railing
|
||||
name = "railing"
|
||||
desc = "A standard steel railing. Play stupid games win stupid prizes."
|
||||
icon = 'icons/obj/railing.dmi'
|
||||
density = 1
|
||||
throwpass = 1
|
||||
climbable = 1
|
||||
layer = 3.2 //Just above doors
|
||||
anchored = 1
|
||||
flags = ON_BORDER
|
||||
icon_state = "railing0"
|
||||
var/broken = FALSE
|
||||
var/health = 70
|
||||
var/maxhealth = 70
|
||||
var/check = 0
|
||||
|
||||
/obj/structure/railing/New(loc, constructed = 0)
|
||||
..()
|
||||
// TODO - "constructed" is not passed to us. We need to find a way to do this safely.
|
||||
if (constructed) // player-constructed railings
|
||||
anchored = 0
|
||||
if(climbable)
|
||||
verbs += /obj/structure/proc/climb_on
|
||||
|
||||
/obj/structure/railing/initialize()
|
||||
..()
|
||||
if(src.anchored)
|
||||
update_icon(0)
|
||||
|
||||
/obj/structure/railing/Destroy()
|
||||
for(var/obj/structure/railing/R in oview(src, 1))
|
||||
R.update_icon()
|
||||
..()
|
||||
|
||||
/obj/structure/railing/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(!mover)
|
||||
return 1
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir)
|
||||
return !density
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/structure/railing/examine(mob/user)
|
||||
. = ..()
|
||||
if(health < maxhealth)
|
||||
switch(health / maxhealth)
|
||||
if(0.0 to 0.5)
|
||||
to_chat(user, "<span class='warning'>It looks severely damaged!</span>")
|
||||
if(0.25 to 0.5)
|
||||
to_chat(user, "<span class='warning'>It looks damaged!</span>")
|
||||
if(0.5 to 1.0)
|
||||
to_chat(user, "<span class='notice'>It has a few scrapes and dents.</span>")
|
||||
|
||||
/obj/structure/railing/proc/take_damage(amount)
|
||||
health -= amount
|
||||
if(health <= 0)
|
||||
visible_message("<span class='warning'>\The [src] breaks down!</span>")
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 50, 1)
|
||||
new /obj/item/stack/rods(get_turf(usr))
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/railing/proc/NeighborsCheck(var/UpdateNeighbors = 1)
|
||||
check = 0
|
||||
//if (!anchored) return
|
||||
var/Rturn = turn(src.dir, -90)
|
||||
var/Lturn = turn(src.dir, 90)
|
||||
|
||||
for(var/obj/structure/railing/R in src.loc)
|
||||
if ((R.dir == Lturn) && R.anchored)
|
||||
check |= 32
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
if ((R.dir == Rturn) && R.anchored)
|
||||
check |= 2
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
|
||||
for (var/obj/structure/railing/R in get_step(src, Lturn))
|
||||
if ((R.dir == src.dir) && R.anchored)
|
||||
check |= 16
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
for (var/obj/structure/railing/R in get_step(src, Rturn))
|
||||
if ((R.dir == src.dir) && R.anchored)
|
||||
check |= 1
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
|
||||
for (var/obj/structure/railing/R in get_step(src, (Lturn + src.dir)))
|
||||
if ((R.dir == Rturn) && R.anchored)
|
||||
check |= 64
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
for (var/obj/structure/railing/R in get_step(src, (Rturn + src.dir)))
|
||||
if ((R.dir == Lturn) && R.anchored)
|
||||
check |= 4
|
||||
if (UpdateNeighbors)
|
||||
R.update_icon(0)
|
||||
|
||||
/obj/structure/railing/update_icon(var/UpdateNeighgors = 1)
|
||||
NeighborsCheck(UpdateNeighgors)
|
||||
layer = (dir == SOUTH) ? FLY_LAYER : initial(layer)
|
||||
overlays.Cut()
|
||||
if (!check || !anchored)//|| !anchored
|
||||
icon_state = "railing0"
|
||||
else
|
||||
icon_state = "railing1"
|
||||
if (check & 32)
|
||||
overlays += image ('icons/obj/railing.dmi', src, "corneroverlay")
|
||||
if ((check & 16) || !(check & 32) || (check & 64))
|
||||
overlays += image ('icons/obj/railing.dmi', src, "frontoverlay_l")
|
||||
if (!(check & 2) || (check & 1) || (check & 4))
|
||||
overlays += image ('icons/obj/railing.dmi', src, "frontoverlay_r")
|
||||
if(check & 4)
|
||||
switch (src.dir)
|
||||
if (NORTH)
|
||||
overlays += image ('icons/obj/railing.dmi', src, "mcorneroverlay", pixel_x = 32)
|
||||
if (SOUTH)
|
||||
overlays += image ('icons/obj/railing.dmi', src, "mcorneroverlay", pixel_x = -32)
|
||||
if (EAST)
|
||||
overlays += image ('icons/obj/railing.dmi', src, "mcorneroverlay", pixel_y = -32)
|
||||
if (WEST)
|
||||
overlays += image ('icons/obj/railing.dmi', src, "mcorneroverlay", pixel_y = 32)
|
||||
|
||||
/obj/structure/railing/verb/rotate()
|
||||
set name = "Rotate Railing Counter-Clockwise"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
to_chat(usr, "It is fastened to the floor therefore you can't rotate it!")
|
||||
return 0
|
||||
|
||||
set_dir(turn(dir, 90))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/railing/verb/revrotate()
|
||||
set name = "Rotate Railing Clockwise"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
to_chat(usr, "It is fastened to the floor therefore you can't rotate it!")
|
||||
return 0
|
||||
|
||||
set_dir(turn(dir, -90))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/railing/verb/flip() // This will help push railing to remote places, such as open space turfs
|
||||
set name = "Flip Railing"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
to_chat(usr, "It is fastened to the floor therefore you can't flip it!")
|
||||
return 0
|
||||
|
||||
var/obj/occupied = neighbor_turf_impassable()
|
||||
if(occupied)
|
||||
to_chat(usr, "You can't flip \the [src] because there's \a [occupied] in the way.")
|
||||
return 0
|
||||
|
||||
src.loc = get_step(src, src.dir)
|
||||
set_dir(turn(dir, 180))
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/structure/railing/CheckExit(atom/movable/O as mob|obj, target as turf)
|
||||
if(istype(O) && O.checkpass(PASSTABLE))
|
||||
return 1
|
||||
if(get_dir(O.loc, target) == dir)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob)
|
||||
// Dismantle
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20, src))
|
||||
user.visible_message("<span class='notice'>\The [user] dismantles \the [src].</span>", "<span class='notice'>You dismantle \the [src].</span>")
|
||||
new /obj/item/stack/material/steel(get_turf(usr), 2)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
// Repair
|
||||
if(health < maxhealth && istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/F = W
|
||||
if(F.welding)
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20, src))
|
||||
user.visible_message("<span class='notice'>\The [user] repairs some damage to \the [src].</span>", "<span class='notice'>You repair some damage to \the [src].</span>")
|
||||
health = min(health+(maxhealth/5), maxhealth) // 20% repair per application
|
||||
return
|
||||
|
||||
// Install
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user.visible_message(anchored ? "<span class='notice'>\The [user] begins unscrewing \the [src].</span>" : "<span class='notice'>\The [user] begins fasten \the [src].</span>" )
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
|
||||
if(do_after(user, 10, src))
|
||||
to_chat(user, (anchored ? "<span class='notice'>You have unfastened \the [src] from the floor.</span>" : "<span class='notice'>You have fastened \the [src] to the floor.</span>"))
|
||||
anchored = !anchored
|
||||
update_icon()
|
||||
return
|
||||
|
||||
// Handle harm intent grabbing/tabling.
|
||||
if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
|
||||
var/obj/item/weapon/grab/G = W
|
||||
if (istype(G.affecting, /mob/living))
|
||||
var/mob/living/M = G.affecting
|
||||
var/obj/occupied = turf_is_crowded()
|
||||
if(occupied)
|
||||
to_chat(user, "<span class='danger'>There's \a [occupied] in the way.</span>")
|
||||
return
|
||||
if (G.state < 2)
|
||||
if(user.a_intent == I_HURT)
|
||||
if (prob(15)) M.Weaken(5)
|
||||
M.apply_damage(8,def_zone = "head")
|
||||
take_damage(8)
|
||||
visible_message("<span class='danger'>[G.assailant] slams [G.affecting]'s face against \the [src]!</span>")
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 50, 1)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You need a better grip to do that!</span>")
|
||||
return
|
||||
else
|
||||
if (get_turf(G.affecting) == get_turf(src))
|
||||
G.affecting.forceMove(get_step(src, src.dir))
|
||||
else
|
||||
G.affecting.forceMove(get_turf(src))
|
||||
G.affecting.Weaken(5)
|
||||
visible_message("<span class='danger'>[G.assailant] throws [G.affecting] over \the [src]!</span>")
|
||||
qdel(W)
|
||||
return
|
||||
|
||||
else
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 50, 1)
|
||||
take_damage(W.force)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/railing/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
// Duplicated from structures.dm, but its a bit different.
|
||||
/obj/structure/railing/do_climb(var/mob/living/user)
|
||||
if(!can_climb(user))
|
||||
return
|
||||
|
||||
usr.visible_message("<span class='warning'>[user] starts climbing onto \the [src]!</span>")
|
||||
climbers |= user
|
||||
|
||||
if(!do_after(user,(issmall(user) ? 20 : 34)))
|
||||
climbers -= user
|
||||
return
|
||||
|
||||
if(!can_climb(user, post_climb_check=1))
|
||||
climbers -= user
|
||||
return
|
||||
|
||||
if(get_turf(user) == get_turf(src))
|
||||
usr.forceMove(get_step(src, src.dir))
|
||||
else
|
||||
usr.forceMove(get_turf(src))
|
||||
|
||||
usr.visible_message("<span class='warning'>[user] climbed over \the [src]!</span>")
|
||||
if(!anchored) take_damage(maxhealth) // Fatboy
|
||||
climbers -= user
|
||||
|
||||
/obj/structure/railing/can_climb(var/mob/living/user, post_climb_check=0)
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
// Normal can_climb() handles climbing from adjacent turf onto our turf. But railings also allow climbing
|
||||
// from our turf onto an adjacent! If that is the case we need to do checks for that too...
|
||||
if(get_turf(user) == get_turf(src))
|
||||
var/obj/occupied = neighbor_turf_impassable()
|
||||
if(occupied)
|
||||
to_chat(user, "<span class='danger'>You can't climb there, there's \a [occupied] in the way.</span>")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
// TODO - This here might require some investigation
|
||||
/obj/structure/proc/neighbor_turf_impassable()
|
||||
var/turf/T = get_step(src, src.dir)
|
||||
if(!T || !istype(T))
|
||||
return 0
|
||||
if(T.density == 1)
|
||||
return T
|
||||
for(var/obj/O in T.contents)
|
||||
if(istype(O,/obj/structure))
|
||||
var/obj/structure/S = O
|
||||
if(S.climbable) continue
|
||||
if(O && O.density && !(O.flags & ON_BORDER && !(turn(O.dir, 180) & dir)))
|
||||
return O
|
||||
@@ -304,6 +304,20 @@
|
||||
desc = "A direction sign, pointing out which way the Cargo department is."
|
||||
icon_state = "direction_crg"
|
||||
|
||||
// VOREStation Edit - New signs for us
|
||||
/obj/structure/sign/directions/command
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "\improper Command department"
|
||||
desc = "A direction sign, pointing out which way the Command department is."
|
||||
icon_state = "direction_cmd"
|
||||
|
||||
/obj/structure/sign/directions/elevator
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "\improper Space Elevator"
|
||||
desc = "A direction sign, pointing out which way the Space Elevator is."
|
||||
icon_state = "direction_elv"
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/structure/sign/christmas/lights
|
||||
name = "Christmas lights"
|
||||
desc = "Flashy and pretty."
|
||||
@@ -315,3 +329,341 @@
|
||||
desc = "Prickly and festive."
|
||||
icon = 'icons/obj/christmas.dmi'
|
||||
icon_state = "doorwreath"
|
||||
|
||||
//Eris signs
|
||||
|
||||
/obj/structure/sign/ironhammer
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "Ironhammer Security"
|
||||
desc = "Sign depicts the symbolic of Ironhammer Security, the largest security provider within Trade Union of Hansa."
|
||||
icon_state = "ironhammer"
|
||||
|
||||
/obj/structure/sign/atmos_co2
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "CO2 warning sign"
|
||||
desc = "WARNING! CO2 flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_co2"
|
||||
|
||||
/obj/structure/sign/atmos_n2o
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "N2O warning sign"
|
||||
desc = "WARNING! N2O flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_n2o"
|
||||
|
||||
/obj/structure/sign/atmos_plasma
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "Plasma warning sign"
|
||||
desc = "WARNING! Plasma flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_plasma"
|
||||
|
||||
/obj/structure/sign/atmos_n2
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "N2 warning sign"
|
||||
desc = "WARNING! N2 flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_n2"
|
||||
|
||||
/obj/structure/sign/atmos_o2
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "O2 warning sign"
|
||||
desc = "WARNING! O2 flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_o2"
|
||||
|
||||
/obj/structure/sign/atmos_air
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "Air warning sign"
|
||||
desc = "WARNING! Air flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_air"
|
||||
|
||||
/obj/structure/sign/atmos_waste
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "Atmos waste warning sign"
|
||||
desc = "WARNING! Waste flow tube. Ensure the flow is disengaged before working."
|
||||
icon_state = "atmos_waste"
|
||||
|
||||
/obj/structure/sign/deck1
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'DECK I'."
|
||||
name = "DECK I"
|
||||
icon_state = "deck1"
|
||||
|
||||
/obj/structure/sign/deck2
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'DECK II'."
|
||||
name = "DECK II"
|
||||
icon_state = "deck2"
|
||||
|
||||
/obj/structure/sign/deck3
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'DECK III'."
|
||||
name = "DECK III"
|
||||
icon_state = "deck3"
|
||||
|
||||
/obj/structure/sign/deck4
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'DECK IV'."
|
||||
name = "DECK IV"
|
||||
icon_state = "deck4"
|
||||
|
||||
/obj/structure/sign/sec1
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'SECTION I'."
|
||||
name = "SECTION I"
|
||||
icon_state = "sec1"
|
||||
|
||||
/obj/structure/sign/sec2
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'SECTION II'."
|
||||
name = "SECTION II"
|
||||
icon_state = "sec2"
|
||||
|
||||
/obj/structure/sign/sec3
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'SECTION III'."
|
||||
name = "SECTION III"
|
||||
icon_state = "sec3"
|
||||
|
||||
/obj/structure/sign/sec4
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
desc = "A silver sign which reads 'SECTION IV'."
|
||||
name = "SECTION IV"
|
||||
icon_state = "sec4"
|
||||
|
||||
/obj/structure/sign/nanotrasen
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "\improper NanoTrasen"
|
||||
desc = "An old metal sign which reads 'NanoTrasen'."
|
||||
icon_state = "NT"
|
||||
|
||||
// Eris standards compliant hazards
|
||||
/obj/structure/sign/signnew
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
|
||||
/obj/structure/sign/signnew/biohazard
|
||||
name = "BIOLOGICAL HAZARD"
|
||||
desc = "Warning: Biological and-or toxic hazards present in this area!"
|
||||
icon_state = "biohazard"
|
||||
|
||||
/obj/structure/sign/signnew/corrosives
|
||||
name = "CORROSIVE SUBSTANCES"
|
||||
desc = "Warning: Corrosive substances prezent in this area!"
|
||||
icon_state = "corrosives"
|
||||
|
||||
/obj/structure/sign/signnew/explosives
|
||||
name = "EXPLOSIVE SUBSTANCES"
|
||||
desc = "Warning: Explosive substances present in this area!"
|
||||
icon_state = "explosives"
|
||||
|
||||
/obj/structure/sign/signnew/flammables
|
||||
name = "FLAMMABLE SUBSTANCES"
|
||||
desc = "Warning: Flammable substances present in this area!"
|
||||
icon_state = "flammable"
|
||||
|
||||
/obj/structure/sign/signnew/laserhazard
|
||||
name = "LASER HAZARD"
|
||||
desc = "Warning: High powered laser emitters operating in this area!"
|
||||
icon_state = "laser"
|
||||
|
||||
/obj/structure/sign/signnew/danger
|
||||
name = "DANGEROUS AREA"
|
||||
desc = "Warning: Generally hazardous area! Exercise caution."
|
||||
icon_state = "danger"
|
||||
|
||||
/obj/structure/sign/signnew/magnetics
|
||||
name = "MAGNETIC FIELD HAZARD"
|
||||
desc = "Warning: Extremely powerful magnetic fields present in this area!"
|
||||
icon_state = "magnetics"
|
||||
|
||||
/obj/structure/sign/signnew/opticals
|
||||
name = "OPTICAL HAZARD"
|
||||
desc = "Warning: Optical hazards present in this area!"
|
||||
icon_state = "optical"
|
||||
|
||||
/obj/structure/sign/signnew/radiation
|
||||
name = "RADIATION HAZARD"
|
||||
desc = "Warning: Significant levels of radiation present in this area!"
|
||||
icon_state = "radiation"
|
||||
|
||||
/obj/structure/sign/signnew/secure
|
||||
name = "SECURE AREA"
|
||||
desc = "Warning: Secure Area! Do not enter without authorization!"
|
||||
icon_state = "secure"
|
||||
|
||||
/obj/structure/sign/signnew/electrical
|
||||
name = "ELECTRICAL HAZARD"
|
||||
desc = "Warning: Electrical hazards! Wear protective equipment."
|
||||
icon_state = "electrical"
|
||||
|
||||
/obj/structure/sign/signnew/cryogenics
|
||||
name = "CRYOGENIC TEMPERATURES"
|
||||
desc = "Warning: Extremely low temperatures in this area."
|
||||
icon_state = "cryogenics"
|
||||
|
||||
/obj/structure/sign/signnew/canisters
|
||||
name = "PRESSURIZED CANISTERS"
|
||||
desc = "Warning: Highly pressurized canister storage."
|
||||
icon_state = "canisters"
|
||||
|
||||
/obj/structure/sign/signnew/oxidants
|
||||
name = "OXIDIZING AGENTS"
|
||||
desc = "Warning: Oxidizing agents in this area, do not start fires!"
|
||||
icon_state = "oxidants"
|
||||
|
||||
/obj/structure/sign/signnew/memetic
|
||||
name = "MEMETIC HAZARD"
|
||||
desc = "Warning: Memetic hazard, wear meson goggles!"
|
||||
icon_state = "memetic"
|
||||
|
||||
//Eris departments
|
||||
|
||||
/obj/structure/sign/department
|
||||
icon = 'icons/obj/decals_vr.dmi'
|
||||
name = "department sign"
|
||||
desc = "Sign of some important ship compartment."
|
||||
|
||||
/obj/structure/sign/department/medbay
|
||||
name = "MEDBAY"
|
||||
icon_state = "medbay"
|
||||
|
||||
/obj/structure/sign/department/virology
|
||||
name = "VIROLOGY"
|
||||
icon_state = "virology"
|
||||
|
||||
/obj/structure/sign/department/chem
|
||||
name = "CHEMISTRY"
|
||||
icon_state = "chem"
|
||||
|
||||
/obj/structure/sign/department/gene
|
||||
name = "GENETICS"
|
||||
icon_state = "gene"
|
||||
|
||||
/obj/structure/sign/department/morgue
|
||||
name = "MORGUE"
|
||||
icon_state = "morgue"
|
||||
|
||||
/obj/structure/sign/department/operational
|
||||
name = "SURGERY"
|
||||
icon_state = "operational"
|
||||
|
||||
/obj/structure/sign/department/sci
|
||||
name = "SCIENCE"
|
||||
icon_state = "sci"
|
||||
|
||||
/obj/structure/sign/department/xenolab
|
||||
name = "XENOLAB"
|
||||
icon_state = "xenolab"
|
||||
|
||||
/obj/structure/sign/department/anomaly
|
||||
name = "ANOMALYLAB"
|
||||
icon_state = "anomaly"
|
||||
|
||||
/obj/structure/sign/department/dock
|
||||
name = "DOKUCHAYEV DOCK"
|
||||
icon_state = "dock"
|
||||
|
||||
/obj/structure/sign/department/rnd
|
||||
name = "RND"
|
||||
icon_state = "rnd"
|
||||
|
||||
/obj/structure/sign/department/robo
|
||||
name = "ROBOTICS"
|
||||
icon_state = "robo"
|
||||
|
||||
/obj/structure/sign/department/toxins
|
||||
name = "TOXINS"
|
||||
icon_state = "toxins"
|
||||
|
||||
/obj/structure/sign/department/toxin_res
|
||||
name = "TOXINLAB"
|
||||
icon_state = "toxin_res"
|
||||
|
||||
/obj/structure/sign/department/eva
|
||||
name = "E.V.A."
|
||||
icon_state = "eva"
|
||||
|
||||
/obj/structure/sign/department/ass
|
||||
name = "TOOL STORAGE"
|
||||
icon_state = "ass"
|
||||
|
||||
/obj/structure/sign/department/bar
|
||||
name = "BAR"
|
||||
icon_state = "bar"
|
||||
|
||||
/obj/structure/sign/department/biblio
|
||||
name = "LIBRARY"
|
||||
icon_state = "biblio"
|
||||
|
||||
/obj/structure/sign/department/chapel
|
||||
name = "CHAPEL"
|
||||
icon_state = "chapel"
|
||||
|
||||
/obj/structure/sign/department/bridge
|
||||
name = "BRIDGE"
|
||||
icon_state = "bridge"
|
||||
|
||||
/obj/structure/sign/department/telecoms
|
||||
name = "TELECOMS"
|
||||
icon_state = "telecoms"
|
||||
|
||||
/obj/structure/sign/department/conference_room
|
||||
name = "CONFERENCE"
|
||||
icon_state = "conference_room"
|
||||
|
||||
/obj/structure/sign/department/ai
|
||||
name = "AI"
|
||||
icon_state = "ai"
|
||||
|
||||
/obj/structure/sign/department/cargo
|
||||
name = "CARGO"
|
||||
icon_state = "cargo"
|
||||
|
||||
/obj/structure/sign/department/mail
|
||||
name = "MAIL"
|
||||
icon_state = "mail"
|
||||
|
||||
/obj/structure/sign/department/miner_dock
|
||||
name = "MINING DOCK"
|
||||
icon_state = "miner_dock"
|
||||
|
||||
/obj/structure/sign/department/cargo_dock
|
||||
name = "CARGO DOCK"
|
||||
icon_state = "cargo_dock"
|
||||
|
||||
/obj/structure/sign/department/eng
|
||||
name = "ENGINEERING"
|
||||
icon_state = "eng"
|
||||
|
||||
/obj/structure/sign/department/engine
|
||||
name = "ENGINE"
|
||||
icon_state = "engine"
|
||||
|
||||
/obj/structure/sign/department/gravi
|
||||
name = "GRAVGEN"
|
||||
icon_state = "gravi"
|
||||
|
||||
/obj/structure/sign/department/atmos
|
||||
name = "ATMOSPHERICS"
|
||||
icon_state = "atmos"
|
||||
|
||||
/obj/structure/sign/department/shield
|
||||
name = "SHIELDGEN"
|
||||
icon_state = "shield"
|
||||
|
||||
/obj/structure/sign/department/drones
|
||||
name = "DRONES"
|
||||
icon_state = "drones"
|
||||
|
||||
/obj/structure/sign/department/interrogation
|
||||
name = "INTERROGATION"
|
||||
icon_state = "interrogation"
|
||||
|
||||
/obj/structure/sign/department/commander
|
||||
name = "COMMANDER"
|
||||
icon_state = "commander"
|
||||
|
||||
/obj/structure/sign/department/armory
|
||||
name = "ARMORY"
|
||||
icon_state = "armory"
|
||||
|
||||
/obj/structure/sign/department/prison
|
||||
name = "PRISON"
|
||||
icon_state = "prison"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/material/material
|
||||
var/material/padding_material
|
||||
var/base_icon = "bed"
|
||||
var/applies_material_colour = 1 //VOREStation Add - For special color beds/chairs
|
||||
|
||||
/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc)
|
||||
@@ -45,8 +46,9 @@
|
||||
// Base icon.
|
||||
var/cache_key = "[base_icon]-[material.name]"
|
||||
if(isnull(stool_cache[cache_key]))
|
||||
var/image/I = image('icons/obj/furniture.dmi', base_icon)
|
||||
I.color = material.icon_colour
|
||||
var/image/I = image(icon, base_icon) //VOREStation Edit
|
||||
if(applies_material_colour) //VOREStation Add - Goes with added var
|
||||
I.color = material.icon_colour
|
||||
stool_cache[cache_key] = I
|
||||
overlays |= stool_cache[cache_key]
|
||||
// Padding overlay.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/structure/bed/chair //YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete
|
||||
name = "chair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - Using Eris furniture
|
||||
icon_state = "chair_preview"
|
||||
color = "#666666"
|
||||
base_icon = "chair"
|
||||
@@ -82,6 +83,15 @@
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
return
|
||||
|
||||
//VOREStation Add - Shuttle Chair
|
||||
/obj/structure/bed/chair/shuttle
|
||||
name = "chair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "shuttle_chair"
|
||||
color = null
|
||||
base_icon = "shuttle_chair"
|
||||
applies_material_colour = 0
|
||||
//VOREStation Add End
|
||||
// Leaving this in for the sake of compilation.
|
||||
/obj/structure/bed/chair/comfy
|
||||
desc = "It's a chair. It looks comfy."
|
||||
|
||||
@@ -4,7 +4,7 @@ var/global/list/stool_cache = list() //haha stool
|
||||
/obj/item/weapon/stool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
icon = 'icons/obj/furniture.dmi'
|
||||
icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - new Icons
|
||||
icon_state = "stool_preview" //set for the map
|
||||
force = 10
|
||||
throwforce = 10
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/structure/window
|
||||
name = "window"
|
||||
desc = "A window."
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon = 'icons/obj/structures_vr.dmi' // VOREStation Edit - New icons
|
||||
density = 1
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
|
||||
+4
-2
@@ -157,9 +157,11 @@ var/const/FALLOFF_SOUNDS = 0.5
|
||||
src << S
|
||||
|
||||
/client/proc/playtitlemusic()
|
||||
if(!ticker || !ticker.login_music) return
|
||||
if(!ticker || !all_lobby_tracks.len || !media) return
|
||||
if(is_preference_enabled(/datum/client_preference/play_lobby_music))
|
||||
src << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS
|
||||
var/datum/track/T = pick(all_lobby_tracks)
|
||||
media.push_music(T.url, world.time, 0.85)
|
||||
to_chat(src,"<span class='notice'>Lobby music: <b>[T.title]</b> by <b>[T.artist]</b>.</span>")
|
||||
|
||||
/proc/get_rand_frequency()
|
||||
return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs.
|
||||
|
||||
@@ -18,7 +18,7 @@ var/list/flooring_types
|
||||
// [icon_base]_corners: directional overlays for non-edge corners.
|
||||
|
||||
/decl/flooring
|
||||
var/name
|
||||
var/name = "floor"
|
||||
var/desc
|
||||
var/icon
|
||||
var/icon_base
|
||||
@@ -86,7 +86,7 @@ var/list/flooring_types
|
||||
/decl/flooring/carpet
|
||||
name = "carpet"
|
||||
desc = "Imported and comfy."
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon = 'icons/turf/flooring/carpet_vr.dmi'
|
||||
icon_base = "carpet"
|
||||
build_type = /obj/item/stack/tile/carpet
|
||||
damage_temperature = T0C+200
|
||||
@@ -98,18 +98,49 @@ var/list/flooring_types
|
||||
'sound/effects/footstep/carpet4.ogg',
|
||||
'sound/effects/footstep/carpet5.ogg'))
|
||||
|
||||
/decl/flooring/carpet/blue
|
||||
name = "carpet"
|
||||
// VOREStation Edit - Eris Carpets
|
||||
/decl/flooring/carpet/bcarpet
|
||||
name = "black carpet"
|
||||
icon_base = "bcarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/blue
|
||||
flags = TURF_HAS_EDGES | TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/carpet/bcarpet
|
||||
|
||||
/decl/flooring/carpet/blucarpet
|
||||
name = "blue carpet"
|
||||
icon_base = "blucarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/blucarpet
|
||||
|
||||
/decl/flooring/carpet/turcarpet
|
||||
name = "tur carpet"
|
||||
icon_base = "turcarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/turcarpet
|
||||
|
||||
/decl/flooring/carpet/sblucarpet
|
||||
name = "silver blue carpet"
|
||||
icon_base = "sblucarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/sblucarpet
|
||||
|
||||
/decl/flooring/carpet/gaycarpet
|
||||
name = "clown carpet"
|
||||
icon_base = "gaycarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/gaycarpet
|
||||
|
||||
/decl/flooring/carpet/purcarpet
|
||||
name = "purple carpet"
|
||||
icon_base = "purcarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/purcarpet
|
||||
|
||||
/decl/flooring/carpet/oracarpet
|
||||
name = "orange carpet"
|
||||
icon_base = "oracarpet"
|
||||
build_type = /obj/item/stack/tile/carpet/oracarpet
|
||||
// VOREStation Edit End
|
||||
|
||||
/decl/flooring/tiling
|
||||
name = "floor"
|
||||
desc = "Scuffed from the passage of countless greyshirts."
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_base = "steel"
|
||||
has_damage_range = 4
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi' // VOREStation Edit - Eris floors
|
||||
icon_base = "tiled" // VOREStation Edit - Eris floors
|
||||
has_damage_range = 2 // VOREStation Edit - Eris floors
|
||||
damage_temperature = T0C+1400
|
||||
flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN
|
||||
build_type = /obj/item/stack/tile/floor
|
||||
@@ -121,6 +152,45 @@ var/list/flooring_types
|
||||
'sound/effects/footstep/floor4.ogg',
|
||||
'sound/effects/footstep/floor5.ogg'))
|
||||
|
||||
//VOREStation Edit for icons and extra types
|
||||
/decl/flooring/tiling/tech
|
||||
desc = "Scuffed from the passage of countless greyshirts."
|
||||
icon = 'icons/turf/flooring/techfloor_vr.dmi'
|
||||
icon_base = "techfloor_gray"
|
||||
build_type = /obj/item/stack/tile/floor/techgrey
|
||||
can_paint = null
|
||||
|
||||
/decl/flooring/tiling/tech/grid
|
||||
icon_base = "techfloor_grid"
|
||||
build_type = /obj/item/stack/tile/floor/techgrid
|
||||
|
||||
/decl/flooring/tiling/new_tile
|
||||
name = "floor"
|
||||
icon_base = "tile_full"
|
||||
flags = TURF_CAN_BREAK | TURF_CAN_BURN | TURF_IS_FRAGILE
|
||||
build_type = null
|
||||
|
||||
/decl/flooring/tiling/new_tile/cargo_one
|
||||
icon_base = "cargo_one_full"
|
||||
|
||||
/decl/flooring/tiling/new_tile/kafel
|
||||
icon_base = "kafel_full"
|
||||
|
||||
/decl/flooring/tiling/new_tile/techmaint
|
||||
icon_base = "techmaint"
|
||||
|
||||
/decl/flooring/tiling/new_tile/monofloor
|
||||
icon_base = "monofloor"
|
||||
|
||||
/decl/flooring/tiling/new_tile/monotile
|
||||
icon_base = "monotile"
|
||||
|
||||
/decl/flooring/tiling/new_tile/steel_grid
|
||||
icon_base = "steel_grid"
|
||||
|
||||
/decl/flooring/tiling/new_tile/steel_ridged
|
||||
icon_base = "steel_ridged"
|
||||
|
||||
/decl/flooring/linoleum
|
||||
name = "linoleum"
|
||||
desc = "It's like the 2390's all over again."
|
||||
@@ -135,36 +205,37 @@ var/list/flooring_types
|
||||
icon_base = "white"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_red
|
||||
build_type = /obj/item/stack/tile/floor/red
|
||||
|
||||
/decl/flooring/tiling/steel
|
||||
name = "floor"
|
||||
icon_base = "steel"
|
||||
build_type = /obj/item/stack/tile/floor/steel
|
||||
|
||||
/decl/flooring/tiling/steel_dirty
|
||||
name = "floor"
|
||||
icon_base = "steel_dirty"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_steel
|
||||
build_type = /obj/item/stack/tile/floor/steel_dirty
|
||||
|
||||
/decl/flooring/tiling/asteroidfloor
|
||||
name = "floor"
|
||||
icon_base = "asteroidfloor"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_steel
|
||||
build_type = /obj/item/stack/tile/floor/steel
|
||||
|
||||
/decl/flooring/tiling/white
|
||||
name = "floor"
|
||||
desc = "How sterile."
|
||||
icon_base = "white"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_white
|
||||
build_type = /obj/item/stack/tile/floor/white
|
||||
|
||||
/decl/flooring/tiling/yellow
|
||||
name = "floor"
|
||||
icon_base = "white"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_yellow
|
||||
build_type = /obj/item/stack/tile/floor/yellow
|
||||
|
||||
/decl/flooring/tiling/dark
|
||||
name = "floor"
|
||||
@@ -172,34 +243,28 @@ var/list/flooring_types
|
||||
icon_base = "dark"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_dark
|
||||
build_type = /obj/item/stack/tile/floor/dark
|
||||
|
||||
/decl/flooring/tiling/hydro
|
||||
name = "floor"
|
||||
icon_base = "hydrofloor"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_steel
|
||||
build_type = /obj/item/stack/tile/floor/steel
|
||||
|
||||
/decl/flooring/tiling/neutral
|
||||
name = "floor"
|
||||
icon_base = "neutral"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_steel
|
||||
build_type = /obj/item/stack/tile/floor/steel
|
||||
|
||||
/decl/flooring/tiling/freezer
|
||||
name = "floor"
|
||||
desc = "Don't slip."
|
||||
icon_base = "freezer"
|
||||
has_damage_range = null
|
||||
flags = TURF_REMOVE_CROWBAR
|
||||
build_type = /obj/item/stack/tile/floor_freezer
|
||||
build_type = /obj/item/stack/tile/floor/freezer
|
||||
|
||||
/decl/flooring/wood
|
||||
name = "wooden floor"
|
||||
desc = "Polished redwood planks."
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_vr.dmi'
|
||||
icon_base = "wood"
|
||||
has_damage_range = 6
|
||||
damage_temperature = T0C+200
|
||||
|
||||
@@ -5,7 +5,7 @@ var/list/floor_decals = list()
|
||||
|
||||
/obj/effect/floor_decal
|
||||
name = "floor decal"
|
||||
icon = 'icons/turf/flooring/decals.dmi'
|
||||
icon = 'icons/turf/flooring/decals_vr.dmi'
|
||||
layer = TURF_LAYER + 0.01
|
||||
var/supplied_dir
|
||||
|
||||
@@ -14,22 +14,16 @@ var/list/floor_decals = list()
|
||||
if(newcolour) color = newcolour
|
||||
..(newloc)
|
||||
|
||||
// VOREStation Edit - Hack to workaround byond crash bug
|
||||
/obj/effect/floor_decal/initialize()
|
||||
if(supplied_dir) set_dir(supplied_dir)
|
||||
if(!floor_decals_initialized || !loc || deleted(src))
|
||||
return
|
||||
add_to_turf_decals()
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
|
||||
var/cache_key = "[alpha]-[color]-[dir]-[icon_state]-[layer]"
|
||||
if(!floor_decals[cache_key])
|
||||
var/image/I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir)
|
||||
I.layer = T.layer
|
||||
I.color = src.color
|
||||
I.alpha = src.alpha
|
||||
floor_decals[cache_key] = I
|
||||
if(!T.decals) T.decals = list()
|
||||
T.decals |= floor_decals[cache_key]
|
||||
T.overlays |= floor_decals[cache_key]
|
||||
T.apply_decals()
|
||||
qdel(src)
|
||||
return
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/effect/floor_decal/reset
|
||||
name = "reset marker"
|
||||
@@ -55,6 +49,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/black/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/black/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue
|
||||
name = "blue corner"
|
||||
color = COLOR_BLUE_GRAY
|
||||
@@ -65,6 +77,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/blue/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/blue/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue
|
||||
name = "pale blue corner"
|
||||
color = COLOR_PALE_BLUE_GRAY
|
||||
@@ -75,6 +105,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/paleblue/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/paleblue/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/green
|
||||
name = "green corner"
|
||||
color = COLOR_GREEN_GRAY
|
||||
@@ -85,6 +133,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/green/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/green/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime
|
||||
name = "lime corner"
|
||||
color = COLOR_PALE_GREEN_GRAY
|
||||
@@ -95,6 +161,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/lime/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/lime/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow
|
||||
name = "yellow corner"
|
||||
color = COLOR_BROWN
|
||||
@@ -105,6 +189,27 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/yellow/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/yellow/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige
|
||||
name = "beige corner"
|
||||
color = COLOR_BEIGE
|
||||
@@ -115,6 +220,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/beige/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/beige/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/red
|
||||
name = "red corner"
|
||||
color = COLOR_RED_GRAY
|
||||
@@ -125,6 +248,27 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/red/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/red/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink
|
||||
name = "pink corner"
|
||||
color = COLOR_PALE_RED_GRAY
|
||||
@@ -135,6 +279,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/pink/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/pink/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple
|
||||
name = "purple corner"
|
||||
color = COLOR_PURPLE_GRAY
|
||||
@@ -145,6 +307,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/purple/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/purple/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve
|
||||
name = "mauve corner"
|
||||
color = COLOR_PALE_PURPLE_GRAY
|
||||
@@ -155,6 +335,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/mauve/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/mauve/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange
|
||||
name = "orange corner"
|
||||
color = COLOR_DARK_ORANGE
|
||||
@@ -165,6 +363,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/orange/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/orange/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown
|
||||
name = "brown corner"
|
||||
color = COLOR_DARK_BROWN
|
||||
@@ -175,6 +391,25 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/brown/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/brown/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
|
||||
/obj/effect/floor_decal/corner/white
|
||||
name = "white corner"
|
||||
icon_state = "corner_white"
|
||||
@@ -185,6 +420,24 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/white/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/white/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey
|
||||
name = "grey corner"
|
||||
color = "#8D8C8C"
|
||||
@@ -195,6 +448,49 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/corner/grey/full
|
||||
icon_state = "corner_white_full"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/grey/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey
|
||||
name = "lightgrey corner"
|
||||
color = "#A8B2B6"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/diagonal
|
||||
icon_state = "corner_white_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/three_quarters
|
||||
icon_state = "corner_white_three_quarters"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/border
|
||||
icon_state = "bordercolor"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/bordercorner
|
||||
icon_state = "bordercolorcorner"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/bordercorner2
|
||||
icon_state = "bordercolorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/borderfull
|
||||
icon_state = "bordercolorfull"
|
||||
|
||||
/obj/effect/floor_decal/corner/lightgrey/bordercee
|
||||
icon_state = "bordercolorcee"
|
||||
|
||||
/obj/effect/floor_decal/spline/plain
|
||||
name = "spline - plain"
|
||||
icon_state = "spline_plain"
|
||||
@@ -213,7 +509,7 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/spline/fancy/wood/cee
|
||||
icon_state = "spline_fancy_cee"
|
||||
|
||||
/obj/effect/floor_decal/spline/fancy/wood/full
|
||||
/obj/effect/floor_decal/spline/fancy/wood/three_quarters
|
||||
icon_state = "spline_fancy_full"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning
|
||||
@@ -229,6 +525,19 @@ var/list/floor_decals = list()
|
||||
/obj/effect/floor_decal/industrial/warning/cee
|
||||
icon_state = "warningcee"
|
||||
|
||||
/obj/effect/floor_decal/industrial/danger
|
||||
name = "hazard stripes"
|
||||
icon_state = "danger"
|
||||
|
||||
/obj/effect/floor_decal/industrial/danger/corner
|
||||
icon_state = "dangercorner"
|
||||
|
||||
/obj/effect/floor_decal/industrial/danger/full
|
||||
icon_state = "dangerfull"
|
||||
|
||||
/obj/effect/floor_decal/industrial/danger/cee
|
||||
icon_state = "dangercee"
|
||||
|
||||
/obj/effect/floor_decal/industrial/warning/dust
|
||||
name = "hazard stripes"
|
||||
icon_state = "warning_dust"
|
||||
@@ -403,4 +712,441 @@ var/list/floor_decals = list()
|
||||
icon_state = "white_d2"
|
||||
|
||||
/obj/effect/floor_decal/sign/dock/three
|
||||
icon_state = "white_d3"
|
||||
icon_state = "white_d3"
|
||||
|
||||
/obj/effect/floor_decal/rust
|
||||
name = "rust"
|
||||
icon_state = "rust"
|
||||
|
||||
/obj/effect/floor_decal/rust/mono_rusted1
|
||||
icon_state = "mono_rusted1"
|
||||
|
||||
/obj/effect/floor_decal/rust/mono_rusted2
|
||||
icon_state = "mono_rusted2"
|
||||
|
||||
/obj/effect/floor_decal/rust/mono_rusted3
|
||||
icon_state = "mono_rusted3"
|
||||
|
||||
/obj/effect/floor_decal/rust/part_rusted1
|
||||
icon_state = "part_rusted1"
|
||||
|
||||
/obj/effect/floor_decal/rust/part_rusted2
|
||||
icon_state = "part_rusted2"
|
||||
|
||||
/obj/effect/floor_decal/rust/part_rusted3
|
||||
icon_state = "part_rusted3"
|
||||
|
||||
/obj/effect/floor_decal/rust/color_rusted
|
||||
icon_state = "color_rusted"
|
||||
|
||||
/obj/effect/floor_decal/rust/color_rustedcorner
|
||||
icon_state = "color_rustedcorner"
|
||||
|
||||
/obj/effect/floor_decal/rust/color_rustedfull
|
||||
icon_state = "color_rustedfull"
|
||||
|
||||
/obj/effect/floor_decal/rust/color_rustedcee
|
||||
icon_state = "color_rustedcee"
|
||||
|
||||
/obj/effect/floor_decal/rust/steel_decals_rusted1
|
||||
icon_state = "steel_decals_rusted1"
|
||||
|
||||
/obj/effect/floor_decal/rust/steel_decals_rusted2
|
||||
icon_state = "steel_decals_rusted2"
|
||||
|
||||
//Old tile
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/white
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#d9d9d9"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/white/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/white/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/blue
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#8ba7ad"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/blue/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/blue/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/yellow
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#8c6d46"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/yellow/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/yellow/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/gray
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#687172"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/gray/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/gray/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/beige
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#385e60"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/beige/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/beige/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/red
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#964e51"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/red/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/red/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/purple
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#906987"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/purple/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/purple/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/green
|
||||
name = "corner oldtile"
|
||||
icon_state = "corner_oldtile"
|
||||
color = "#46725c"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/green/diagonal
|
||||
name = "corner oldtile diagonal"
|
||||
icon_state = "corner_oldtile_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_oldtile/green/full
|
||||
name = "corner oldtile full"
|
||||
icon_state = "corner_oldtile_full"
|
||||
|
||||
//Kafel
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/white
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#d9d9d9"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/white/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/white/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/blue
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#8ba7ad"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/blue/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/blue/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/yellow
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#8c6d46"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/yellow/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/yellow/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/gray
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#687172"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/gray/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/gray/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/beige
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#385e60"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/beige/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/beige/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/red
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#964e51"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/red/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/red/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/purple
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#906987"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/purple/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/purple/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/green
|
||||
name = "corner kafel"
|
||||
icon_state = "corner_kafel"
|
||||
color = "#46725c"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/green/diagonal
|
||||
name = "corner kafel diagonal"
|
||||
icon_state = "corner_kafel_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_kafel/green/full
|
||||
name = "corner kafel full"
|
||||
icon_state = "corner_kafel_full"
|
||||
|
||||
//Techfloor
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_gray
|
||||
name = "corner techfloorgray"
|
||||
icon_state = "corner_techfloor_gray"
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_gray/diagonal
|
||||
name = "corner techfloorgray diagonal"
|
||||
icon_state = "corner_techfloor_gray_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_gray/full
|
||||
name = "corner techfloorgray full"
|
||||
icon_state = "corner_techfloor_gray_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_grid
|
||||
name = "corner techfloorgrid"
|
||||
icon_state = "corner_techfloor_grid"
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_grid/diagonal
|
||||
name = "corner techfloorgrid diagonal"
|
||||
icon_state = "corner_techfloor_grid_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_techfloor_grid/full
|
||||
name = "corner techfloorgrid full"
|
||||
icon_state = "corner_techfloor_grid_full"
|
||||
|
||||
/obj/effect/floor_decal/corner_steel_grid
|
||||
name = "corner steel_grid"
|
||||
icon_state = "steel_grid"
|
||||
|
||||
/obj/effect/floor_decal/corner_steel_grid/diagonal
|
||||
name = "corner tsteel_grid diagonal"
|
||||
icon_state = "steel_grid_diagonal"
|
||||
|
||||
/obj/effect/floor_decal/corner_steel_grid/full
|
||||
name = "corner steel_grid full"
|
||||
icon_state = "steel_grid_full"
|
||||
|
||||
/obj/effect/floor_decal/borderfloor
|
||||
name = "border floor"
|
||||
icon_state = "borderfloor"
|
||||
|
||||
/obj/effect/floor_decal/borderfloor/corner
|
||||
icon_state = "borderfloorcorner"
|
||||
|
||||
/obj/effect/floor_decal/borderfloor/corner2
|
||||
icon_state = "borderfloorcorner2"
|
||||
|
||||
/obj/effect/floor_decal/borderfloor/full
|
||||
icon_state = "borderfloorfull"
|
||||
|
||||
/obj/effect/floor_decal/borderfloor/cee
|
||||
icon_state = "borderfloorcee"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorblack
|
||||
name = "border floor"
|
||||
icon_state = "borderfloor_black"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorblack/corner
|
||||
icon_state = "borderfloorcorner_black"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorblack/corner2
|
||||
icon_state = "borderfloorcorner2_black"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorblack/full
|
||||
icon_state = "borderfloorfull_black"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorblack/cee
|
||||
icon_state = "borderfloorcee_black"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorwhite
|
||||
name = "border floor"
|
||||
icon_state = "borderfloor_white"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorwhite/corner
|
||||
icon_state = "borderfloorcorner_white"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorwhite/corner2
|
||||
icon_state = "borderfloorcorner2_white"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorwhite/full
|
||||
icon_state = "borderfloorfull_white"
|
||||
|
||||
/obj/effect/floor_decal/borderfloorwhite/cee
|
||||
icon_state = "borderfloorcee_white"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal
|
||||
name = "steel decal"
|
||||
icon_state = "steel_decals1"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals1
|
||||
icon_state = "steel_decals1"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals2
|
||||
icon_state = "steel_decals2"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals3
|
||||
icon_state = "steel_decals3"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals4
|
||||
icon_state = "steel_decals4"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals5
|
||||
icon_state = "steel_decals5"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals6
|
||||
icon_state = "steel_decals6"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals7
|
||||
icon_state = "steel_decals7"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals8
|
||||
icon_state = "steel_decals8"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals9
|
||||
icon_state = "steel_decals9"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals10
|
||||
icon_state = "steel_decals10"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central1
|
||||
icon_state = "steel_decals_central1"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central2
|
||||
icon_state = "steel_decals_central2"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central3
|
||||
icon_state = "steel_decals_central3"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central4
|
||||
icon_state = "steel_decals_central4"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central5
|
||||
icon_state = "steel_decals_central5"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central6
|
||||
icon_state = "steel_decals_central6"
|
||||
|
||||
/obj/effect/floor_decal/steeldecal/steel_decals_central7
|
||||
icon_state = "steel_decals_central7"
|
||||
|
||||
|
||||
/obj/effect/floor_decal/techfloor
|
||||
name = "techfloor edges"
|
||||
icon_state = "techfloor_edges"
|
||||
|
||||
/obj/effect/floor_decal/techfloor/corner
|
||||
name = "techfloor corner"
|
||||
icon_state = "techfloor_corners"
|
||||
|
||||
/obj/effect/floor_decal/techfloor/orange
|
||||
name = "techfloor edges"
|
||||
icon_state = "techfloororange_edges"
|
||||
|
||||
/obj/effect/floor_decal/techfloor/orange/corner
|
||||
name = "techfloor corner"
|
||||
icon_state = "techfloororange_corners"
|
||||
|
||||
/obj/effect/floor_decal/techfloor/hole
|
||||
name = "hole left"
|
||||
icon_state = "techfloor_hole_left"
|
||||
|
||||
/obj/effect/floor_decal/techfloor/hole/right
|
||||
name = "hole right"
|
||||
icon_state = "techfloor_hole_right"
|
||||
|
||||
|
||||
//Grass for ship garden
|
||||
|
||||
/obj/effect/floor_decal/grass_edge
|
||||
name = "grass edge"
|
||||
icon_state = "grass_edge"
|
||||
|
||||
/obj/effect/floor_decal/grass_edge/corner
|
||||
name = "grass edge"
|
||||
icon_state = "grass_edge_corner"
|
||||
|
||||
@@ -1,9 +1,50 @@
|
||||
/turf/simulated/floor/carpet
|
||||
name = "carpet"
|
||||
icon = 'icons/turf/flooring/carpet.dmi'
|
||||
icon = 'icons/turf/flooring/carpet_vr.dmi'
|
||||
icon_state = "carpet"
|
||||
initial_flooring = /decl/flooring/carpet
|
||||
|
||||
/turf/simulated/floor/carpet/bcarpet
|
||||
name = "black carpet"
|
||||
icon_state = "bcarpet"
|
||||
initial_flooring = /decl/flooring/carpet/bcarpet
|
||||
|
||||
/turf/simulated/floor/carpet/blucarpet
|
||||
name = "blue carpet"
|
||||
icon_state = "blucarpet"
|
||||
initial_flooring = /decl/flooring/carpet/blucarpet
|
||||
|
||||
// Legacy support for existing paths for blue carpet
|
||||
/turf/simulated/floor/carpet/blue
|
||||
name = "blue carpet"
|
||||
icon_state = "blucarpet"
|
||||
initial_flooring = /decl/flooring/carpet/blucarpet
|
||||
|
||||
/turf/simulated/floor/carpet/turcarpet
|
||||
name = "tur carpet"
|
||||
icon_state = "turcarpet"
|
||||
initial_flooring = /decl/flooring/carpet/turcarpet
|
||||
|
||||
/turf/simulated/floor/carpet/sblucarpet
|
||||
name = "sblue carpet"
|
||||
icon_state = "sblucarpet"
|
||||
initial_flooring = /decl/flooring/carpet/sblucarpet
|
||||
|
||||
/turf/simulated/floor/carpet/gaycarpet
|
||||
name = "clown carpet"
|
||||
icon_state = "gaycarpet"
|
||||
initial_flooring = /decl/flooring/carpet/gaycarpet
|
||||
|
||||
/turf/simulated/floor/carpet/purcarpet
|
||||
name = "purple carpet"
|
||||
icon_state = "purcarpet"
|
||||
initial_flooring = /decl/flooring/carpet/purcarpet
|
||||
|
||||
/turf/simulated/floor/carpet/oracarpet
|
||||
name = "orange carpet"
|
||||
icon_state = "oracarpet"
|
||||
initial_flooring = /decl/flooring/carpet/oracarpet
|
||||
|
||||
/turf/simulated/floor/bluegrid
|
||||
name = "mainframe floor"
|
||||
icon = 'icons/turf/flooring/circuit.dmi'
|
||||
@@ -18,7 +59,7 @@
|
||||
|
||||
/turf/simulated/floor/wood
|
||||
name = "wooden floor"
|
||||
icon = 'icons/turf/flooring/wood.dmi'
|
||||
icon = 'icons/turf/flooring/wood_vr.dmi'
|
||||
icon_state = "wood"
|
||||
initial_flooring = /decl/flooring/wood
|
||||
|
||||
@@ -28,17 +69,120 @@
|
||||
icon_state = "grass0"
|
||||
initial_flooring = /decl/flooring/grass
|
||||
|
||||
/turf/simulated/floor/carpet/blue
|
||||
name = "blue carpet"
|
||||
icon_state = "bcarpet"
|
||||
initial_flooring = /decl/flooring/carpet/blue
|
||||
|
||||
/turf/simulated/floor/tiled
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
icon_state = "steel"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "tiled"
|
||||
initial_flooring = /decl/flooring/tiling
|
||||
|
||||
/turf/simulated/floor/tiled/techmaint
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "techmaint"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/techmaint
|
||||
|
||||
/turf/simulated/floor/tiled/monofloor
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "monofloor"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/monofloor
|
||||
|
||||
/turf/simulated/floor/tiled/techfloor
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/techfloor_vr.dmi'
|
||||
icon_state = "techfloor_gray"
|
||||
initial_flooring = /decl/flooring/tiling/tech
|
||||
|
||||
/turf/simulated/floor/tiled/monotile
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "monotile"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/monotile
|
||||
|
||||
/turf/simulated/floor/tiled/steel_grid
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "steel_grid"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/steel_grid
|
||||
|
||||
/turf/simulated/floor/tiled/steel_ridged
|
||||
name = "floor"
|
||||
icon = 'icons/turf/flooring/tiles_vr.dmi'
|
||||
icon_state = "steel_ridged"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/steel_ridged
|
||||
|
||||
/turf/simulated/floor/tiled/old_tile
|
||||
name = "floor"
|
||||
icon_state = "tile_full"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile
|
||||
/turf/simulated/floor/tiled/old_tile/white
|
||||
color = "#d9d9d9"
|
||||
/turf/simulated/floor/tiled/old_tile/blue
|
||||
color = "#8ba7ad"
|
||||
/turf/simulated/floor/tiled/old_tile/yellow
|
||||
color = "#8c6d46"
|
||||
/turf/simulated/floor/tiled/old_tile/gray
|
||||
color = "#687172"
|
||||
/turf/simulated/floor/tiled/old_tile/beige
|
||||
color = "#385e60"
|
||||
/turf/simulated/floor/tiled/old_tile/red
|
||||
color = "#964e51"
|
||||
/turf/simulated/floor/tiled/old_tile/purple
|
||||
color = "#906987"
|
||||
/turf/simulated/floor/tiled/old_tile/green
|
||||
color = "#46725c"
|
||||
|
||||
|
||||
|
||||
/turf/simulated/floor/tiled/old_cargo
|
||||
name = "floor"
|
||||
icon_state = "cargo_one_full"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/cargo_one
|
||||
/turf/simulated/floor/tiled/old_cargo/white
|
||||
color = "#d9d9d9"
|
||||
/turf/simulated/floor/tiled/old_cargo/blue
|
||||
color = "#8ba7ad"
|
||||
/turf/simulated/floor/tiled/old_cargo/yellow
|
||||
color = "#8c6d46"
|
||||
/turf/simulated/floor/tiled/old_cargo/gray
|
||||
color = "#687172"
|
||||
/turf/simulated/floor/tiled/old_cargo/beige
|
||||
color = "#385e60"
|
||||
/turf/simulated/floor/tiled/old_cargo/red
|
||||
color = "#964e51"
|
||||
/turf/simulated/floor/tiled/old_cargo/purple
|
||||
color = "#906987"
|
||||
/turf/simulated/floor/tiled/old_cargo/green
|
||||
color = "#46725c"
|
||||
|
||||
|
||||
/turf/simulated/floor/tiled/kafel_full
|
||||
name = "floor"
|
||||
icon_state = "kafel_full"
|
||||
initial_flooring = /decl/flooring/tiling/new_tile/kafel
|
||||
/turf/simulated/floor/tiled/kafel_full/white
|
||||
color = "#d9d9d9"
|
||||
/turf/simulated/floor/tiled/kafel_full/blue
|
||||
color = "#8ba7ad"
|
||||
/turf/simulated/floor/tiled/kafel_full/yellow
|
||||
color = "#8c6d46"
|
||||
/turf/simulated/floor/tiled/kafel_full/gray
|
||||
color = "#687172"
|
||||
/turf/simulated/floor/tiled/kafel_full/beige
|
||||
color = "#385e60"
|
||||
/turf/simulated/floor/tiled/kafel_full/red
|
||||
color = "#964e51"
|
||||
/turf/simulated/floor/tiled/kafel_full/purple
|
||||
color = "#906987"
|
||||
/turf/simulated/floor/tiled/kafel_full/green
|
||||
color = "#46725c"
|
||||
|
||||
|
||||
/turf/simulated/floor/tiled/techfloor/grid
|
||||
name = "floor"
|
||||
icon_state = "techfloor_grid"
|
||||
initial_flooring = /decl/flooring/tiling/tech/grid
|
||||
|
||||
/turf/simulated/floor/reinforced
|
||||
name = "reinforced floor"
|
||||
icon = 'icons/turf/flooring/tiles.dmi'
|
||||
@@ -113,9 +257,14 @@
|
||||
|
||||
/turf/simulated/floor/tiled/steel
|
||||
name = "steel floor"
|
||||
icon_state = "steel_dirty"
|
||||
icon_state = "steel"
|
||||
initial_flooring = /decl/flooring/tiling/steel
|
||||
|
||||
/turf/simulated/floor/tiled/steel_dirty
|
||||
name = "steel floor"
|
||||
icon_state = "steel_dirty"
|
||||
initial_flooring = /decl/flooring/tiling/steel_dirty
|
||||
|
||||
/turf/simulated/floor/tiled/steel/airless
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
//
|
||||
// Initialize floor decals! Woo! This is crazy.
|
||||
//
|
||||
|
||||
var/global/floor_decals_initialized = FALSE
|
||||
|
||||
// The Turf Decal Holder
|
||||
// Since it is unsafe to add overlays to turfs, we hold them here for now.
|
||||
// Since I want this object to basically not exist, I am modeling it in part after lighting_overlay
|
||||
/atom/movable/turf_overlay_holder
|
||||
name = "turf overlay holder"
|
||||
density = 0
|
||||
simulated = 0
|
||||
anchored = 1
|
||||
layer = TURF_LAYER
|
||||
icon = null
|
||||
icon_state = null
|
||||
mouse_opacity = 0
|
||||
auto_init = 0
|
||||
|
||||
/atom/movable/turf_overlay_holder/New(var/atom/newloc)
|
||||
..()
|
||||
verbs.Cut()
|
||||
var/turf/T = loc
|
||||
T.overlay_holder = src
|
||||
|
||||
/atom/movable/turf_overlay_holder/Destroy()
|
||||
if(loc)
|
||||
var/turf/T = loc
|
||||
if(T.overlay_holder == src)
|
||||
T.overlay_holder = null
|
||||
. = ..()
|
||||
|
||||
// Variety of overrides so the overlays don't get affected by weird things.
|
||||
/atom/movable/turf_overlay_holder/ex_act()
|
||||
return
|
||||
|
||||
/atom/movable/turf_overlay_holder/singularity_act()
|
||||
return
|
||||
|
||||
/atom/movable/turf_overlay_holder/singularity_pull()
|
||||
return
|
||||
|
||||
/atom/movable/turf_overlay_holder/forceMove()
|
||||
return 0 //should never move
|
||||
|
||||
/atom/movable/turf_overlay_holder/Move()
|
||||
return 0
|
||||
|
||||
/atom/movable/turf_overlay_holder/throw_at()
|
||||
return 0
|
||||
|
||||
/obj/effect/floor_decal/proc/add_to_turf_decals()
|
||||
if(src.supplied_dir) src.set_dir(src.supplied_dir)
|
||||
var/turf/T = get_turf(src)
|
||||
if(istype(T, /turf/simulated/floor) || istype(T, /turf/unsimulated/floor) || istype(T, /turf/simulated/shuttle/floor))
|
||||
var/cache_key = "[src.alpha]-[src.color]-[src.dir]-[src.icon_state]-[T.layer]"
|
||||
var/image/I = floor_decals[cache_key]
|
||||
if(!I)
|
||||
I = image(icon = src.icon, icon_state = src.icon_state, dir = src.dir)
|
||||
I.layer = T.layer
|
||||
I.color = src.color
|
||||
I.alpha = src.alpha
|
||||
floor_decals[cache_key] = I
|
||||
if(!T.decals) T.decals = list()
|
||||
//world.log << "About to add img:\ref[I] onto decals at turf:\ref[T] ([T.x],[T.y],[T.z]) which has appearance:\ref[T.appearance] and decals.len=[T.decals.len]"
|
||||
T.decals += I
|
||||
return T
|
||||
// qdel(D)
|
||||
src.loc = null
|
||||
src.tag = null
|
||||
|
||||
// Changes to turf to let us do this
|
||||
/turf
|
||||
var/atom/movable/turf_overlay_holder/overlay_holder = null
|
||||
|
||||
// After a turf change, destroy the old overlay holder since we will have lost access to it.
|
||||
/turf/post_change()
|
||||
var/atom/movable/turf_overlay_holder/TOH = locate(/atom/movable/turf_overlay_holder, src)
|
||||
if(TOH)
|
||||
qdel(TOH)
|
||||
..()
|
||||
|
||||
/turf/proc/apply_decals()
|
||||
if(decals)
|
||||
if(!overlay_holder)
|
||||
overlay_holder = new(src)
|
||||
overlay_holder.overlays = src.decals
|
||||
else if(overlay_holder)
|
||||
overlay_holder.overlays.Cut()
|
||||
@@ -1,7 +1,7 @@
|
||||
/turf/simulated/floor
|
||||
name = "plating"
|
||||
desc = "Unfinished flooring."
|
||||
icon = 'icons/turf/flooring/plating.dmi'
|
||||
icon = 'icons/turf/flooring/plating_vr.dmi'
|
||||
icon_state = "plating"
|
||||
|
||||
// Damage to flooring.
|
||||
@@ -11,7 +11,7 @@
|
||||
// Plating data.
|
||||
var/base_name = "plating"
|
||||
var/base_desc = "The naked hull."
|
||||
var/base_icon = 'icons/turf/flooring/plating.dmi'
|
||||
var/base_icon = 'icons/turf/flooring/plating_vr.dmi'
|
||||
var/base_icon_state = "plating"
|
||||
var/static/list/base_footstep_sounds = list("human" = list(
|
||||
'sound/effects/footstep/plating1.ogg',
|
||||
@@ -20,6 +20,8 @@
|
||||
'sound/effects/footstep/plating4.ogg',
|
||||
'sound/effects/footstep/plating5.ogg'))
|
||||
|
||||
var/list/old_decals = null // VOREStation Edit - Remember what decals we had between being pried up and replaced.
|
||||
|
||||
// Flooring data.
|
||||
var/flooring_override
|
||||
var/initial_flooring
|
||||
@@ -46,6 +48,11 @@
|
||||
make_plating(defer_icon_update = 1)
|
||||
flooring = newflooring
|
||||
footstep_sounds = newflooring.footstep_sounds
|
||||
// VOREStation Edit - Remember decals from before we were pried up
|
||||
if(islist(old_decals))
|
||||
decals = old_decals
|
||||
old_decals = null
|
||||
// VOREStation Edit End
|
||||
update_icon(1)
|
||||
levelupdate()
|
||||
|
||||
@@ -55,7 +62,10 @@
|
||||
|
||||
overlays.Cut()
|
||||
if(islist(decals))
|
||||
decals.Cut()
|
||||
// VOREStation Edit - Don't forget decals when pried up
|
||||
if(flooring)
|
||||
old_decals = decals
|
||||
// VOREStation Edit End
|
||||
decals = null
|
||||
|
||||
name = base_name
|
||||
|
||||
@@ -60,8 +60,11 @@ var/list/flooring_cache = list()
|
||||
if(!(istype(T) && T.flooring && T.flooring.name == flooring.name))
|
||||
overlays |= get_flooring_overlay("[flooring.icon_base]-corner-[SOUTHWEST]", "[flooring.icon_base]_corners", SOUTHWEST)
|
||||
|
||||
if(decals && decals.len)
|
||||
overlays |= decals
|
||||
// VOREStation Edit - Hack workaround to byond crash bug
|
||||
//if(decals && decals.len)
|
||||
//overlays |= decals
|
||||
apply_decals()
|
||||
// VOREStation Edit End
|
||||
|
||||
if(is_plating() && !(isnull(broken) && isnull(burnt))) //temp, todo
|
||||
icon = 'icons/turf/flooring/plating.dmi'
|
||||
|
||||
@@ -316,37 +316,37 @@
|
||||
|
||||
for(var/obj/machinery/power/apc/APC in world)
|
||||
var/area/A = get_area(APC)
|
||||
if(!(A.type in areas_with_APC))
|
||||
if(A && !(A.type in areas_with_APC))
|
||||
areas_with_APC.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/alarm/alarm in world)
|
||||
var/area/A = get_area(alarm)
|
||||
if(!(A.type in areas_with_air_alarm))
|
||||
if(A && !(A.type in areas_with_air_alarm))
|
||||
areas_with_air_alarm.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/requests_console/RC in world)
|
||||
var/area/A = get_area(RC)
|
||||
if(!(A.type in areas_with_RC))
|
||||
if(A && !(A.type in areas_with_RC))
|
||||
areas_with_RC.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/light/L in world)
|
||||
var/area/A = get_area(L)
|
||||
if(!(A.type in areas_with_light))
|
||||
if(A && !(A.type in areas_with_light))
|
||||
areas_with_light.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/light_switch/LS in world)
|
||||
var/area/A = get_area(LS)
|
||||
if(!(A.type in areas_with_LS))
|
||||
if(A && !(A.type in areas_with_LS))
|
||||
areas_with_LS.Add(A.type)
|
||||
|
||||
for(var/obj/item/device/radio/intercom/I in world)
|
||||
var/area/A = get_area(I)
|
||||
if(!(A.type in areas_with_intercom))
|
||||
if(A && !(A.type in areas_with_intercom))
|
||||
areas_with_intercom.Add(A.type)
|
||||
|
||||
for(var/obj/machinery/camera/C in world)
|
||||
var/area/A = get_area(C)
|
||||
if(!(A.type in areas_with_camera))
|
||||
if(A && !(A.type in areas_with_camera))
|
||||
areas_with_camera.Add(A.type)
|
||||
|
||||
var/list/areas_without_APC = areas_all - areas_with_APC
|
||||
|
||||
@@ -60,10 +60,13 @@ var/list/_client_preferences_by_type
|
||||
key = "SOUND_LOBBY"
|
||||
|
||||
/datum/client_preference/play_lobby_music/toggled(var/mob/preference_mob, var/enabled)
|
||||
if(!preference_mob.client || !preference_mob.client.media)
|
||||
return
|
||||
|
||||
if(enabled)
|
||||
preference_mob << sound(ticker.login_music, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
preference_mob.client.playtitlemusic()
|
||||
else
|
||||
preference_mob << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1)
|
||||
preference_mob.client.media.stop_music()
|
||||
|
||||
/datum/client_preference/play_ambiance
|
||||
description ="Play ambience"
|
||||
|
||||
@@ -22,3 +22,28 @@
|
||||
to_chat(user,"<span class='notice'>You shake [M] out of \the [src]!</span>")
|
||||
|
||||
..()
|
||||
|
||||
//Mask
|
||||
/obj/item/clothing/mask
|
||||
name = "mask"
|
||||
icon = 'icons/obj/clothing/masks_vr.dmi'
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_masks.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_masks.dmi',
|
||||
)
|
||||
body_parts_covered = HEAD
|
||||
slot_flags = SLOT_MASK
|
||||
body_parts_covered = FACE|EYES
|
||||
sprite_sheets = list(
|
||||
"Teshari" = 'icons/mob/species/seromi/masks_vr.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/masks.dmi',
|
||||
"Tajara" = 'icons/mob/species/tajaran/mask_vr.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask_vr.dmi',
|
||||
"Sergal" = 'icons/mob/species/sergal/mask_vr.dmi',
|
||||
"Nevrean" = 'icons/mob/species/nevrean/mask_vr.dmi',
|
||||
"Fox" = 'icons/mob/species/fox/mask_vr.dmi',
|
||||
"Fennec" = 'icons/mob/species/fennec/mask_vr.dmi',
|
||||
"Akula" = 'icons/mob/species/akula/mask_vr.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Xenochimera" = 'icons/mob/species/tajaran/mask_vr.dmi'
|
||||
)
|
||||
@@ -1,6 +1,7 @@
|
||||
/obj/item/clothing/mask/gas
|
||||
name = "gas mask"
|
||||
desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
|
||||
//icon = 'icons/obj/clothing/masks_vr.dmi'
|
||||
icon_state = "gas_alt"
|
||||
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
@@ -27,6 +28,20 @@
|
||||
|
||||
return filtered
|
||||
|
||||
// VOREStation Edit - Our clear gas masks don't hide faces. But changing the var on mask/gas would require un-chaging it on all children. This is nicer.
|
||||
/obj/item/clothing/mask/gas/New()
|
||||
if(type == /obj/item/clothing/mask/gas)
|
||||
flags_inv &= ~HIDEFACE
|
||||
..()
|
||||
// VOREStation Edit End
|
||||
|
||||
// VOREStation Edit - Since we changed the gas mask sprite, if we want the old one for some reason use this.
|
||||
/obj/item/clothing/mask/gas/wwii
|
||||
icon = 'icons/obj/clothing/masks.dmi'
|
||||
icon_override = 'icons/mob/mask.dmi'
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/item/clothing/mask/gas/half
|
||||
name = "face mask"
|
||||
desc = "A compact, durable gas mask that can be connected to an air supply."
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
//NanoTrasen Security Uniforms
|
||||
|
||||
/obj/item/clothing/under/nanotrasen
|
||||
name = "NanoTrasen uniform"
|
||||
desc = "A comfortable turtleneck and black trousers sporting nanotrasen symbols."
|
||||
icon_state = "navyutility"
|
||||
worn_state = "navyutility"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/nanotrasen/security
|
||||
name = "NanoTrasen security uniform"
|
||||
desc = "The security uniform of NanoTrasen's security. It looks sturdy and well padded"
|
||||
icon_state = "navyutility_sec"
|
||||
worn_state = "navyutility_sec"
|
||||
armor = list(melee = 10, bullet = 10, laser = 10,energy = 10, bomb = 10, bio = 10, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/nanotrasen/security/warden
|
||||
name = "NanoTrasen warden uniform"
|
||||
desc = "The uniform of the NanoTrasen's prison wardens. It looks sturdy and well padded. This one has gold cuffs."
|
||||
icon_state = "navyutility_com"
|
||||
worn_state = "navyutility_com"
|
||||
|
||||
/obj/item/clothing/under/nanotrasen/security/commander
|
||||
name = "NanoTrasen security command uniform"
|
||||
desc = "The uniform of the NanoTrasen's security commanding officers. It looks sturdy and well padded. This one has gold trim and red blazes."
|
||||
icon_state = "blackutility_seccom"
|
||||
worn_state = "blackutility_seccom"
|
||||
|
||||
//Head Gear
|
||||
|
||||
/obj/item/clothing/head/soft/nanotrasen
|
||||
name = "NanoTrasen security cap"
|
||||
desc = "It's a NT blue ballcap with a NanoTrasen crest. It looks surprisingly sturdy."
|
||||
icon_state = "fleetsoft"
|
||||
item_state_slots = list(
|
||||
slot_l_hand_str = "darkbluesoft",
|
||||
slot_r_hand_str = "darkbluesoft",
|
||||
)
|
||||
armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 5, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/beret/nanotrasen
|
||||
name = "NanoTrasen security beret"
|
||||
desc = "A NT blue beret belonging to the NanoTrasen security forces. For personnel that are more inclined towards style than safety."
|
||||
icon_state = "beret_navy"
|
||||
|
||||
//Armor
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/nanotrasen
|
||||
name = "security armor vest"
|
||||
desc = "A Sturdy kevlar plate carrier with webbing attached."
|
||||
icon_state = "webvest"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
armor = list(melee = 50, bullet = 40, laser = 40, energy = 25, bomb = 25, bio = 0, rad = 0)
|
||||
slowdown = 0.5
|
||||
@@ -128,8 +128,8 @@
|
||||
if(href_list["program"])
|
||||
var/prog = href_list["program"]
|
||||
if(prog in (supported_programs + restricted_programs))
|
||||
loadProgram(prog)
|
||||
current_program = prog
|
||||
if(loadProgram(prog))
|
||||
current_program = prog
|
||||
|
||||
else if(href_list["AIoverride"])
|
||||
if(!issilicon(usr))
|
||||
@@ -294,11 +294,11 @@
|
||||
if(check_delay)
|
||||
if(world.time < (last_change + 25))
|
||||
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
|
||||
return
|
||||
return 0
|
||||
for(var/mob/M in range(3,src))
|
||||
M.show_message("\b ERROR. Recalibrating projection apparatus.")
|
||||
last_change = world.time
|
||||
return
|
||||
return 0
|
||||
|
||||
last_change = world.time
|
||||
active = 1
|
||||
@@ -349,6 +349,8 @@
|
||||
|
||||
update_projections()
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/toggleGravity(var/area/A)
|
||||
if(world.time < (last_gravity_change + 25))
|
||||
|
||||
@@ -231,7 +231,15 @@
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user << ("<span class='notice'>It's a holochair, you can't dismantle it!</span>")
|
||||
return
|
||||
//VOREStation Add
|
||||
/obj/structure/bed/holobed/Destroy()
|
||||
..()
|
||||
|
||||
/obj/structure/bed/holobed/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user << ("<span class='notice'>It's a holochair, you can't dismantle it!</span>")
|
||||
return
|
||||
//VOREStation Add End
|
||||
/obj/item/weapon/holo
|
||||
damtype = HALLOSS
|
||||
no_attack_log = 1
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
//
|
||||
// Holomap generation.
|
||||
// Based on /vg/station but trimmed down (without antag stuff) and massively optimized (you should have seen it before!) ~Leshana
|
||||
//
|
||||
|
||||
// Define what criteria makes a turf a path or not
|
||||
|
||||
// Turfs that will be colored as HOLOMAP_ROCK
|
||||
#define IS_ROCK(tile) (istype(tile, /turf/simulated/mineral) && tile.density)
|
||||
|
||||
// Turfs that will be colored as HOLOMAP_OBSTACLE
|
||||
#define IS_OBSTACLE(tile) ((!istype(tile, /turf/space) && istype(tile.loc, /area/mine/unexplored)) \
|
||||
|| istype(tile, /turf/simulated/wall) \
|
||||
|| istype(tile, /turf/unsimulated/mineral) \
|
||||
|| (istype(tile, /turf/unsimulated/wall) && !istype(tile, /turf/unsimulated/wall/planetary)) \
|
||||
/*|| istype(tile, /turf/simulated/shuttle/wall)*/ \
|
||||
|| (locate(/obj/structure/grille) in tile) \
|
||||
/*|| (locate(/obj/structure/window/full) in tile)*/)
|
||||
|
||||
// Turfs that will be colored as HOLOMAP_PATH
|
||||
#define IS_PATH(tile) ((istype(tile, /turf/simulated/floor) && !istype(tile, /turf/simulated/floor/outdoors)) \
|
||||
|| istype(tile, /turf/unsimulated/floor) \
|
||||
/*|| istype(tile, /turf/simulated/shuttle/floor)*/ \
|
||||
|| (locate(/obj/structure/catwalk) in tile))
|
||||
|
||||
|
||||
// WARNING - TOTAL HACK - HOOKING INIT
|
||||
/datum/controller/game_controller/setup_objects()
|
||||
..()
|
||||
generateHoloMinimaps()
|
||||
|
||||
/// Generates all the holo minimaps, initializing it all nicely, probably.
|
||||
// TODO - This should be a subsystem ~Leshana
|
||||
var/global/holomaps_initialized = FALSE
|
||||
var/global/list/holoMiniMaps = list()
|
||||
var/global/list/extraMiniMaps = list()
|
||||
/proc/generateHoloMinimaps()
|
||||
var/start_time = world.timeofday
|
||||
// Build the base map for each z level
|
||||
for (var/z = 1 to world.maxz)
|
||||
global.holoMiniMaps |= z // hack, todo fix
|
||||
global.holoMiniMaps[z] = generateHoloMinimap(z)
|
||||
|
||||
// Generate the area overlays, small maps, etc for the station levels.
|
||||
for (var/z in using_map.station_levels)
|
||||
generateStationMinimap(z)
|
||||
|
||||
if(using_map.holomap_smoosh)
|
||||
for(var/smoosh_list in using_map.holomap_smoosh)
|
||||
smooshTetherHolomaps(smoosh_list)
|
||||
|
||||
global.holomaps_initialized = TRUE
|
||||
admin_notice("<span class='notice'>Holomaps initialized in [round(0.1*(world.timeofday-start_time),0.1)] seconds.</span>", R_DEBUG)
|
||||
|
||||
// TODO - Check - They had a delayed init perhaps?
|
||||
for (var/obj/machinery/station_map/S in station_holomaps)
|
||||
S.initialize()
|
||||
|
||||
// Generates the "base" holomap for one z-level, showing only the physical structure of walls and paths.
|
||||
/proc/generateHoloMinimap(var/zLevel = 1)
|
||||
// Save these values now to avoid a bazillion array lookups
|
||||
var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zLevel)
|
||||
var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zLevel)
|
||||
|
||||
// Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime
|
||||
var/icon/canvas = icon(HOLOMAP_ICON, "blank")
|
||||
if(world.maxx + offset_x > canvas.Width())
|
||||
crash_with("Minimap for z=[zLevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]")
|
||||
if(world.maxy + offset_y > canvas.Height())
|
||||
crash_with("Minimap for z=[zLevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]")
|
||||
|
||||
for(var/x = 1 to world.maxx)
|
||||
for(var/y = 1 to world.maxy)
|
||||
var/turf/tile = locate(x, y, zLevel)
|
||||
if(tile && tile.loc:holomapAlwaysDraw())
|
||||
if(IS_ROCK(tile))
|
||||
canvas.DrawBox(HOLOMAP_ROCK, x + offset_x, y + offset_y)
|
||||
if(IS_OBSTACLE(tile))
|
||||
canvas.DrawBox(HOLOMAP_OBSTACLE, x + offset_x, y + offset_y)
|
||||
else if(IS_PATH(tile))
|
||||
canvas.DrawBox(HOLOMAP_PATH, x + offset_x, y + offset_y)
|
||||
// Check sleeping after each row to avoid *completely* destroying the server
|
||||
if(world.tick_usage >= 80) sleep(world.tick_lag * 0.2)
|
||||
return canvas
|
||||
|
||||
// Okay, what does this one do?
|
||||
// This seems to do the drawing thing, but draws only the areas, having nothing to do with the tiles.
|
||||
// Leshana: I'm guessing this map will get overlayed on top of the base map at runtime? We'll see.
|
||||
// Wait, seems we actually blend the area map on top of it right now! Huh.
|
||||
/proc/generateStationMinimap(var/zLevel)
|
||||
// Save these values now to avoid a bazillion array lookups
|
||||
var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zLevel)
|
||||
var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zLevel)
|
||||
|
||||
// Sanity checks - Better to generate a helpful error message now than have DrawBox() runtime
|
||||
var/icon/canvas = icon(HOLOMAP_ICON, "blank")
|
||||
if(world.maxx + offset_x > canvas.Width())
|
||||
crash_with("Minimap for z=[zLevel] : world.maxx ([world.maxx]) + holomap_offset_x ([offset_x]) must be <= [canvas.Width()]")
|
||||
if(world.maxy + offset_y > canvas.Height())
|
||||
crash_with("Minimap for z=[zLevel] : world.maxy ([world.maxy]) + holomap_offset_y ([offset_y]) must be <= [canvas.Height()]")
|
||||
|
||||
for(var/x = 1 to world.maxx)
|
||||
for(var/y = 1 to world.maxy)
|
||||
var/turf/tile = locate(x, y, zLevel)
|
||||
if(tile && tile.loc)
|
||||
var/area/areaToPaint = tile.loc
|
||||
if(areaToPaint.holomap_color)
|
||||
canvas.DrawBox(areaToPaint.holomap_color, x + offset_x, y + offset_y)
|
||||
|
||||
// Save this nice area-colored canvas in case we want to layer it or something I guess
|
||||
extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPAREAS]_[zLevel]"] = canvas
|
||||
|
||||
var/icon/map_base = icon(holoMiniMaps[zLevel])
|
||||
map_base.Blend(HOLOMAP_HOLOFIER, ICON_MULTIPLY)
|
||||
|
||||
// Generate the full sized map by blending the base and areas onto the backdrop
|
||||
var/icon/big_map = icon(HOLOMAP_ICON, "stationmap")
|
||||
big_map.Blend(map_base, ICON_OVERLAY)
|
||||
big_map.Blend(canvas, ICON_OVERLAY)
|
||||
extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAP]_[zLevel]"] = big_map
|
||||
|
||||
// Generate the "small" map (I presume for putting on wall map things?)
|
||||
var/icon/small_map = icon(HOLOMAP_ICON, "blank")
|
||||
small_map.Blend(map_base, ICON_OVERLAY)
|
||||
small_map.Blend(canvas, ICON_OVERLAY)
|
||||
small_map.Scale(WORLD_ICON_SIZE, WORLD_ICON_SIZE)
|
||||
|
||||
// And rotate it in every direction of course!
|
||||
var/icon/actual_small_map = icon(small_map)
|
||||
actual_small_map.Insert(new_icon = small_map, dir = SOUTH)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 90), dir = WEST)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 180), dir = NORTH)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 270), dir = EAST)
|
||||
extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[zLevel]"] = actual_small_map
|
||||
|
||||
// For tiny multi-z maps like the tether, we want to smoosh em together into a nice big one!
|
||||
/proc/smooshTetherHolomaps(var/list/zlevels)
|
||||
var/icon/big_map = icon(HOLOMAP_ICON, "stationmap")
|
||||
var/icon/small_map = icon(HOLOMAP_ICON, "blank")
|
||||
// For each zlevel in turn, overlay them on top of each other
|
||||
for(var/zLevel in zlevels)
|
||||
var/icon/z_terrain = icon(holoMiniMaps[zLevel])
|
||||
z_terrain.Blend(HOLOMAP_HOLOFIER, ICON_MULTIPLY)
|
||||
big_map.Blend(z_terrain, ICON_OVERLAY)
|
||||
small_map.Blend(z_terrain, ICON_OVERLAY)
|
||||
var/icon/z_areas = extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPAREAS]_[zLevel]"]
|
||||
big_map.Blend(z_areas, ICON_OVERLAY)
|
||||
small_map.Blend(z_areas, ICON_OVERLAY)
|
||||
|
||||
// Then scale and rotate to make the actual small map we will use
|
||||
small_map.Scale(WORLD_ICON_SIZE, WORLD_ICON_SIZE)
|
||||
var/icon/actual_small_map = icon(small_map)
|
||||
actual_small_map.Insert(new_icon = small_map, dir = SOUTH)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 90), dir = WEST)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 180), dir = NORTH)
|
||||
actual_small_map.Insert(new_icon = turn(small_map, 270), dir = EAST)
|
||||
|
||||
// Then assign this icon as the icon for all those levels!
|
||||
for(var/zLevel in zlevels)
|
||||
extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAP]_[zLevel]"] = big_map
|
||||
extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[zLevel]"] = actual_small_map
|
||||
|
||||
// TODO - Holomap Markers!
|
||||
// /proc/generateMinimapMarkers(var/zLevel)
|
||||
// // Save these values now to avoid a bazillion array lookups
|
||||
// var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zLevel)
|
||||
// var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zLevel)
|
||||
|
||||
// // TODO - Holomap markers
|
||||
// for(var/filter in list(HOLOMAP_FILTER_STATIONMAP))
|
||||
// var/icon/canvas = icon(HOLOMAP_ICON, "blank")
|
||||
// for(/datum/holomap_marker/holomarker in holomap_markers)
|
||||
// if(holomarker.z == zLevel && holomarker.filter & filter)
|
||||
// canvas.Blend(icon(holomarker.icon, holomarker.icon_state), ICON_OVERLAY, holomarker.x + offset_x, holomarker.y + offset_y)
|
||||
// extraMiniMaps["[HOLOMAP_EXTRA_MARKERS]_[filter]_[zLevel]"] = canvas
|
||||
|
||||
// /datum/holomap_marker
|
||||
// var/x
|
||||
// var/y
|
||||
// var/z
|
||||
// var/filter
|
||||
// var/icon = 'icons/holomap_markers.dmi'
|
||||
// var/icon_state
|
||||
|
||||
#undef IS_ROCK
|
||||
#undef IS_OBSTACLE
|
||||
#undef IS_PATH
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
** Holomap vars and procs on /area
|
||||
*/
|
||||
|
||||
/area
|
||||
var/holomap_color = null // Color of this area on station holomap
|
||||
|
||||
/area/rnd
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
/area/outpost/research
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
/area/server
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
/area/assembly
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
|
||||
/area/bridge
|
||||
holomap_color = HOLOMAP_AREACOLOR_COMMAND
|
||||
/area/teleporter
|
||||
holomap_color = HOLOMAP_AREACOLOR_COMMAND
|
||||
/area/teleporter/departing
|
||||
holomap_color = null
|
||||
|
||||
/area/security
|
||||
holomap_color = HOLOMAP_AREACOLOR_SECURITY
|
||||
/area/tether/surfacebase/security
|
||||
holomap_color = HOLOMAP_AREACOLOR_SECURITY
|
||||
|
||||
/area/medical
|
||||
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
|
||||
/area/tether/surfacebase/medical
|
||||
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
|
||||
|
||||
/area/engineering
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
/area/maintenance/substation/engineering
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
/area/storage/tech
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
|
||||
/area/quartermaster
|
||||
holomap_color = HOLOMAP_AREACOLOR_CARGO
|
||||
/area/tether/surfacebase/mining_main
|
||||
holomap_color = HOLOMAP_AREACOLOR_CARGO
|
||||
|
||||
/area/hallway
|
||||
holomap_color = HOLOMAP_AREACOLOR_HALLWAYS
|
||||
/area/bridge/hallway
|
||||
holomap_color = HOLOMAP_AREACOLOR_HALLWAYS
|
||||
|
||||
/area/crew_quarters/sleep
|
||||
holomap_color = HOLOMAP_AREACOLOR_DORMS
|
||||
/area/crew_quarters/sleep/cryo
|
||||
holomap_color = null
|
||||
|
||||
// Heads
|
||||
/area/crew_quarters/captain
|
||||
holomap_color = HOLOMAP_AREACOLOR_COMMAND
|
||||
/area/crew_quarters/heads/hop
|
||||
holomap_color = HOLOMAP_AREACOLOR_COMMAND
|
||||
/area/crew_quarters/heads/hor
|
||||
holomap_color = HOLOMAP_AREACOLOR_SCIENCE
|
||||
/area/crew_quarters/heads/chief
|
||||
holomap_color = HOLOMAP_AREACOLOR_ENGINEERING
|
||||
/area/crew_quarters/heads/hos
|
||||
holomap_color = HOLOMAP_AREACOLOR_SECURITY
|
||||
/area/crew_quarters/heads/cmo
|
||||
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
|
||||
/area/crew_quarters/medbreak
|
||||
holomap_color = HOLOMAP_AREACOLOR_MEDICAL
|
||||
|
||||
|
||||
// ### PROCS ###
|
||||
// Whether the turfs in the area should be drawn onto the "base" holomap.
|
||||
/area/proc/holomapAlwaysDraw()
|
||||
return TRUE
|
||||
/area/shuttle/holomapAlwaysDraw()
|
||||
return FALSE
|
||||
@@ -0,0 +1,40 @@
|
||||
// Simple datum to keep track of a running holomap. Each machine capable of displaying the holomap will have one.
|
||||
/datum/station_holomap
|
||||
var/image/station_map
|
||||
var/image/cursor
|
||||
var/image/legend
|
||||
|
||||
/datum/station_holomap/proc/initialize_holomap(var/turf/T, var/isAI = null, var/mob/user = null, var/reinit = FALSE)
|
||||
if(!station_map || reinit)
|
||||
station_map = image(extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAP]_[T.z]"])
|
||||
if(!cursor || reinit)
|
||||
cursor = image('icons/holomap_markers_vr.dmi', "you")
|
||||
if(!legend || reinit)
|
||||
legend = image('icons/effects/64x64_vr.dmi', "legend")
|
||||
|
||||
if(isAI)
|
||||
T = get_turf(user.client.eye)
|
||||
cursor.pixel_x = (T.x - 6 + HOLOMAP_PIXEL_OFFSET_X(T.z)) * PIXEL_MULTIPLIER
|
||||
cursor.pixel_y = (T.y - 6 + HOLOMAP_PIXEL_OFFSET_Y(T.z)) * PIXEL_MULTIPLIER
|
||||
|
||||
legend.pixel_x = HOLOMAP_LEGEND_X(T.z)
|
||||
legend.pixel_y = HOLOMAP_LEGEND_Y(T.z)
|
||||
|
||||
station_map.overlays |= cursor
|
||||
station_map.overlays |= legend
|
||||
|
||||
/datum/station_holomap/proc/initialize_holomap_bogus()
|
||||
station_map = image('icons/480x480_vr.dmi', "stationmap")
|
||||
legend = image('icons/effects/64x64_vr.dmi', "notfound")
|
||||
legend.pixel_x = 7 * WORLD_ICON_SIZE
|
||||
legend.pixel_y = 7 * WORLD_ICON_SIZE
|
||||
station_map.overlays |= legend
|
||||
|
||||
// TODO - Strategic Holomap support
|
||||
// /datum/station_holomap/strategic/initialize_holomap(var/turf/T, var/isAI=null, var/mob/user=null)
|
||||
// ..()
|
||||
// station_map = image(extraMiniMaps[HOLOMAP_EXTRA_STATIONMAP_STRATEGIC])
|
||||
// legend = image('icons/effects/64x64.dmi', "strategic")
|
||||
// legend.pixel_x = 3*WORLD_ICON_SIZE
|
||||
// legend.pixel_y = 3*WORLD_ICON_SIZE
|
||||
// station_map.overlays |= legend
|
||||
@@ -0,0 +1,44 @@
|
||||
//
|
||||
// An enhancement to /datum/map to store more and better meta-info about Z-levels
|
||||
//
|
||||
|
||||
// Structure to hold zlevel info together in one nice convenient package.
|
||||
// Wouldn't this be nicer than having to do those dumb arrays?
|
||||
/datum/map_z_level
|
||||
var/name // Friendly name of the zlevel
|
||||
var/z = -1 // Actual z-index of the zlevel. This had better be right!
|
||||
var/holomap_offset_x = 0 // Number of pixels to offset right (for centering)
|
||||
var/holomap_offset_y = 0 // Number of pixels to offset up (for centering)
|
||||
var/holomap_legend_x = 96 // x position of the holomap legend for this z
|
||||
var/holomap_legend_y = 96 // y position of the holomap legend for this z
|
||||
|
||||
/datum/map_z_level/New(z, name, holomap_zoom = initial(holomap_zoom), holomap_offset_x = initial(holomap_offset_x), holomap_offset_y = initial(holomap_offset_y))
|
||||
src.z = z
|
||||
src.name = name
|
||||
src.holomap_offset_x = holomap_offset_x
|
||||
src.holomap_offset_y = holomap_offset_y
|
||||
|
||||
// Map datum stuff we need
|
||||
// TODO - Put this into ~map_system/maps.dm
|
||||
/datum/map
|
||||
var/list/zlevels = list()
|
||||
|
||||
// LEGACY - This is how /vg does it, and how the code uses it. I'm in transition to use my new way (above)
|
||||
// but for now lets just initialize this stuff so the code works.
|
||||
/datum/map
|
||||
var/list/holomap_smoosh // List of lists of zlevels to smoosh into single icons
|
||||
var/list/holomap_offset_x = list()
|
||||
var/list/holomap_offset_y = list()
|
||||
var/list/holomap_legend_x = list()
|
||||
var/list/holomap_legend_y = list()
|
||||
|
||||
/datum/map/New()
|
||||
..()
|
||||
// Auto-calculate any missing holomap offsets to center them, assuming they are full sized maps.
|
||||
for(var/i in (holomap_offset_x.len + 1) to world.maxx)
|
||||
holomap_offset_x += ((480 - world.maxx) / 2)
|
||||
for(var/i in (holomap_offset_y.len + 1) to world.maxy)
|
||||
holomap_offset_y += ((480 - world.maxy) / 2)
|
||||
for(var/z in 1 to world.maxz)
|
||||
holomap_legend_x += 96
|
||||
holomap_legend_y += 96
|
||||
@@ -0,0 +1,246 @@
|
||||
var/global/list/station_holomaps = list()
|
||||
|
||||
/obj/machinery/station_map
|
||||
name = "station holomap"
|
||||
desc = "A virtual map of the surrounding station."
|
||||
icon = 'icons/obj/machines/stationmap_vr.dmi'
|
||||
icon_state = "station_map"
|
||||
anchored = 1
|
||||
density = 0
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 500
|
||||
auto_init = 0 // We handle our own special initialization needs. // TODO - Make this not ~Leshana
|
||||
circuit = /obj/item/weapon/circuitboard/station_map
|
||||
|
||||
// TODO - Port use_auto_lights from /vg - for now declare here
|
||||
var/use_auto_lights = 1
|
||||
var/light_power_on = 1
|
||||
var/light_range_on = 2
|
||||
light_color = "#64C864"
|
||||
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
|
||||
var/mob/watching_mob = null
|
||||
var/image/small_station_map = null
|
||||
var/image/floor_markings = null
|
||||
var/image/panel = null
|
||||
|
||||
var/original_zLevel = 1 // zLevel on which the station map was initialized.
|
||||
var/bogus = TRUE // set to 0 when you initialize the station map on a zLevel that has its own icon formatted for use by station holomaps.
|
||||
var/datum/station_holomap/holomap_datum
|
||||
|
||||
/obj/machinery/station_map/New()
|
||||
..()
|
||||
holomap_datum = new()
|
||||
original_zLevel = loc.z
|
||||
station_holomaps += src
|
||||
flags |= ON_BORDER // Why? It doesn't help if its not density
|
||||
if(ticker && holomaps_initialized)
|
||||
spawn(1) // Tragically we need to spawn this in order to give the frame construcing us time to set pixel_x/y
|
||||
initialize()
|
||||
|
||||
/obj/machinery/station_map/Destroy()
|
||||
station_holomaps -= src
|
||||
stopWatching()
|
||||
holomap_datum = null
|
||||
..()
|
||||
|
||||
/obj/machinery/station_map/initialize()
|
||||
bogus = FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
original_zLevel = T.z
|
||||
if(!("[HOLOMAP_EXTRA_STATIONMAP]_[original_zLevel]" in extraMiniMaps))
|
||||
bogus = TRUE
|
||||
holomap_datum.initialize_holomap_bogus()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
holomap_datum.initialize_holomap(T, reinit = TRUE)
|
||||
|
||||
small_station_map = image(extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir)
|
||||
// small_station_map.plane = LIGHTING_PLANE // Not until we do planes ~Leshana
|
||||
// small_station_map.layer = LIGHTING_LAYER+1 // Weird things will happen!
|
||||
|
||||
floor_markings = image('icons/obj/machines/stationmap_vr.dmi', "decal_station_map")
|
||||
floor_markings.dir = src.dir
|
||||
// floor_markings.plane = ABOVE_TURF_PLANE // Not until we do planes ~Leshana
|
||||
// floor_markings.layer = DECAL_LAYER
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/station_map/attack_hand(var/mob/user)
|
||||
if(watching_mob && (watching_mob != user))
|
||||
to_chat(user, "<span class='warning'>Someone else is currently watching the holomap.</span>")
|
||||
return
|
||||
if(user.loc != loc)
|
||||
to_chat(user, "<span class='warning'>You need to stand in front of \the [src].</span>")
|
||||
return
|
||||
startWatching(user)
|
||||
|
||||
// Let people bump up against it to watch
|
||||
/obj/machinery/station_map/Bumped(var/atom/movable/AM)
|
||||
if(!watching_mob && isliving(AM) && AM.loc == loc)
|
||||
startWatching(AM)
|
||||
|
||||
// In order to actually get Bumped() we need to block movement. We're (visually) on a wall, so people
|
||||
// couldn't really walk into us anyway. But in reality we are on the turf in front of the wall, so bumping
|
||||
// against where we seem is actually trying to *exit* our real loc
|
||||
/obj/machinery/station_map/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
|
||||
// log_debug("[src] (dir=[dir]) CheckExit([mover], [target]) get_dir() = [get_dir(target, loc)]")
|
||||
if(get_dir(target, loc) == dir) // Opposite of "normal" since we are visually in the next turf over
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/station_map/proc/startWatching(var/mob/user)
|
||||
// Okay, does this belong on a screen thing or what?
|
||||
// One argument is that this is an "in game" object becuase its in the world.
|
||||
// But I think it actually isn't. The map isn't holo projected into the whole room, (maybe strat one is!)
|
||||
// But for this, the on screen object just represents you leaning in and looking at it closely.
|
||||
// So it SHOULD be a screen object.
|
||||
// But it is not QUITE a hud either. So I think it shouldn't go in /datum/hud
|
||||
// Okay? Yeah. Lets use screen objects but manage them manually here in the item.
|
||||
// That might be a mistake... I'd rather they be managed by some central hud management system.
|
||||
// But the /vg code, while the screen obj is managed, its still adding and removing image, so this is
|
||||
// just as good.
|
||||
|
||||
// EH JUST HACK IT FOR NOW SO WE CAN SEE HOW IT LOOKS! STOP OBSESSING, ITS BEEN AN HOUR NOW!
|
||||
|
||||
// TODO - This part!! ~Leshana
|
||||
if(isliving(user) && anchored && !(stat & (NOPOWER|BROKEN)))
|
||||
if(user.client)
|
||||
holomap_datum.station_map.loc = global_hud.holomap // Put the image on the holomap hud
|
||||
holomap_datum.station_map.alpha = 0 // Set to transparent so we can fade in
|
||||
animate(holomap_datum.station_map, alpha = 255, time = 5, easing = LINEAR_EASING)
|
||||
flick("station_map_activate", src)
|
||||
// Wait, if wea re not modifying the holomap_obj... can't it be part of the global hud?
|
||||
user.client.screen |= global_hud.holomap // TODO - HACK! This should be there permenently really.
|
||||
user.client.images |= holomap_datum.station_map
|
||||
|
||||
watching_mob = user
|
||||
moved_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition)
|
||||
dir_set_event.register(watching_mob, src, /obj/machinery/station_map/proc/checkPosition)
|
||||
destroyed_event.register(watching_mob, src, /obj/machinery/station_map/proc/stopWatching)
|
||||
update_use_power(2)
|
||||
|
||||
if(bogus)
|
||||
to_chat(user, "<span class='warning'>The holomap failed to initialize. This area of space cannot be mapped.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>A hologram of the station appears before your eyes.</span>")
|
||||
|
||||
/obj/machinery/station_map/attack_ai(var/mob/living/silicon/robot/user)
|
||||
return // TODO - Implement for AI ~Leshana
|
||||
// user.station_holomap.toggleHolomap(user, isAI(user))
|
||||
|
||||
/obj/machinery/station_map/process()
|
||||
if((stat & (NOPOWER|BROKEN)) || !anchored)
|
||||
stopWatching()
|
||||
|
||||
/obj/machinery/station_map/proc/checkPosition()
|
||||
if(!watching_mob || (watching_mob.loc != loc) || (dir != watching_mob.dir))
|
||||
stopWatching()
|
||||
|
||||
/obj/machinery/station_map/proc/stopWatching()
|
||||
if(watching_mob)
|
||||
if(watching_mob.client)
|
||||
animate(holomap_datum.station_map, alpha = 0, time = 5, easing = LINEAR_EASING)
|
||||
var/mob/M = watching_mob
|
||||
spawn(5) //we give it time to fade out
|
||||
M.client.images -= holomap_datum.station_map
|
||||
moved_event.unregister(watching_mob, src)
|
||||
dir_set_event.unregister(watching_mob, src)
|
||||
destroyed_event.unregister(watching_mob, src)
|
||||
watching_mob = null
|
||||
update_use_power(1)
|
||||
|
||||
/obj/machinery/station_map/power_change()
|
||||
. = ..()
|
||||
update_icon()
|
||||
// TODO - Port use_auto_lights from /vg - For now implement it manually here
|
||||
if(stat & NOPOWER)
|
||||
set_light(0)
|
||||
else
|
||||
set_light(light_range_on, light_power_on)
|
||||
|
||||
/obj/machinery/station_map/proc/set_broken()
|
||||
stat |= BROKEN
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/station_map/update_icon()
|
||||
overlays.Cut()
|
||||
if(stat & BROKEN)
|
||||
icon_state = "station_mapb"
|
||||
else if((stat & NOPOWER) || !anchored)
|
||||
icon_state = "station_map0"
|
||||
else
|
||||
icon_state = "station_map"
|
||||
|
||||
if(bogus)
|
||||
holomap_datum.initialize_holomap_bogus()
|
||||
else
|
||||
small_station_map.icon = extraMiniMaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"]
|
||||
overlays |= small_station_map
|
||||
holomap_datum.initialize_holomap(get_turf(src))
|
||||
|
||||
// Put the little "map" overlay down where it looks nice
|
||||
if(floor_markings)
|
||||
floor_markings.dir = src.dir
|
||||
floor_markings.pixel_x = -src.pixel_x
|
||||
floor_markings.pixel_y = -src.pixel_y
|
||||
overlays += floor_markings
|
||||
|
||||
if(panel_open)
|
||||
overlays += "station_map-panel"
|
||||
else
|
||||
overlays -= "station_map-panel"
|
||||
|
||||
/obj/machinery/station_map/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/station_map/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
if(2)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
else
|
||||
set_broken()
|
||||
if(3)
|
||||
if (prob(25))
|
||||
set_broken()
|
||||
|
||||
/datum/frame/frame_types/station_map
|
||||
name = "Station Map Frame"
|
||||
frame_class = "display"
|
||||
frame_size = 3
|
||||
frame_style = "wall"
|
||||
x_offset = WORLD_ICON_SIZE
|
||||
y_offset = WORLD_ICON_SIZE
|
||||
circuit = /obj/item/weapon/circuitboard/station_map
|
||||
icon_override = 'icons/obj/machines/stationmap_vr.dmi'
|
||||
|
||||
/datum/frame/frame_types/station_map/get_icon_state(var/state)
|
||||
return "station_map_frame_[state]"
|
||||
|
||||
/obj/structure/frame
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
|
||||
/obj/item/weapon/circuitboard/station_map
|
||||
name = T_BOARD("Station Map")
|
||||
board_type = new /datum/frame/frame_types/station_map
|
||||
build_path = /obj/machinery/station_map
|
||||
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 2)
|
||||
req_components = list()
|
||||
|
||||
// TODO
|
||||
// //Portable holomaps, currently AI/Borg/MoMMI only
|
||||
|
||||
// TODO
|
||||
// OHHHH YEAH - STRATEGIC HOLOMAP! NICE!
|
||||
// It will need to wait until later tho.
|
||||
@@ -20,7 +20,7 @@
|
||||
/obj/machinery/seed_storage
|
||||
name = "Seed storage"
|
||||
desc = "It stores, sorts, and dispenses seeds."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon = 'icons/obj/vending_vr.dmi' //VOREStation Edit - Dunno why this isn't a vending subtype
|
||||
icon_state = "seeds"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
@@ -112,6 +112,15 @@
|
||||
/atom/movable/lighting_overlay/singularity_pull()
|
||||
return
|
||||
|
||||
/atom/movable/lighting_overlay/forceMove()
|
||||
return 0 //should never move
|
||||
|
||||
/atom/movable/lighting_overlay/Move()
|
||||
return 0
|
||||
|
||||
/atom/movable/lighting_overlay/throw_at()
|
||||
return 0
|
||||
|
||||
/atom/movable/lighting_overlay/Destroy()
|
||||
total_lighting_overlays--
|
||||
global.lighting_update_overlays -= src
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -95,7 +96,7 @@
|
||||
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10)
|
||||
|
||||
@@ -111,8 +112,8 @@
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0) // 500u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0) // 250u
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
@@ -9,13 +9,15 @@
|
||||
var/artist // Song's creator
|
||||
var/duration // Song length in deciseconds
|
||||
var/secret // Show up in regular playlist or secret playlist?
|
||||
var/lobby // Be one of the choices for lobby music?
|
||||
|
||||
/datum/track/New(var/url, var/title, var/duration, var/artist = "", var/secret = 0)
|
||||
/datum/track/New(var/url, var/title, var/duration, var/artist = "", var/secret = 0, var/lobby = 0)
|
||||
src.url = url
|
||||
src.title = title
|
||||
src.artist = artist
|
||||
src.duration = duration
|
||||
src.secret = secret
|
||||
src.lobby = lobby
|
||||
|
||||
/datum/track/proc/display()
|
||||
var str = "\"[title]\""
|
||||
@@ -29,6 +31,7 @@
|
||||
|
||||
// Global list holding all configured jukebox tracks
|
||||
var/global/list/all_jukebox_tracks = list()
|
||||
var/global/list/all_lobby_tracks = list()
|
||||
|
||||
// Read the jukebox configuration file on system startup.
|
||||
/hook/startup/proc/load_jukebox_tracks()
|
||||
@@ -53,5 +56,8 @@ var/global/list/all_jukebox_tracks = list()
|
||||
if(istext(entry["artist"]))
|
||||
T.artist = entry["artist"]
|
||||
T.secret = entry["secret"] ? 1 : 0
|
||||
T.lobby = entry["lobby"] ? 1 : 0
|
||||
all_jukebox_tracks += T
|
||||
if(T.lobby)
|
||||
all_lobby_tracks += T
|
||||
return 1
|
||||
|
||||
@@ -16,16 +16,12 @@
|
||||
#define MP_DEBUG(x)
|
||||
#endif
|
||||
|
||||
// Set up player on login to a mob.
|
||||
// This means they get a new media manager every time they switch mobs!
|
||||
// Is this wasteful? Granted switching mobs doesn't happen very often so maybe its fine.
|
||||
// TODO - While this direct override might technically be faster, probably better code to use observer or hooks ~Leshana
|
||||
/mob/Login()
|
||||
// Set up player on login.
|
||||
/client/New()
|
||||
. = ..()
|
||||
ASSERT(src.client)
|
||||
src.client.media = new /datum/media_manager(src.client)
|
||||
src.client.media.open()
|
||||
src.client.media.update_music()
|
||||
media = new /datum/media_manager(src)
|
||||
media.open()
|
||||
media.update_music()
|
||||
|
||||
// Stop media when the round ends. I guess so it doesn't play forever or something (for some reason?)
|
||||
/hook/roundend/proc/stop_all_media()
|
||||
|
||||
@@ -301,6 +301,22 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
var/image/speech_bubble = image('icons/mob/talk_vr.dmi',src,"h[speech_bubble_test]") //VOREStation Edit - Right-side talk icons
|
||||
spawn(30) qdel(speech_bubble)
|
||||
|
||||
|
||||
// VOREStation Edit - Attempt Multi-Z Talking
|
||||
var/mob/above = src.shadow
|
||||
while(!deleted(above))
|
||||
var/turf/ST = get_turf(above)
|
||||
if(ST)
|
||||
var/list/results = get_mobs_and_objs_in_view_fast(ST, world.view)
|
||||
var/image/z_speech_bubble = image('icons/mob/talk_vr.dmi', above, "h[speech_bubble_test]")
|
||||
spawn(30) qdel(z_speech_bubble)
|
||||
for(var/item in results["mobs"])
|
||||
if(item != above && !(item in listening))
|
||||
listening[item] = z_speech_bubble
|
||||
listening_obj |= results["objs"]
|
||||
above = above.shadow
|
||||
// VOREStation Edit End
|
||||
|
||||
//Main 'say' and 'whisper' message delivery
|
||||
for(var/mob/M in listening)
|
||||
spawn(0) //Using spawns to queue all the messages for AFTER this proc is done, and stop runtimes
|
||||
@@ -309,12 +325,12 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
var/dst = get_dist(get_turf(M),get_turf(src))
|
||||
|
||||
if(dst <= message_range || (M.stat == DEAD && !forbid_seeing_deadchat)) //Inside normal message range, or dead with ears (handled in the view proc)
|
||||
M << speech_bubble
|
||||
M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available
|
||||
M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
|
||||
|
||||
if(whispering) //Don't even bother with these unless whispering
|
||||
if(dst > message_range && dst <= w_scramble_range) //Inside whisper scramble range
|
||||
M << speech_bubble
|
||||
M << (listening[M] || speech_bubble) // VOREStation Edit - Send the image attached to shadow mob if available
|
||||
M.hear_say(stars(message), verb, speaking, alt_name, italics, src, speech_sound, sound_vol*0.2)
|
||||
if(dst > w_scramble_range && dst <= world.view) //Inside whisper 'visible' range
|
||||
M.show_message("<span class='game say'><span class='name'>[src.name]</span> [w_not_heard].</span>", 2)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Maintenance Drone Control"
|
||||
desc = "Used to monitor the station's drone population and the assembler that services them."
|
||||
icon_keyboard = "power_key"
|
||||
icon_screen = "power"
|
||||
icon_screen = "generic" //VOREStation Edit
|
||||
req_access = list(access_engine_equip)
|
||||
circuit = /obj/item/weapon/circuitboard/drone_control
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user