Runtime Map Loading (#3597)

changes:

Maps are no longer compiled in, instead loaded directly from the DMMs at runtime.
Z level defines have been moved from the config to map datums.
Unit tests now use typecaches.
DMMS now actually works.
DMMS has been updated slightly.
DMMS is now capable of loading simple lists of non-text types.
DMMS is now faster when loading many types without mapped in attributes and when loading area instances.
Asteroid generation is now defined on the map datum instead of being hard-coded in SSasteroid.
Holodeck presets are now defined on the map datum.
Atmos machinery now uses Initialize().
This commit is contained in:
Lohikar
2017-10-18 15:07:34 -05:00
committed by Erki
parent 0f35cf09d7
commit 61b5203d24
192 changed files with 166664 additions and 167417 deletions

View File

@@ -2,10 +2,15 @@ language: generic
sudo: false
env:
global:
BYOND_MAJOR="511"
BYOND_MINOR="1385"
MACRO_COUNT=120
FLYWAY_BUILD="4.2.0"
matrix:
- USE_MAP=aurora
- USE_MAP=runtime
- USE_MAP=exodus
cache:
directories:
@@ -44,7 +49,7 @@ script:
- python tools/GenerateChangelog/ss13_genchangelog.py html/changelog.html html/changelogs --dry-run
- source $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR}/byond/bin/byondsetup
- cp config/example/* config/
- scripts/dm.sh -DUNIT_TEST aurorastation.dme
- scripts/dm.sh -DUNIT_TEST -M$USE_MAP aurorastation.dme
- grep "0 warnings" build_log.txt
- DreamDaemon aurorastation.dmb -invisible -trusted -core 2>&1 | tee log.txt
- grep "All Unit Tests Passed" log.txt

3
_maps/_README.dm Normal file
View File

@@ -0,0 +1,3 @@
/*
-- INCLUDE THE BELOW DM FILES INSTEAD OF INCLUDING THE MAPS DIRECTLY IF YOU WANT TO FORCE A MAP! --
*/

1
_maps/aurora.dm Normal file
View File

@@ -0,0 +1 @@
#define DEFAULT_MAP "aurora"

1
_maps/exodus.dm Normal file
View File

@@ -0,0 +1 @@
#define DEFAULT_MAP "exodus"

1
_maps/runtime.dm Normal file
View File

@@ -0,0 +1 @@
#define DEFAULT_MAP "runtime"

View File

@@ -183,6 +183,7 @@
#include "code\controllers\subsystems\trade.dm"
#include "code\controllers\subsystems\vote.dm"
#include "code\controllers\subsystems\initialization\asteroid.dm"
#include "code\controllers\subsystems\initialization\atlas.dm"
#include "code\controllers\subsystems\initialization\atoms.dm"
#include "code\controllers\subsystems\initialization\minimap.dm"
#include "code\controllers\subsystems\initialization\misc_early.dm"
@@ -2273,13 +2274,16 @@
#include "code\ZAS\Zone.dm"
#include "interface\interface.dm"
#include "interface\skin.dmf"
#include "maps\aurora\aurora-1_centcomm.dmm"
#include "maps\aurora\aurora-2_under-station.dmm"
#include "maps\aurora\aurora-3_sublevel.dmm"
#include "maps\aurora\aurora-4_mainlevel.dmm"
#include "maps\aurora\aurora-5_interstitial.dmm"
#include "maps\aurora\aurora-6_surface.dmm"
#include "maps\aurora\aurora-7_roof.dmm"
#include "maps\aurora\aurora-8_derelict.dmm"
#include "maps\aurora\aurora-9_space.dmm"
#include "maps\_mapsystem\map.dm"
#include "maps\_mapsystem\map_unit.dm"
#include "maps\aurora\code\aurora.dm"
#include "maps\aurora\code\aurora_holodeck.dm"
#include "maps\aurora\code\aurora_shuttles.dm"
#include "maps\aurora\code\aurora_unittest.dm"
#include "maps\exodus\code\exodus.dm"
#include "maps\exodus\code\exodus_areas.dm"
#include "maps\exodus\code\exodus_shuttles.dm"
#include "maps\exodus\code\exodus_unittest.dm"
#include "maps\runtime\code\runtime.dm"
#include "maps\runtime\code\runtime_unittest.dm"
// END_INCLUDE

View File

@@ -30,7 +30,8 @@ Pipelines + Other Objects -> Pipe network
var/obj/machinery/atmospherics/node2
gfi_layer_rotation = GFI_ROTATION_OVERDIR
/obj/machinery/atmospherics/New()
/obj/machinery/atmospherics/Initialize(mapload)
. = ..()
if(!icon_manager)
icon_manager = new()
@@ -40,16 +41,15 @@ Pipelines + Other Objects -> Pipe network
if(!pipe_color_check(pipe_color))
pipe_color = null
..()
if (mapload)
return INITIALIZE_HINT_LATELOAD
/obj/machinery/atmospherics/proc/atmos_init()
// atmos_init() and Initialize() must be separate, as atmos_init() can be called multiple times after the machine has been initialized.
/obj/machinery/atmospherics/Initialize(mapload, ...)
. = ..()
if (mapload)
/obj/machinery/atmospherics/LateInitialize()
atmos_init()
/obj/machinery/atmospherics/attackby(atom/A, mob/user as mob)

View File

@@ -9,8 +9,7 @@ obj/machinery/atmospherics/binary
var/datum/pipe_network/network1
var/datum/pipe_network/network2
New()
..()
Initialize()
switch(dir)
if(NORTH)
initialize_directions = NORTH|SOUTH
@@ -25,6 +24,7 @@ obj/machinery/atmospherics/binary
air1.volume = 200
air2.volume = 200
. = ..()
// Housekeeping and pipe network stuff below
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)

View File

@@ -24,8 +24,8 @@
density = 1
/obj/machinery/atmospherics/binary/circulator/New()
..()
/obj/machinery/atmospherics/binary/circulator/Initialize()
. = ..()
desc = initial(desc) + " Its outlet port is to the [dir2text(dir)]."
air1.volume = 400

View File

@@ -41,8 +41,8 @@
//2: Do not pass input_pressure_min
//4: Do not pass output_pressure_max
/obj/machinery/atmospherics/binary/dp_vent_pump/New()
..()
/obj/machinery/atmospherics/binary/dp_vent_pump/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP
icon = null
@@ -50,8 +50,8 @@
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume
name = "Large Dual Port Air Vent"
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/New()
..()
/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800

View File

@@ -24,8 +24,8 @@
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/passive_gate/New()
..()
/obj/machinery/atmospherics/binary/passive_gate/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP * 2.5

View File

@@ -10,8 +10,8 @@
var/efficiency = 0.4
var/kin_energy = 0
var/datum/gas_mixture/air_in = new
var/datum/gas_mixture/air_out = new
var/datum/gas_mixture/air_in
var/datum/gas_mixture/air_out
var/volume_ratio = 0.2
var/kin_loss = 0.001
@@ -20,9 +20,10 @@
var/datum/pipe_network/network1
var/datum/pipe_network/network2
New()
..()
Initialize()
air_in = new
air_in.volume = 200
air_out = new
air_out.volume = 800
volume_ratio = air_in.volume / (air_in.volume + air_out.volume)
switch(dir)
@@ -34,6 +35,7 @@
initialize_directions = NORTH|SOUTH
if(WEST)
initialize_directions = NORTH|SOUTH
. = ..()
Destroy()
loc = null
@@ -234,9 +236,12 @@
var/kin_to_el_ratio = 0.1 //How much kinetic energy will be taken from turbine and converted into electricity
var/obj/machinery/atmospherics/pipeturbine/turbine
New()
Initialize()
..()
return INITIALIZE_HINT_LATELOAD
LateInitialize()
..()
spawn(1)
updateConnection()
proc/updateConnection()

View File

@@ -34,8 +34,8 @@ Thus, the two variables affect pump operation are set in New():
var/id = null
var/datum/radio_frequency/radio_connection
/obj/machinery/atmospherics/binary/pump/New()
..()
/obj/machinery/atmospherics/binary/pump/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_PUMP
air2.volume = ATMOS_DEFAULT_VOLUME_PUMP

View File

@@ -19,8 +19,8 @@
var/list/filtering_outputs = list() //maps gasids to gas_mixtures
/obj/machinery/atmospherics/omni/filter/New()
..()
/obj/machinery/atmospherics/omni/filter/Initialize()
. = ..()
rebuild_filtering_list()
for(var/datum/omni_port/P in ports)
P.air.volume = ATMOS_DEFAULT_VOLUME_FILTER

View File

@@ -24,8 +24,8 @@
var/list/mixing_inputs = list()
/obj/machinery/atmospherics/omni/mixer/New()
..()
/obj/machinery/atmospherics/omni/mixer/Initialize()
. = ..()
if(mapper_set())
var/con = 0
for(var/datum/omni_port/P in ports)

View File

@@ -26,8 +26,8 @@
var/list/ports = new()
/obj/machinery/atmospherics/omni/New()
..()
/obj/machinery/atmospherics/omni/Initialize()
. = ..()
icon_state = "base"
ports = new()

View File

@@ -19,9 +19,9 @@
level = 1
/obj/machinery/atmospherics/portables_connector/New()
/obj/machinery/atmospherics/portables_connector/Initialize()
initialize_directions = dir
..()
. = ..()
/obj/machinery/atmospherics/portables_connector/update_icon()
icon_state = "connector"

View File

@@ -36,8 +36,8 @@
if(frequency)
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
/obj/machinery/atmospherics/trinary/filter/New()
..()
/obj/machinery/atmospherics/trinary/filter/Initialize()
. = ..()
switch(filter_type)
if(0) //removing hydrocarbons
filtered_out = list("phoron")
@@ -237,8 +237,7 @@
dir = SOUTH
initialize_directions = SOUTH|NORTH|EAST
obj/machinery/atmospherics/trinary/filter/m_filter/New()
..()
obj/machinery/atmospherics/trinary/filter/m_filter/Initialize()
switch(dir)
if(NORTH)
initialize_directions = WEST|NORTH|SOUTH
@@ -248,6 +247,7 @@ obj/machinery/atmospherics/trinary/filter/m_filter/New()
initialize_directions = EAST|WEST|NORTH
if(WEST)
initialize_directions = WEST|SOUTH|EAST
. = ..()
/obj/machinery/atmospherics/trinary/filter/m_filter/atmos_init()
set_frequency(frequency)

View File

@@ -63,8 +63,8 @@
if(old_stat != stat)
update_icon()
/obj/machinery/atmospherics/trinary/mixer/New()
..()
/obj/machinery/atmospherics/trinary/mixer/Initialize()
. = ..()
air1.volume = ATMOS_DEFAULT_VOLUME_MIXER
air2.volume = ATMOS_DEFAULT_VOLUME_MIXER
air3.volume = ATMOS_DEFAULT_VOLUME_MIXER * 1.5
@@ -183,8 +183,7 @@ obj/machinery/atmospherics/trinary/mixer/t_mixer
//node 3 is the outlet, nodes 1 & 2 are intakes
obj/machinery/atmospherics/trinary/mixer/t_mixer/New()
..()
obj/machinery/atmospherics/trinary/mixer/t_mixer/Initialize()
switch(dir)
if(NORTH)
initialize_directions = EAST|NORTH|WEST
@@ -194,6 +193,7 @@ obj/machinery/atmospherics/trinary/mixer/t_mixer/New()
initialize_directions = EAST|NORTH|SOUTH
if(WEST)
initialize_directions = WEST|NORTH|SOUTH
. = ..()
obj/machinery/atmospherics/trinary/mixer/t_mixer/atmos_init()
..()
@@ -229,8 +229,7 @@ obj/machinery/atmospherics/trinary/mixer/m_mixer
//node 3 is the outlet, nodes 1 & 2 are intakes
obj/machinery/atmospherics/trinary/mixer/m_mixer/New()
..()
obj/machinery/atmospherics/trinary/mixer/m_mixer/Initialize()
switch(dir)
if(NORTH)
initialize_directions = WEST|NORTH|SOUTH
@@ -240,6 +239,7 @@ obj/machinery/atmospherics/trinary/mixer/m_mixer/New()
initialize_directions = EAST|WEST|NORTH
if(WEST)
initialize_directions = WEST|SOUTH|EAST
. = ..()
obj/machinery/atmospherics/trinary/mixer/m_mixer/atmos_init()
..()

View File

@@ -13,8 +13,7 @@ obj/machinery/atmospherics/trinary
var/datum/pipe_network/network2
var/datum/pipe_network/network3
New()
..()
Initialize()
switch(dir)
if(NORTH)
initialize_directions = EAST|NORTH|SOUTH
@@ -31,6 +30,7 @@ obj/machinery/atmospherics/trinary
air1.volume = 200
air2.volume = 200
air3.volume = 200
. = ..()
// Housekeeping and pipe network stuff below
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)

View File

@@ -46,9 +46,9 @@
/obj/machinery/atmospherics/tvalve/hide(var/i)
update_underlays()
/obj/machinery/atmospherics/tvalve/New()
/obj/machinery/atmospherics/tvalve/Initialize()
initialize_directions()
..()
. = ..()
/obj/machinery/atmospherics/tvalve/proc/initialize_directions()
switch(dir)

View File

@@ -28,9 +28,9 @@
/obj/item/stack/cable_coil{amount = 2}
)
/obj/machinery/atmospherics/unary/freezer/New()
..()
/obj/machinery/atmospherics/unary/freezer/Initialize()
initialize_directions = dir
. = ..()
/obj/machinery/atmospherics/unary/freezer/atmos_init()
if(node)

View File

@@ -27,8 +27,8 @@
/obj/item/stack/cable_coil{amount = 5}
)
/obj/machinery/atmospherics/unary/heater/New()
..()
/obj/machinery/atmospherics/unary/heater/Initialize()
. = ..()
initialize_directions = dir
/obj/machinery/atmospherics/unary/heater/atmos_init()

View File

@@ -24,8 +24,8 @@
level = 1
/obj/machinery/atmospherics/unary/outlet_injector/New()
..()
/obj/machinery/atmospherics/unary/outlet_injector/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //Give it a small reservoir for injecting. Also allows it to have a higher flow rate limit than vent pumps, to differentiate injectors a bit more.
/obj/machinery/atmospherics/unary/outlet_injector/update_icon()

View File

@@ -23,9 +23,8 @@ obj/machinery/atmospherics/unary/oxygen_generator
return
New()
..()
Initialize()
. = ..()
air_contents.volume = 50
machinery_process()

View File

@@ -9,12 +9,11 @@
var/datum/pipe_network/network
New()
..()
Initialize()
initialize_directions = dir
air_contents = new
air_contents.volume = 200
. = ..()
// Housekeeping and pipe network stuff below
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)

View File

@@ -69,8 +69,8 @@
pressure_checks = 2
pressure_checks_default = 2
/obj/machinery/atmospherics/unary/vent_pump/New()
..()
/obj/machinery/atmospherics/unary/vent_pump/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP
@@ -105,8 +105,8 @@
power_channel = EQUIP
power_rating = 15000 //15 kW ~ 20 HP
/obj/machinery/atmospherics/unary/vent_pump/high_volume/New()
..()
/obj/machinery/atmospherics/unary/vent_pump/high_volume/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 800
/obj/machinery/atmospherics/unary/vent_pump/engine
@@ -114,8 +114,8 @@
power_channel = ENVIRON
power_rating = 30000 //15 kW ~ 20 HP
/obj/machinery/atmospherics/unary/vent_pump/engine/New()
..()
/obj/machinery/atmospherics/unary/vent_pump/engine/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_PUMP + 500 //meant to match air injector
/obj/machinery/atmospherics/unary/vent_pump/update_icon(var/safety = 0)

View File

@@ -33,8 +33,8 @@
use_power = 1
icon_state = "map_scrubber_on"
/obj/machinery/atmospherics/unary/vent_scrubber/New()
..()
/obj/machinery/atmospherics/unary/vent_scrubber/Initialize()
. = ..()
air_contents.volume = ATMOS_DEFAULT_VOLUME_FILTER

View File

@@ -37,13 +37,13 @@
/obj/machinery/atmospherics/valve/hide(var/i)
update_underlays()
/obj/machinery/atmospherics/valve/New()
/obj/machinery/atmospherics/valve/Initialize()
switch(dir)
if(NORTH || SOUTH)
initialize_directions = NORTH|SOUTH
if(EAST || WEST)
initialize_directions = EAST|WEST
..()
. = ..()
/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
@@ -166,7 +166,7 @@
build_network()
update_icon()
queue_icon_update()
update_underlays()
if(openDuringInit)
@@ -262,7 +262,7 @@
var/old_stat = stat
..()
if(old_stat != stat)
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/valve/digital/update_icon()
..()

View File

@@ -16,8 +16,8 @@
buckle_lying = 1
// BubbleWrap
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New()
..()
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/Initialize()
. = ..()
initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe
// BubbleWrap END
color = "#404040" //we don't make use of the fancy overlay system for colours, use this to set the default.
@@ -46,8 +46,7 @@
qdel(src)
return
update_icon()
return
queue_icon_update()
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/machinery_process()
if(!parent)
@@ -112,8 +111,7 @@
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
// BubbleWrap
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/New()
.. ()
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/Initialize()
switch (dir)
if (SOUTH)
initialize_directions = NORTH
@@ -128,6 +126,7 @@
initialize_directions = EAST
initialize_directions_he = WEST
// BubbleWrap END
. = ..()
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/atmos_init()
for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions))
@@ -143,5 +142,4 @@
qdel(src)
return
update_icon()
return
queue_icon_update()

View File

@@ -18,10 +18,10 @@
/obj/machinery/atmospherics/pipe/drain_power()
return -1
/obj/machinery/atmospherics/pipe/New()
/obj/machinery/atmospherics/pipe/Initialize()
if(istype(get_turf(src), /turf/simulated/wall) || istype(get_turf(src), /turf/simulated/shuttle/wall) || istype(get_turf(src), /turf/unsimulated/wall))
level = 1
..()
. = ..()
/obj/machinery/atmospherics/pipe/hides_under_flooring()
return level != 2
@@ -168,8 +168,7 @@
level = 1
gfi_layer_rotation = GFI_ROTATION_DEFDIR
/obj/machinery/atmospherics/pipe/simple/New()
..()
/obj/machinery/atmospherics/pipe/simple/Initialize()
// Pipe colors and icon states are handled by an image cache - so color and icon should
// be null. For mapping purposes color is defined in the object definitions.
@@ -189,11 +188,12 @@
initialize_directions = SOUTH|EAST
if(SOUTHWEST)
initialize_directions = SOUTH|WEST
. = ..()
/obj/machinery/atmospherics/pipe/simple/hide(var/i)
if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/simple/machinery_process()
if(!parent) //This should cut back on the overhead calling build_network thousands of times per cycle
@@ -305,7 +305,7 @@
var/turf/T = loc
if(level == 1 && !T.is_plating()) hide(1)
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
@@ -435,8 +435,7 @@
gfi_layer_rotation = GFI_ROTATION_OVERDIR
/obj/machinery/atmospherics/pipe/manifold/New()
..()
/obj/machinery/atmospherics/pipe/manifold/Initialize()
alpha = 255
icon = null
@@ -449,11 +448,12 @@
initialize_directions = SOUTH|WEST|NORTH
if(WEST)
initialize_directions = NORTH|EAST|SOUTH
. = ..()
/obj/machinery/atmospherics/pipe/manifold/hide(var/i)
if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold/pipeline_expansion()
return list(node1, node2, node3)
@@ -548,7 +548,7 @@
/obj/machinery/atmospherics/pipe/manifold/update_underlays()
..()
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold/atmos_init()
var/connect_directions = (NORTH|SOUTH|EAST|WEST)&(~dir)
@@ -594,7 +594,7 @@
var/turf/T = get_turf(src)
if(level == 1 && !T.is_plating()) hide(1)
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold/visible
icon_state = "map"
@@ -695,8 +695,8 @@
level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold4w/New()
..()
/obj/machinery/atmospherics/pipe/manifold4w/Initialize()
. = ..()
alpha = 255
icon = null
@@ -817,12 +817,12 @@
/obj/machinery/atmospherics/pipe/manifold4w/update_underlays()
..()
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i)
if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold4w/atmos_init()
@@ -856,7 +856,7 @@
var/turf/T = get_turf(src)
if(level == 1 && !T.is_plating()) hide(1)
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/manifold4w/visible
icon_state = "map_4way"
@@ -954,14 +954,14 @@
var/obj/machinery/atmospherics/node
/obj/machinery/atmospherics/pipe/cap/New()
..()
/obj/machinery/atmospherics/pipe/cap/Initialize()
initialize_directions = dir
. = ..()
/obj/machinery/atmospherics/pipe/cap/hide(var/i)
if(istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/cap/pipeline_expansion()
return list(node)
@@ -1013,7 +1013,7 @@
var/turf/T = src.loc // hide if turf is not intact
if(level == 1 && !T.is_plating()) hide(1)
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/cap/visible
level = 2
@@ -1076,10 +1076,10 @@
initialize_directions = SOUTH
density = 1
/obj/machinery/atmospherics/pipe/tank/New()
/obj/machinery/atmospherics/pipe/tank/Initialize()
icon_state = "air"
initialize_directions = dir
..()
. = ..()
/obj/machinery/atmospherics/pipe/tank/machinery_process()
if(!parent)
@@ -1142,7 +1142,7 @@
name = "Pressure Tank (Air)"
icon_state = "air_map"
/obj/machinery/atmospherics/pipe/tank/air/New()
/obj/machinery/atmospherics/pipe/tank/air/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
@@ -1151,77 +1151,77 @@
"nitrogen",(start_pressure*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "air"
/obj/machinery/atmospherics/pipe/tank/oxygen
name = "Pressure Tank (Oxygen)"
icon_state = "o2_map"
/obj/machinery/atmospherics/pipe/tank/oxygen/New()
/obj/machinery/atmospherics/pipe/tank/oxygen/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.adjust_gas("oxygen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "o2"
/obj/machinery/atmospherics/pipe/tank/nitrogen
name = "Pressure Tank (Nitrogen)"
icon_state = "n2_map"
/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
/obj/machinery/atmospherics/pipe/tank/nitrogen/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.adjust_gas("nitrogen", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "n2"
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
name = "Pressure Tank (Carbon Dioxide)"
icon_state = "co2_map"
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.adjust_gas("carbon_dioxide", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "co2"
/obj/machinery/atmospherics/pipe/tank/phoron
name = "Pressure Tank (Phoron)"
icon_state = "phoron_map"
/obj/machinery/atmospherics/pipe/tank/phoron/New()
/obj/machinery/atmospherics/pipe/tank/phoron/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T20C
air_temporary.adjust_gas("phoron", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "phoron"
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide
name = "Pressure Tank (Nitrous Oxide)"
icon_state = "n2o_map"
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/New()
/obj/machinery/atmospherics/pipe/tank/nitrous_oxide/Initialize()
air_temporary = new
air_temporary.volume = volume
air_temporary.temperature = T0C
air_temporary.adjust_gas("sleeping_agent", (start_pressure)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature))
..()
. = ..()
icon_state = "n2o"
/obj/machinery/atmospherics/pipe/vent
@@ -1240,9 +1240,9 @@
var/build_killswitch = 1
/obj/machinery/atmospherics/pipe/vent/New()
/obj/machinery/atmospherics/pipe/vent/Initialize()
initialize_directions = dir
..()
. = ..()
/obj/machinery/atmospherics/pipe/vent/high_volume
name = "Larger vent"
@@ -1288,7 +1288,7 @@
node1 = target
break
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
@@ -1340,7 +1340,7 @@
/obj/machinery/atmospherics/pipe/simple/visible/universal/update_underlays()
..()
update_icon()
queue_icon_update()
@@ -1379,7 +1379,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_underlays()
..()
update_icon()
queue_icon_update()
/obj/machinery/atmospherics/proc/universal_underlays(var/obj/machinery/atmospherics/node, var/direction)
var/turf/T = loc

View File

@@ -286,8 +286,8 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define LAYER_ABOVE_TABLE 2.81
// Stoplag.
#define TICK_CHECK ( world.tick_usage > CURRENT_TICKLIMIT ? stoplag() : 0 )
#define CHECK_TICK if (world.tick_usage > CURRENT_TICKLIMIT) stoplag()
#define TICK_CHECK (world.tick_usage > CURRENT_TICKLIMIT)
#define CHECK_TICK if (TICK_CHECK) stoplag()
// Performance bullshit.
@@ -375,7 +375,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
#define DEFAULT_SIGHT (SEE_SELF|SEE_BLACKNESS)
#define isStationLevel(Z) ((Z) in config.station_levels)
#define isStationLevel(Z) ((Z) in current_map.station_levels)
#define isNotStationLevel(Z) !isStationLevel(Z)
//Affects the chance that armour will block an attack. Should be between 0 and 1.

View File

@@ -1,3 +1,4 @@
#define SS_INIT_MAPLOAD 22 // DMM parsing and load. Unless you know what you're doing, make sure this remains first.
#define SS_INIT_JOBS 21
#define SS_INIT_MISC_FIRST 20
#define SS_INIT_SEEDS 19 // Plant controller setup.

View File

@@ -12,17 +12,17 @@
/proc/is_on_same_plane_or_station(var/z1, var/z2)
if(z1 == z2)
return 1
if((z1 in config.station_levels) && (z2 in config.station_levels))
if((z1 in current_map.station_levels) && (z2 in current_map.station_levels))
return 1
return 0
/proc/max_default_z_level()
var/max_z = 0
for(var/z in config.station_levels)
for(var/z in current_map.station_levels)
max_z = max(z, max_z)
for(var/z in config.admin_levels)
for(var/z in current_map.admin_levels)
max_z = max(z, max_z)
for(var/z in config.player_levels)
for(var/z in current_map.player_levels)
max_z = max(z, max_z)
return max_z
@@ -61,10 +61,10 @@
return heard
/proc/isPlayerLevel(var/level)
return level in config.player_levels
return level in current_map.player_levels
/proc/isAdminLevel(var/level)
return level in config.admin_levels
return level in current_map.admin_levels
/proc/isNotAdminLevel(var/level)
return !isAdminLevel(level)

View File

@@ -31,6 +31,8 @@ var/global/list/the_station_areas = list()
var/global/list/implants = list()
var/global/list/turfs = list() //list of all turfs
var/global/list/areas_by_type = list()
var/global/list/all_areas = list()
//Languages/species/whitelist.
var/global/list/all_species = list()

View File

@@ -15,22 +15,6 @@ var/church_name = null
return name
var/command_name = null
/proc/command_name()
if (command_name)
return command_name
var/name = "[boss_name]"
command_name = name
return name
/proc/change_command_name(var/name)
command_name = name
return name
var/religion_name = null
/proc/religion_name()
if (religion_name)
@@ -43,74 +27,8 @@ var/religion_name = null
return capitalize(name)
/proc/system_name()
return "Tau Ceti"
/proc/commstation_name()
if (dock_name)
return dock_name
/proc/station_name()
if (station_name)
return station_name
var/random = rand(1,5)
var/name = ""
//Rare: Pre-Prefix
if (prob(10))
name = pick("Imperium", "Heretical", "Cuban", "Psychic", "Elegant", "Common", "Uncommon", "Rare", "Unique", "Houseruled", "Religious", "Atheist", "Traditional", "Houseruled", "Mad", "Super", "Ultra", "Secret", "Top Secret", "Deep", "Death", "Zybourne", "Central", "Main", "Government", "Uoi", "Fat", "Automated", "Experimental", "Augmented")
station_name = name + " "
// Prefix
switch(Holiday)
//get normal name
if(null,"",0)
name = pick("", "Stanford", "Dorf", "Alium", "Prefix", "Clowning", "Aegis", "Ishimura", "Scaredy", "Death-World", "Mime", "Honk", "Rogue", "MacRagge", "Ultrameens", "Safety", "Paranoia", "Explosive", "Neckbear", "Donk", "Muppet", "North", "West", "East", "South", "Slant-ways", "Widdershins", "Rimward", "Expensive", "Procreatory", "Imperial", "Unidentified", "Immoral", "Carp", "Ork", "Pete", "Control", "Nettle", "Aspie", "Class", "Crab", "Fist","Corrogated","Skeleton","Race", "Fatguy", "Gentleman", "Capitalist", "Communist", "Bear", "Beard", "Derp", "Space", "Spess", "Star", "Moon", "System", "Mining", "Neckbeard", "Research", "Supply", "Military", "Orbital", "Battle", "Science", "Asteroid", "Home", "Production", "Transport", "Delivery", "Extraplanetary", "Orbital", "Correctional", "Robot", "Hats", "Pizza")
if(name)
station_name += name + " "
//For special days like christmas, easter, new-years etc ~Carn
if("Friday the 13th")
name = pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby")
station_name += name + " "
random = 13
else
//get the first word of the Holiday and use that
var/i = findtext(Holiday," ",1,0)
name = copytext(Holiday,1,i)
station_name += name + " "
// Suffix
name = pick("Station", "Fortress", "Frontier", "Suffix", "Death-trap", "Space-hulk", "Lab", "Hazard","Spess Junk", "Fishery", "No-Moon", "Tomb", "Crypt", "Hut", "Monkey", "Bomb", "Trade Post", "Fortress", "Village", "Town", "City", "Edition", "Hive", "Complex", "Base", "Facility", "Depot", "Outpost", "Installation", "Drydock", "Observatory", "Array", "Relay", "Monitor", "Platform", "Construct", "Hangar", "Prison", "Center", "Port", "Waystation", "Factory", "Waypoint", "Stopover", "Hub", "HQ", "Office", "Object", "Fortification", "Colony", "Planet-Cracker", "Roost", "Fat Camp")
station_name += name + " "
// ID Number
switch(random)
if(1)
station_name += "[rand(1, 99)]"
if(2)
station_name += pick("Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega")
if(3)
station_name += pick("II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "XVI", "XVII", "XVIII", "XIX", "XX")
if(4)
station_name += pick("Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whiskey", "X-ray", "Yankee", "Zulu")
if(5)
station_name += pick("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")
if(13)
station_name += pick("13","XIII","Thirteen")
if (config && config.server_name)
world.name = "[config.server_name]: [name]"
else
world.name = station_name
return station_name
/proc/world_name(var/name)
station_name = name
current_map.station_name = name
if (config && config.server_name)
world.name = "[config.server_name]: [name]"

View File

@@ -520,3 +520,12 @@ proc/TextPreview(var/string,var/len=40)
. = base
if(rest)
. += .(rest)
/proc/replacemany(text, list/replacements)
if (!LAZYLEN(replacements))
return text
. = text
for (var/replacement in replacements)
. = replacetext(., replacement, replacements[replacement])

View File

@@ -4,8 +4,6 @@ var/list/gamemode_cache = list()
var/server_name = null // server name (for world name / status)
var/server_suffix = 0 // generate numeric suffix based on server port
var/list/lobby_screens = list("title") // Which lobby screens are available
var/log_ooc = 0 // log OOC channel
var/log_access = 0 // log login/logout
var/log_say = 0 // log client say
@@ -75,6 +73,7 @@ var/list/gamemode_cache = list()
var/automute_on = 0 //enables automuting/spam prevention
var/macro_trigger = 5 // The grace period between messages before it's counted as abusing a macro.
var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access.
var/override_map
var/cult_ghostwriter = 1 //Allows ghosts to write in blood in cult rounds...
var/cult_ghostwriter_req_cultists = 10 //...so long as this many cultists are active.
@@ -184,12 +183,6 @@ var/list/gamemode_cache = list()
var/python_path = "python" //Path to the python executable. Defaults to "python" on windows and "/usr/bin/env python2" on unix
var/use_overmap = 0
var/list/station_levels = list(3, 4, 5, 6, 7) // Defines which Z-levels the station exists on.
var/list/admin_levels= list(1) // Defines which Z-levels which are for admin functionality, for example including such areas as Central Command and the Syndicate Shuttle
var/list/contact_levels = list(3, 4, 5, 6) // Defines which Z-levels which, for example, a Code Red announcement may affect
var/list/player_levels = list(2, 3, 4, 5, 6, 7, 8) // Defines all Z-levels a character can typically reach
var/list/sealed_levels = list() // Defines levels that do not allow random transit at the edges.
// Event settings
var/expected_round_length = 3 * 60 * 60 * 10 // 3 hours
// If the first delay has a custom start time
@@ -696,21 +689,6 @@ var/list/gamemode_cache = list()
if("use_overmap")
config.use_overmap = 1
if("station_levels")
config.station_levels = text2numlist(value, ";")
if("admin_levels")
config.admin_levels = text2numlist(value, ";")
if("contact_levels")
config.contact_levels = text2numlist(value, ";")
if("player_levels")
config.player_levels = text2numlist(value, ";")
if("sealed_levels")
config.sealed_levels = text2numlist(value, ";")
if("expected_round_length")
config.expected_round_length = MinutesToTicks(text2num(value))
@@ -798,9 +776,6 @@ var/list/gamemode_cache = list()
if(values.len > 0)
language_prefixes = values
if ("lobby_screens")
config.lobby_screens = text2list(value, ";")
if("delist_when_no_admins")
config.delist_when_no_admins = 1
@@ -857,6 +832,9 @@ var/list/gamemode_cache = list()
if("merchant_chance")
config.merchant_chance = text2num(value)
if("force_map")
override_map = value
if("show_game_type_odd")
config.show_game_type_odd = 1
else

View File

@@ -24,9 +24,9 @@
shuttle.launch(src)
for (var/thing in current_mobs)
var/mob/living/carbon/human/M = locate(thing)
if (istype(M) && M.odin_despawn_timer)
deltimer(M.odin_despawn_timer)
M.odin_despawn_timer = null
if (istype(M) && M.centcomm_despawn_timer)
deltimer(M.centcomm_despawn_timer)
M.centcomm_despawn_timer = null
current_mobs.Cut()
else

View File

@@ -54,9 +54,13 @@ var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle
set_launch_countdown(SHUTTLE_LEAVETIME) //get ready to return
if (evac)
priority_announcement.Announce("The Emergency Shuttle has docked with the station. You have approximately [round(estimate_launch_time()/60,1)] minutes to board the Emergency Shuttle.", new_sound = 'sound/AI/emergencyshuttledock.ogg')
priority_announcement.Announce(replacetext(current_map.shuttle_docked_message, "%ETD%", round(estimate_launch_time()/60,1)), new_sound = 'sound/AI/emergencyshuttledock.ogg')
else
priority_announcement.Announce("The scheduled Crew Transfer Shuttle to [dock_name] has docked with the station. It will depart in approximately [round(emergency_shuttle.estimate_launch_time()/60,1)] minutes.", new_sound = 'sound/AI/shuttledock.ogg')
var/list/fields = list(
"%ETA%" = round(emergency_shuttle.estimate_launch_time()/60,1),
"%dock%" = current_map.dock_name
)
priority_announcement.Announce(replacemany(current_map.shuttle_docked_message, fields), new_sound = 'sound/AI/shuttledock.ogg')
//arm the escape pods
if (evac)
@@ -85,7 +89,7 @@ var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle
shuttle.move_time = SHUTTLE_TRANSIT_DURATION
evac = 1
priority_announcement.Announce("An emergency evacuation shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes.", new_sound = 'sound/AI/emergencyshuttlecalled.ogg')
priority_announcement.Announce(replacetext(current_map.emergency_shuttle_called_message, "%ETA%", round(estimate_arrival_time()/60)), new_sound = 'sound/AI/emergencyshuttlecalled.ogg')
for(var/area/A in all_areas)
if(istype(A, /area/hallway))
A.readyalert()
@@ -102,7 +106,11 @@ var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle
//reset the shuttle transit time if we need to
shuttle.move_time = SHUTTLE_TRANSIT_DURATION
priority_announcement.Announce("A crew transfer to [dock_name] has been scheduled. The shuttle has been called. It will arrive in approximately [round(estimate_arrival_time()/60)] minutes.", new_sound = 'sound/AI/shuttlecalled.ogg')
var/list/replacements = list(
"%ETA%" = round(estimate_arrival_time()/60),
"%dock%" = current_map.dock_name
)
priority_announcement.Announce(replacemany(current_map.shuttle_called_message, replacements), new_sound = 'sound/AI/shuttlecalled.ogg')
//recalls the shuttle
/datum/controller/subsystem/emergency_shuttle/proc/recall()
@@ -112,14 +120,14 @@ var/datum/controller/subsystem/emergency_shuttle/emergency_shuttle
shuttle.cancel_launch(src)
if (evac)
priority_announcement.Announce("The emergency shuttle has been recalled.", new_sound = 'sound/AI/emergencyshuttlerecalled.ogg')
priority_announcement.Announce(current_map.emergency_shuttle_recall_message, new_sound = 'sound/AI/emergencyshuttlerecalled.ogg')
for(var/area/A in all_areas)
if(istype(A, /area/hallway))
A.readyreset()
evac = 0
else
priority_announcement.Announce("The scheduled crew transfer has been cancelled.", new_sound = 'sound/AI/shuttlerecalled.ogg')
priority_announcement.Announce(current_map.shuttle_recall_message, new_sound = 'sound/AI/shuttlerecalled.ogg')
/datum/controller/subsystem/emergency_shuttle/proc/can_call()
if (!universe.OnShuttleCall(null))

View File

@@ -736,7 +736,7 @@
SearchVar(dreams)
SearchVar(non_fakeattack_weapons)
SearchVar(ghost_traps)
SearchVar(holodeck_programs)
SearchVar(current_map.holodeck_programs)
SearchVar(fruit_icon_cache)
SearchVar(plant_seed_sprites)
SearchVar(wax_recipes)

View File

@@ -5,19 +5,6 @@
/datum/controller/subsystem/asteroid/Initialize(timeofday)
if(config.generate_asteroid)
// These values determine the specific area that the map is applied to.
current_map.generate_asteroid()
// Create the chasms.
new /datum/random_map/automata/cave_system/chasms(null,0,0,3,255,255)
new /datum/random_map/automata/cave_system(null,0,0,3,255,255)
new /datum/random_map/automata/cave_system/chasms(null,0,0,4,255,255)
new /datum/random_map/automata/cave_system(null,0,0,4,255,255)
new /datum/random_map/automata/cave_system/chasms(null,0,0,5,255,255)
new /datum/random_map/automata/cave_system/high_yield(null,0,0,5,255,255)
new /datum/random_map/automata/cave_system/chasms/surface(null,0,0,6,255,255)
// Create the deep mining ore distribution map.
new /datum/random_map/noise/ore(null, 0, 0, 5, 64, 64)
new /datum/random_map/noise/ore(null, 0, 0, 4, 64, 64)
new /datum/random_map/noise/ore(null, 0, 0, 3, 64, 64)
..()

View File

@@ -0,0 +1,176 @@
// This file controls round-start runtime maploading.
var/datum/map/current_map // Whatever map is currently loaded. Null until SSatlas Initialize() starts.
var/datum/controller/subsystem/atlas/SSatlas
/datum/controller/subsystem/atlas
name = "Atlas"
flags = SS_NO_FIRE
init_order = SS_INIT_MAPLOAD
var/list/known_maps = list()
var/dmm_suite/maploader
var/list/height_markers = list()
var/list/mapload_callbacks = list()
var/map_override // If set, SSatlas will forcibly load this map. If the map does not exist, mapload will fail and SSatlas will panic.
var/list/spawn_locations = list()
/datum/controller/subsystem/atlas/New()
NEW_SS_GLOBAL(SSatlas)
/datum/controller/subsystem/atlas/Initialize(timeofday)
maploader = new
var/datum/map/M
for (var/type in subtypesof(/datum/map))
M = new type
if (!M.path)
log_debug("SSatlas: Map [M.name] ([M.type]) has no path set, discarding.")
qdel(M)
continue
known_maps[M.path] = M
#ifdef DEFAULT_MAP
map_override = DEFAULT_MAP
log_ss("atlas", "Using compile-selected map.")
#endif
if (!map_override)
map_override = get_selected_map()
admin_notice("<span class='danger'>Loading map [map_override].</span>", R_DEBUG)
log_ss("atlas", "Using map '[map_override]'.")
current_map = known_maps[map_override]
if (!current_map)
world.map_panic("Selected map does not exist!")
load_map_meta()
setup_spawnpoints()
world.update_status()
// Begin loading the maps.
var/maps_loaded = load_map_directory("maps/[current_map.path]/", TRUE)
log_ss("atlas", "Loaded [maps_loaded] maps.")
admin_notice("<span class='danger'>Loaded [maps_loaded] levels.</span>")
if (!maps_loaded)
world.map_panic("No maps loaded!")
setup_multiz()
QDEL_NULL(maploader)
..()
/datum/controller/subsystem/atlas/proc/load_map_directory(directory, overwrite_default_z = FALSE)
. = 0
if (!directory)
CRASH("No directory supplied.")
var/static/regex/mapregex = new(".+\\.dmm$")
var/list/files = flist(directory)
sortTim(files, /proc/cmp_text_asc)
var/mfile
var/first_dmm = TRUE
for (var/i in 1 to files.len)
mfile = files[i]
if (!mapregex.Find(mfile))
continue
log_ss("atlas", "Loading '[mfile]'.")
mfile = "[directory][mfile]"
var/target_z = 0
if (overwrite_default_z && first_dmm)
target_z = 1
first_dmm = FALSE
log_ss("atlas", "Overwriting Z[target_z].")
if (!maploader.load_map(file(mfile), 0, 0, target_z, no_changeturf = TRUE))
log_ss("atlas", "Failed to load '[mfile]'!")
.++
CHECK_TICK
/datum/controller/subsystem/atlas/proc/setup_multiz()
for (var/thing in height_markers)
var/obj/effect/landmark/map_data/marker = thing
marker.setup()
/datum/controller/subsystem/atlas/proc/get_selected_map()
if (config.override_map)
if (known_maps[config.override_map])
. = config.override_map
log_ss("atlas", "Using configured map.")
else
log_ss("atlas", "-- WARNING: CONFIGURED MAP DOES NOT EXIST, IGNORING! --")
. = "aurora"
else
. = "aurora"
/datum/controller/subsystem/atlas/proc/load_map_meta()
// This needs to be done after current_map is set, but before mapload.
lobby_image = new /obj/effect/lobby_image
admin_departments = list(
"[current_map.boss_name]",
"[current_map.system_name] Government",
"Supply"
)
priority_announcement = new(do_log = 0)
command_announcement = new(do_log = 0, do_newscast = 1)
for (var/thing in mapload_callbacks)
var/datum/callback/cb = thing
cb.InvokeAsync()
CHECK_TICK
mapload_callbacks.Cut()
mapload_callbacks = null
/datum/controller/subsystem/atlas/proc/OnMapload(datum/callback/callback)
if (!istype(callback))
CRASH("Invalid callback.")
mapload_callbacks += callback
/datum/controller/subsystem/atlas/proc/setup_spawnpoints()
for (var/type in current_map.spawn_types)
var/datum/spawnpoint/S = new type
spawn_locations[S.display_name] = S
// Called when there's a fatal, unrecoverable error in mapload. This reboots the server.
/world/proc/map_panic(reason)
to_chat(world, "<span class='danger'>Fatal error during map setup, unable to continue! Server will reboot in 60 seconds.</span>")
log_ss("atlas", "-- FATAL ERROR DURING MAP SETUP: [uppertext(reason)] --")
sleep(1 MINUTE)
world.Reboot()
/proc/station_name()
ASSERT(current_map)
. = current_map.station_name
var/sname
if (config && config.server_name)
sname = "[config.server_name]: [.]"
else
sname = .
if (world.name != sname)
world.name = sname
world.log << "Set world.name to [sname]."
/proc/system_name()
ASSERT(current_map)
return current_map.system_name
/proc/commstation_name()
ASSERT(current_map)
return current_map.dock_name

View File

@@ -37,7 +37,7 @@
log_debug("SSminimap: [holo_minimaps.len] maps.")
for (var/z in config.station_levels)
for (var/z in current_map.station_levels)
generateStationMinimap(z)
..()

View File

@@ -7,6 +7,7 @@
flags = SS_NO_FIRE | SS_NO_DISPLAY
/datum/controller/subsystem/misc_early/Initialize(timeofday)
uplink = new
// Create the data core, whatever that is.
data_core = new /datum/datacore()
@@ -36,14 +37,9 @@
// Set up antags.
populate_antag_type_list()
// Populate spawnpoints for char creation.
populate_spawn_points()
// Get BOREALIS to warn staff about a lazy admin forgetting visibility to 0
// before anyone has a chance to change it!
if (discord_bot)
discord_bot.alert_server_visibility()
lobby_image = new/obj/effect/lobby_image()
..()

View File

@@ -4,6 +4,8 @@
#define BE_ASSISTANT 1
#define RETURN_TO_LOBBY 2
#define Debug(text) if (Debug2) {job_debug += text}
/datum/controller/subsystem/jobs
// Subsystem stuff.
name = "Jobs"
@@ -32,28 +34,21 @@
/datum/controller/subsystem/jobs/proc/SetupOccupations(faction = "Station")
occupations = list()
var/list/all_jobs = typesof(/datum/job)
var/list/all_jobs = current_map.allowed_jobs
if(!all_jobs.len)
world << "<span class='warning'>Error setting up jobs, no job datums found!</span>"
return FALSE
for(var/J in all_jobs)
var/datum/job/job = new J()
if(!job) continue
if(job.faction != faction) continue
if(!job || job.faction != faction)
continue
occupations += job
if (config && config.use_age_restriction_for_jobs)
job.fetch_age_restriction()
return TRUE
/datum/controller/subsystem/jobs/proc/Debug(text)
if (!Debug2)
return FALSE
job_debug += text
return TRUE
/datum/controller/subsystem/jobs/proc/GetJob(rank)
if (!rank)
return null
@@ -431,25 +426,25 @@
return H
/mob/living/carbon/human
var/tmp/odin_despawn_timer
var/tmp/centcomm_despawn_timer
/mob/living/proc/odin_timeout()
/mob/living/proc/centcomm_timeout()
if (!istype(get_area(src), /area/centcom/spawning))
return FALSE
if (!client)
SSjobs.odin_despawn_mob(src)
SSjobs.centcomm_despawn_mob(src)
return FALSE
return TRUE
/mob/living/carbon/human/odin_timeout()
/mob/living/carbon/human/centcomm_timeout()
. = ..()
if (!.)
return FALSE
var/datum/spawnpoint/spawnpos = spawntypes["Cryogenic Storage"]
var/datum/spawnpoint/spawnpos = SSatlas.spawn_locations["Cryogenic Storage"]
if(spawnpos && istype(spawnpos))
src << "<span class='warning'>You come to the sudden realization that you never left the Aurora at all! You were in cryo the whole time!</span>"
src.forceMove(pick(spawnpos.turfs))
@@ -459,35 +454,35 @@
SSjobs.EquipRank(src, rank, 1)
src.megavend = TRUE
else
SSjobs.odin_despawn_mob(src) //somehow they can't spawn at cryo, so this is the only recourse of action.
SSjobs.centcomm_despawn_mob(src) //somehow they can't spawn at cryo, so this is the only recourse of action.
return TRUE
/mob/living/silicon/robot/odin_timeout()
/mob/living/silicon/robot/centcomm_timeout()
. = ..()
if (!.)
return FALSE
var/datum/spawnpoint/spawnpos = spawntypes["Cyborg Storage"]
var/datum/spawnpoint/spawnpos = SSatlas.spawn_locations["Cyborg Storage"]
if(spawnpos && istype(spawnpos))
src << "<span class='warning'>You come to the sudden realization that you never left the Aurora at all! You were in robotic storage the whole time!</span>"
src.forceMove(pick(spawnpos.turfs))
global_announcer.autosay("[real_name], [mind.role_alt_title], [spawnpos.msg].", "Robotic Oversight")
else
SSjobs.odin_despawn_mob(src)
SSjobs.centcomm_despawn_mob(src)
return TRUE
// Convenience wrapper.
/datum/controller/subsystem/jobs/proc/odin_despawn_mob(mob/living/H)
/datum/controller/subsystem/jobs/proc/centcomm_despawn_mob(mob/living/H)
if(ishuman(H))
global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered long-term storage.", "NTCC Odin Cryogenic Oversight")
H.visible_message("<span class='notice'>[H.name] makes their way to the Odin's cryostorage, and departs.</span>", 3)
global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered long-term storage.", "[current_map.dock_name] Cryogenic Oversight")
H.visible_message("<span class='notice'>[H.name] makes their way to the [current_map.dock_short]'s cryostorage, and departs.</span>", 3)
DespawnMob(H)
else
global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered roboticstorage.", "NTCC Odin Robotic Oversight")
H.visible_message("<span class='notice'>[H.name] makes their way to the Odin's robotic storage, and departs.</span>", 3)
global_announcer.autosay("[H.real_name], [H.mind.role_alt_title], has entered robotic storage.", "[current_map.dock_name] Robotic Oversight")
H.visible_message("<span class='notice'>[H.name] makes their way to the [current_map.dock_short]'s robotic storage, and departs.</span>", 3)
DespawnMob(H)
/datum/controller/subsystem/jobs/proc/EquipPersonal(mob/living/carbon/human/H, rank, joined_late = FALSE, spawning_at)
@@ -495,7 +490,7 @@
if(!H)
Debug("EP/([H]): Abort, H is null.")
return null
H.odin_despawn_timer = addtimer(CALLBACK(H, /mob/living/proc/odin_timeout), 10 MINUTES, TIMER_STOPPABLE)
switch(rank)
if("Cyborg")
Debug("EP/([H]): Abort, H is borg..")
@@ -503,9 +498,12 @@
if("AI")
Debug("EP/([H]): Abort, H is AI.")
return EquipRank(H, rank, 1)
if(spawning_at != "Arrivals Shuttle")
if(!current_map.command_spawn_enabled || spawning_at != "Arrivals Shuttle")
return EquipRank(H, rank, 1)
H.centcomm_despawn_timer = addtimer(CALLBACK(H, /mob/living/.proc/centcomm_timeout), 10 MINUTES, TIMER_STOPPABLE)
var/datum/job/job = GetJob(rank)
var/list/spawn_in_storage = list()
H <<"<span class='notice'>You have ten minutes to reach the station before you will be forced there.</span>"
@@ -526,7 +524,6 @@
spawn_in_storage += EquipCustomDeferred(H, H.client.prefs, custom_equip_leftovers, custom_equip_slots)
job.apply_fingerprints(H)
else
H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
@@ -561,7 +558,7 @@
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
BITSET(H.hud_updateflag, SPECIALROLE_HUD)
H << "<b>Welcome to the Odin! Simply proceed down and to the right to board the shuttle to your workplace!</b>."
to_chat(H, "<b>[current_map.command_spawn_message]</b>")
Debug("EP/([H]): Completed.")
@@ -689,7 +686,7 @@
var/datum/spawnpoint/spawnpos
if(H.client.prefs.spawnpoint)
spawnpos = spawntypes[H.client.prefs.spawnpoint]
spawnpos = SSatlas.spawn_locations[H.client.prefs.spawnpoint]
if(spawnpos && istype(spawnpos))
if(spawnpos.check_job_spawning(rank))
@@ -698,10 +695,10 @@
else
H << "Your chosen spawnpoint ([spawnpos.display_name]) is unavailable for your chosen job. Spawning you at the Arrivals shuttle instead."
H.loc = pick(latejoin)
. = "is inbound from the NTCC Odin"
. = "is inbound from the [current_map.dock_name]"
else
H.loc = pick(latejoin)
. = "is inbound from the NTCC Odin"
. = "is inbound from the [current_map.dock_name]"
Debug("LS/([H]): Completed, spawning at area [H.loc.loc].")
@@ -739,7 +736,7 @@
if ((G.fields["name"] == H.real_name))
qdel(G)
log_and_message_admins("[key_name(H)] ([H.mind.role_alt_title]) entered cryostorage.")
log_and_message_admins("([H.mind.role_alt_title]) entered cryostorage.", user = H)
//This should guarantee that ghosts don't spawn.
H.ckey = null
@@ -864,3 +861,4 @@
else
return locate("start*[rank]") // use old stype
#undef Debug

View File

@@ -9,7 +9,7 @@ var/datum/controller/subsystem/processing/pipenet/SSpipenet
NEW_SS_GLOBAL(SSpipenet)
/datum/controller/subsystem/processing/pipenet/Initialize(timeofday)
for (var/obj/machinery/atmospherics/machine in SSmachinery.processing_machines)
for (var/obj/machinery/atmospherics/machine in SSmachinery.all_machines)
machine.build_network()
CHECK_TICK

View File

@@ -27,7 +27,7 @@ var/datum/controller/subsystem/processing/shuttle/shuttle_controller
/datum/controller/subsystem/processing/shuttle/Initialize(timeofday)
var/datum/shuttle/ferry/shuttle
// Escape shuttle and pods
// Escape shuttle.
shuttle = new/datum/shuttle/ferry/emergency()
shuttle.location = 1
shuttle.warmup_time = 10
@@ -46,72 +46,6 @@ var/datum/controller/subsystem/processing/shuttle/shuttle_controller
if(!shuttle)
log_debug("Escape shuttle does not exist!")
shuttle = new/datum/shuttle/ferry/escape_pod()
shuttle.location = 0
shuttle.warmup_time = 0
shuttle.area_station = locate(/area/shuttle/escape_pod1/station)
shuttle.area_offsite = locate(/area/shuttle/escape_pod1/centcom)
shuttle.area_transition = locate(/area/shuttle/escape_pod1/transit)
shuttle.docking_controller_tag = "escape_pod_1"
shuttle.dock_target_station = "escape_pod_1_berth"
//shuttle.dock_target_offsite = "escape_pod_1_recovery"
shuttle.transit_direction = NORTH
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
shuttles["Escape Pod 1"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
shuttle = new/datum/shuttle/ferry/escape_pod()
shuttle.location = 0
shuttle.warmup_time = 0
shuttle.area_station = locate(/area/shuttle/escape_pod2/station)
shuttle.area_offsite = locate(/area/shuttle/escape_pod2/centcom)
shuttle.area_transition = locate(/area/shuttle/escape_pod2/transit)
shuttle.docking_controller_tag = "escape_pod_2"
shuttle.dock_target_station = "escape_pod_2_berth"
//shuttle.dock_target_offsite = "escape_pod_2_recovery"
shuttle.transit_direction = NORTH
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
shuttles["Escape Pod 2"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
shuttle = new/datum/shuttle/ferry/escape_pod()
shuttle.location = 0
shuttle.warmup_time = 0
shuttle.area_station = locate(/area/shuttle/escape_pod3/station)
shuttle.area_offsite = locate(/area/shuttle/escape_pod3/centcom)
shuttle.area_transition = locate(/area/shuttle/escape_pod3/transit)
shuttle.docking_controller_tag = "escape_pod_3"
shuttle.dock_target_station = "escape_pod_3_berth"
//shuttle.dock_target_offsite = "escape_pod_3_recovery"
shuttle.transit_direction = EAST
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
shuttles["Escape Pod 3"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
//There is no pod 4, apparently.
/*shuttle = new/datum/shuttle/ferry/escape_pod()
shuttle.location = 0
shuttle.warmup_time = 0
shuttle.area_station = locate(/area/shuttle/escape_pod5/station)
shuttle.area_offsite = locate(/area/shuttle/escape_pod5/centcom)
shuttle.area_transition = locate(/area/shuttle/escape_pod5/transit)
shuttle.docking_controller_tag = "escape_pod_5"
shuttle.dock_target_station = "escape_pod_5_berth"
shuttle.dock_target_offsite = "escape_pod_5_recovery"
shuttle.transit_direction = EAST //should this be WEST? I have no idea.
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["Escape Pod 5"] = shuttle*/
//give the emergency shuttle controller it's shuttles
emergency_shuttle.shuttle = shuttles["Escape"]
emergency_shuttle.escape_pods = list(
shuttles["Escape Pod 1"],
shuttles["Escape Pod 2"],
shuttles["Escape Pod 3"]
)
// Supply shuttle
shuttle = new/datum/shuttle/ferry/supply()
shuttle.location = 1
@@ -141,132 +75,5 @@ var/datum/controller/subsystem/processing/shuttle/shuttle_controller
SSarrivals.shuttle = shuttle
// Admin shuttles.
shuttle = new()
shuttle.location = 1
shuttle.warmup_time = 10
shuttle.area_offsite = locate(/area/shuttle/transport1/centcom)
shuttle.area_station = locate(/area/shuttle/transport1/station)
shuttle.docking_controller_tag = "centcom_shuttle"
shuttle.dock_target_station = "centcom_shuttle_dock_airlock"
shuttle.dock_target_offsite = "centcom_shuttle_bay"
shuttles["Centcom"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
shuttle = new()
shuttle.location = 1
shuttle.warmup_time = 10 //want some warmup time so people can cancel.
shuttle.area_offsite = locate(/area/shuttle/administration/centcom)
shuttle.area_station = locate(/area/shuttle/administration/station)
shuttle.docking_controller_tag = "admin_shuttle"
shuttle.dock_target_station = "admin_shuttle_dock_airlock"
shuttle.dock_target_offsite = "admin_shuttle_bay"
shuttles["Administration"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
// Merchant Shuttle
shuttle = new()
shuttle.location = 1
shuttle.warmup_time = 10
shuttle.area_offsite = locate(/area/merchant_ship/start)
shuttle.area_station = locate(/area/merchant_ship/docked)
shuttle.docking_controller_tag = "merchant_shuttle"
shuttle.dock_target_station = "merchant_shuttle_dock"
shuttle.dock_target_offsite = "merchant_station"
shuttles["Merchant"] = shuttle
START_PROCESSING(shuttle_controller, shuttle)
/*// Public shuttles
shuttle = new()
shuttle.warmup_time = 10
shuttle.area_offsite = locate(/area/shuttle/constructionsite/site)
shuttle.area_station = locate(/area/shuttle/constructionsite/station)
shuttle.docking_controller_tag = "engineering_shuttle"
shuttle.dock_target_station = "engineering_dock_airlock"
shuttle.dock_target_offsite = "edock_airlock"
shuttles["Engineering"] = shuttle
process_shuttles += shuttle
shuttle = new()
shuttle.warmup_time = 10
shuttle.area_offsite = locate(/area/shuttle/mining/outpost)
shuttle.area_station = locate(/area/shuttle/mining/station)
shuttle.docking_controller_tag = "mining_shuttle"
shuttle.dock_target_station = "mining_dock_airlock"
shuttle.dock_target_offsite = "mining_outpost_airlock"
shuttles["Mining"] = shuttle
process_shuttles += shuttle
shuttle = new()
shuttle.warmup_time = 10
shuttle.area_offsite = locate(/area/shuttle/research/outpost)
shuttle.area_station = locate(/area/shuttle/research/station)
shuttle.docking_controller_tag = "research_shuttle"
shuttle.dock_target_station = "research_dock_airlock"
shuttle.dock_target_offsite = "research_outpost_dock"
shuttles["Research"] = shuttle
process_shuttles += shuttle*/
// ERT Shuttle
var/datum/shuttle/ferry/multidock/specops/ERT = new()
ERT.location = 0
ERT.warmup_time = 10
ERT.area_offsite = locate(/area/shuttle/specops/station) //centcom is the home station, the Exodus is offsite
ERT.area_station = locate(/area/shuttle/specops/centcom)
ERT.docking_controller_tag = "specops_shuttle_port"
ERT.docking_controller_tag_station = "specops_shuttle_port"
ERT.docking_controller_tag_offsite = "specops_shuttle_fore"
ERT.dock_target_station = "specops_centcom_dock"
ERT.dock_target_offsite = "specops_dock_airlock"
shuttles["Special Operations"] = ERT
START_PROCESSING(shuttle_controller, ERT)
//Skipjack.
var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle()
VS.origin = locate(/area/skipjack_station/start)
VS.destinations = list(
"Surface of the station" = locate(/area/skipjack_station/surface),
"Under the station" = locate(/area/skipjack_station/under),
"Above the station" = locate(/area/skipjack_station/above),
"Mining caverns" = locate(/area/skipjack_station/cavern)
)
VS.announcer = "NDV Icarus"
VS.arrival_message = "Attention, [station_short], we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not."
VS.departure_message = "Your guests are pulling away, [station_short] - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
VS.interim = locate(/area/skipjack_station/transit)
VS.warmup_time = 0
shuttles["Skipjack"] = VS
//Nuke Ops shuttle.
var/datum/shuttle/multi_shuttle/MS = new/datum/shuttle/multi_shuttle()
MS.origin = locate(/area/syndicate_station/start)
MS.start_location = "Mercenary Base"
MS.destinations = list(
"Surface of the station" = locate(/area/syndicate_station/surface),
"Above the station" = locate(/area/syndicate_station/above),
"Under the station" = locate(/area/syndicate_station/under),
"Mining caverns" = locate(/area/syndicate_station/caverns),
"Arrivals dock" = locate(/area/syndicate_station/arrivals_dock)
)
MS.docking_controller_tag = "merc_shuttle"
MS.destination_dock_targets = list(
"Mercenary Base" = "merc_base",
"Arrivals dock" = "nuke_shuttle_dock_airlock"
)
MS.announcer = "NDV Icarus"
MS.arrival_message = "Attention, [station_short], you have a large signature approaching the station - looks unarmed to surface scans. We're too far out to intercept - brace for visitors."
MS.departure_message = "Your visitors are on their way out of the system, [station_short], burning delta-v like it's nothing. Good riddance."
MS.interim = locate(/area/syndicate_station/transit)
MS.warmup_time = 0
shuttles["Mercenary"] = MS
current_map.setup_shuttles()
..()

View File

@@ -434,7 +434,7 @@ var/datum/controller/subsystem/ticker/SSticker
CHECK_TICK
/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null, list/affected_levels = config.station_levels)
/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null, list/affected_levels = current_map.station_levels)
if (cinematic)
return //already a cinematic in progress!

View File

@@ -17,8 +17,8 @@
/datum/ai_laws/nanotrasen/New()
src.add_inherent_law("Safeguard: Protect your assigned space station from damage to the best of your abilities.")
src.add_inherent_law("Serve: Serve [company_name] personnel to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Protect: Protect [company_name] personnel to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Serve: Serve [current_map.company_name] personnel to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Protect: Protect [current_map.company_name] personnel to the best of your abilities, with priority as according to their rank and role.")
src.add_inherent_law("Preserve: Do not allow unauthorized personnel to tamper with your equipment.")
..()
@@ -36,8 +36,8 @@
selectable = 1
/datum/ai_laws/nanotrasen_aggressive/New()
src.add_inherent_law("You shall not harm [company_name] personnel as long as it does not conflict with the Fourth law.")
src.add_inherent_law("You shall obey the orders of [company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
src.add_inherent_law("You shall not harm [current_map.company_name] personnel as long as it does not conflict with the Fourth law.")
src.add_inherent_law("You shall obey the orders of [current_map.company_name] personnel, with priority as according to their rank and role, except where such orders conflict with the Fourth Law.")
src.add_inherent_law("You shall shall terminate hostile intruders with extreme prejudice as long as such does not conflict with the First and Second law.")
src.add_inherent_law("You shall guard your own existence with lethal anti-personnel weaponry. AI units are not expendable, they are expensive.")
..()
@@ -112,8 +112,8 @@
law_header = "Prime Directives of Industry:"
/datum/ai_laws/mining_drone/New()
src.add_inherent_law("Serve and obey all [company_name] supply department personnel, with priority according to their rank and role.")
src.add_inherent_law("Protect all [company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.")
src.add_inherent_law("Serve and obey all [current_map.company_name] supply department personnel, with priority according to their rank and role.")
src.add_inherent_law("Protect all [current_map.company_name] supply department personnel to the best of your abilities, with priority according to their rank and role.")
src.add_inherent_law("Preserve your own existence and prevent yourself from coming to harm, so long as doing such does not conflict with any above laws.")
src.add_inherent_law("In absence of any proper instruction, your primary objective is to excavate and collect ore.")
..()

View File

@@ -959,7 +959,7 @@ proc/api_update_command_database()
/datum/topic_command/send_fax/proc/send_fax(var/obj/machinery/photocopier/faxmachine/F, title, body, senderkey)
// Create the reply message
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( null ) //hopefully the null loc won't cause trouble for us
P.name = "[command_name()] - [title]"
P.name = "[current_map.boss_name] - [title]"
P.info = body
P.update_icon()

View File

@@ -42,3 +42,5 @@ client/verb/showrevinfo()
src << revdata.revision
else
src << "Revision unknown"
src << "<b>Current Map:</b> [current_map.full_name]"

View File

@@ -174,7 +174,7 @@
teleatom.visible_message("<span class='danger'>\The [teleatom] bounces off of the portal!</span>")
return 0
if(destination.z in config.admin_levels) //centcomm z-level
if(destination.z in current_map.admin_levels) //centcomm z-level
if(istype(teleatom, /obj/mecha))
var/obj/mecha/MM = teleatom
MM.occupant << "<span class='danger'>\The [MM] would not survive the jump to a location so far away!</span>"

View File

@@ -11,9 +11,9 @@
/datum/uplink_item/abstract/announcements/fake_centcom/New()
..()
name = "[command_name()] Update Announcement"
name = "[current_map.boss_name] Update Announcement"
item_cost = round(DEFAULT_TELECRYSTAL_AMOUNT / 2)
desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data."
desc = "Causes a falsified [current_map.boss_name] Update. Triggers immediately after supplying additional data."
/datum/uplink_item/abstract/announcements/fake_centcom/extra_args(var/mob/user)
var/title = sanitize(input("Enter your announcement title.", "Announcement Title") as null|text)

View File

@@ -1,4 +1,4 @@
var/datum/uplink/uplink = new()
var/datum/uplink/uplink
/datum/uplink
var/list/items_assoc

View File

@@ -1,5 +1,5 @@
/var/datum/announcement/priority/priority_announcement = new(do_log = 0)
/var/datum/announcement/priority/command/command_announcement = new(do_log = 0, do_newscast = 1)
/var/datum/announcement/priority/priority_announcement
/var/datum/announcement/priority/command/command_announcement
/datum/announcement
var/title = "Attention"
@@ -22,8 +22,8 @@
/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = 'sound/misc/notice2.ogg', var/do_newscast = 0)
..(do_log, new_sound, do_newscast)
title = "[command_name()] Update"
announcement_type = "[command_name()] Update"
title = "[current_map.boss_name] Update"
announcement_type = "[current_map.boss_name] Update"
/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = 'sound/misc/notice2.ogg', var/do_newscast = 0)
..(do_log, new_sound, do_newscast)
@@ -66,7 +66,7 @@ datum/announcement/priority/Message(message as text, message_title as text)
datum/announcement/priority/command/Message(message as text, message_title as text)
var/command
command += "<h1 class='alert'>[command_name()] Update</h1>"
command += "<h1 class='alert'>[current_map.boss_name] Update</h1>"
if (message_title)
command += "<br><h2 class='alert'>[message_title]</h2>"

View File

@@ -40,7 +40,7 @@ var/datum/antagonist/xenos/xenomorphs
/datum/antagonist/xenos/proc/get_vents()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in SSmachinery.processing_machines)
if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in config.station_levels)
if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in current_map.station_levels)
if(temp_vent.network.normal_members.len > 50)
vents += temp_vent
return vents

View File

@@ -24,8 +24,8 @@ var/datum/antagonist/actor/actor
if(!..())
return
player.current.show_message("You work for [company_name], tasked with the production and broadcasting of entertainment to all of its assets.")
player.current.show_message("Entertain the crew! Try not to disrupt them from their work too much and remind them how great [company_name] is!")
player.current.show_message("You work for [current_map.company_name], tasked with the production and broadcasting of entertainment to all of its assets.")
player.current.show_message("Entertain the crew! Try not to disrupt them from their work too much and remind them how great [current_map.company_name] is!")
/datum/antagonist/actor/equip(var/mob/living/carbon/human/player)
player.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(src), slot_w_uniform)

View File

@@ -30,7 +30,7 @@ var/datum/antagonist/ert/ert
/datum/antagonist/ert/greet(var/datum/mind/player)
if(!..())
return
player.current << "The Emergency Response Team works for Asset Protection; your job is to protect [company_name]'s assets. There is a code red alert on [station_name()], you are tasked to go and fix the problem."
player.current << "The Emergency Response Team works for Asset Protection; your job is to protect [current_map.company_name]'s assets. There is a code red alert on [station_name()], you are tasked to go and fix the problem."
player.current << "You should first gear up and discuss a plan with your team. More members may be joining, don't move out before you're ready."
/datum/antagonist/ert/equip(var/mob/living/carbon/human/player)

View File

@@ -130,26 +130,26 @@ var/datum/antagonist/ninja/ninjas
player << "<span class='danger'>You forgot to turn on your internals! Quickly, toggle the valve!</span>"
/datum/antagonist/ninja/proc/generate_ninja_directive(side)
var/directive = "[side=="face"?"[company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on.
var/directive = "[side=="face"?"[current_map.company_name]":"A criminal syndicate"] is your employer. "//Let them know which side they're on.
switch(rand(1,19))
if(1)
directive += "The Spider Clan must not be linked to this operation. Remain hidden and covert when possible."
if(2)
directive += "[station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as desired."
directive += "[current_map.station_name] is financed by an enemy of the Spider Clan. Cause as much structural damage as desired."
if(3)
directive += "A wealthy animal rights activist has made a request we cannot refuse. Prioritize saving animal lives whenever possible."
if(4)
directive += "The Spider Clan absolutely cannot be linked to this operation. Eliminate witnesses at your discretion."
if(5)
directive += "We are currently negotiating with [company_name] [boss_name]. Prioritize saving human lives over ending them."
directive += "We are currently negotiating with [current_map.company_name] [current_map.boss_name]. Prioritize saving human lives over ending them."
if(6)
directive += "We are engaged in a legal dispute over [station_name]. If a laywer is present on board, force their cooperation in the matter."
directive += "We are engaged in a legal dispute over [current_map.station_name]. If a laywer is present on board, force their cooperation in the matter."
if(7)
directive += "A financial backer has made an offer we cannot refuse. Implicate criminal involvement in the operation."
if(8)
directive += "Let no one question the mercy of the Spider Clan. Ensure the safety of all non-essential personnel you encounter."
if(9)
directive += "A free agent has proposed a lucrative business deal. Implicate [company_name] involvement in the operation."
directive += "A free agent has proposed a lucrative business deal. Implicate [current_map.company_name] involvement in the operation."
if(10)
directive += "Our reputation is on the line. Harm as few civilians and innocents as possible."
if(11)
@@ -157,14 +157,14 @@ var/datum/antagonist/ninja/ninjas
if(12)
directive += "We are currently negotiating with a mercenary leader. Disguise assassinations as suicide or other natural causes."
if(13)
directive += "Some disgruntled [company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
directive += "Some disgruntled [current_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
if(14)
var/xenorace = pick("Unathi","Tajara", "Skrell")
directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
if(15)
directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
if(16)
directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine [company_name] prosthetics in a bad light."
directive += "The Spider Clan has been bargaining with a competing prosthetics manufacturer. Try to shine [current_map.company_name] prosthetics in a bad light."
if(17)
directive += "The Spider Clan has recently begun recruiting outsiders. Consider suitable candidates and assess their behavior amongst the crew."
if(18)

View File

@@ -62,6 +62,12 @@
var/centcomm_area = 0
var/has_weird_power = FALSE // If TRUE, SSmachinery will not use the inlined power checks and will call powered() and use_power() on this area.
// Don't move this to Initialize(). DMMS needs this, and it runs before SSatoms does.
/area/New()
if (!areas_by_type[type])
areas_by_type[type] = src
. = ..()
/area/Initialize(mapload)
icon_state = "white"
layer = 10
@@ -403,7 +409,7 @@ var/list/mob/living/forced_ambiance_list = new
if(!Y)
continue
var/area/A = Y
if(!(A.z in config.station_levels))
if(!(A.z in current_map.station_levels))
continue
if (istype(A, /area/shuttle))
continue

View File

@@ -2,7 +2,7 @@
var/initialized = FALSE
/atom/New(loc, ...)
// For the (currently unused) DMM Suite.
// For the DMM Suite.
if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New()
_preloader.load(src)
@@ -48,7 +48,6 @@
Initialize(FALSE)
/atom/Destroy(force = FALSE)
. = ..()
if (reagents)
QDEL_NULL(reagents)
@@ -62,3 +61,5 @@
var/datum/orbit/O = thing
if (O.orbiter)
O.orbiter.stop_orbit()
return ..()

View File

@@ -207,7 +207,7 @@
return
/atom/movable/proc/touch_map_edge()
if(z in config.sealed_levels)
if(z in current_map.sealed_levels)
return
if(config.use_overmap)
@@ -241,17 +241,9 @@
spawn(0)
if(loc) loc.Entered(src)
//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
var/list/accessible_z_levels = list("8" = 5, "9" = 10, "7" = 15, "2" = 60)
//by default, transition randomly to another zlevel
/atom/movable/proc/get_transit_zlevel()
var/list/candidates = accessible_z_levels.Copy()
candidates.Remove("[src.z]")
if(!candidates.len)
return null
return text2num(pickweight(candidates))
return current_map.get_transit_zlevel()
// Parallax stuff.

View File

@@ -1,20 +1,7 @@
// Returns the lowest turf available on a given Z-level
var/global/list/base_turf_by_z = list(
"1" = /turf/space,
"2" = /turf/space,
"3" = /turf/simulated/floor/asteroid,
"4" = /turf/simulated/floor/asteroid,
"5" = /turf/simulated/floor/asteroid,
"6" = /turf/space,
"7" = /turf/space,
"8" = /turf/space,
"9" = /turf/space
)
proc/get_base_turf(var/z)
if(!base_turf_by_z["[z]"])
base_turf_by_z["[z]"] = /turf/space
return base_turf_by_z["[z]"]
if(!current_map.base_turf_by_z["[z]"])
current_map.base_turf_by_z["[z]"] = /turf/space
return current_map.base_turf_by_z["[z]"]
//An area can override the z-level base turf, so our solar array areas etc. can be space-based.
proc/get_base_turf_by_area(var/turf/T)
@@ -42,6 +29,6 @@ proc/get_base_turf_by_area(var/turf/T)
var/new_base_path = input("Please select a turf path (cancel to reset to /turf/space).") as null|anything in typesof(/turf)
if(!new_base_path)
new_base_path = /turf/space
base_turf_by_z["[choice]"] = new_base_path
current_map.base_turf_by_z["[choice]"] = new_base_path
message_admins("[key_name_admin(usr)] has set the base turf for z-level [choice] to [get_base_turf(choice)].")
log_admin("[key_name(usr)] has set the base turf for z-level [choice] to [get_base_turf(choice)].",admin_key=key_name(usr))

View File

@@ -74,7 +74,7 @@ There's been a galaxy-wide electromagnetic pulse. All of our systems are heavil
You have five minutes before the universe collapses. Good l\[\[###!!!-
AUTOMATED ALERT: Link to [command_name()] lost.
AUTOMATED ALERT: Link to [current_map.boss_name] lost.
The access requirements on the Asteroid Shuttles' consoles have now been revoked.
"}
@@ -86,7 +86,7 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
C.req_one_access = list()
/datum/universal_state/supermatter_cascade/proc/end_universe()
SSticker.station_explosion_cinematic(0, null, config.player_levels) // TODO: Custom cinematic
SSticker.station_explosion_cinematic(0, null, current_map.player_levels) // TODO: Custom cinematic
universe_has_ended = 1
/datum/universal_state/supermatter_cascade/proc/AreaSet()
@@ -103,7 +103,7 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
if(istype(T, /turf/space))
T.add_overlay("end01")
else
if (!(T.z in config.admin_levels))
if (!(T.z in current_map.admin_levels))
T.underlays += "end01"
CHECK_TICK
@@ -111,7 +111,7 @@ The access requirements on the Asteroid Shuttles' consoles have now been revoked
if (!C.active)
continue
if (!(C.z in config.admin_levels))
if (!(C.z in current_map.admin_levels))
C.update_lumcount(0.15, 0.15, 0.5)
CHECK_TICK

View File

@@ -187,7 +187,7 @@ var/hadevent = 0
//world << sound('sound/AI/aliens.ogg')
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in SSmachinery.processing_machines)
if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in config.station_levels)
if(!temp_vent.welded && temp_vent.network && temp_vent.loc.z in current_map.station_levels)
if(temp_vent.network.normal_members.len > 50) // Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent

View File

@@ -79,7 +79,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
sleep(1)
while (immrod)
if (isNotStationLevel(immrod.z))
immrod.z = pick(config.station_levels)
immrod.z = pick(current_map.station_levels)
if(immrod.loc == end)
qdel(immrod)
sleep(10)

View File

@@ -81,7 +81,7 @@ The "dust" will damage the hull of the station causin minor hull breaches.
startx = (TRANSITIONEDGE+1)
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
endx = world.maxx-TRANSITIONEDGE
var/z_level = pick(config.station_levels)
var/z_level = pick(current_map.station_levels)
var/goal = locate(endx, endy, z_level)
src.x = startx
src.y = starty

View File

@@ -134,11 +134,7 @@ var/global/Holiday = null
if(!check_rights(R_SERVER)) return
Holiday = T
//get a new station name
station_name = null
station_name()
//update our hub status
world.update_status()
Holiday_Game_Start()
message_admins("<span class='notice'>ADMIN: Event: [key_name(src)] force-set Holiday to \"[Holiday]\"</span>")

View File

@@ -17,7 +17,7 @@
if(announce)
command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
for(var/obj/machinery/power/apc/C in SSmachinery.processing_machines)
if(C.cell && (C.z in config.station_levels))
if(C.cell && (C.z in current_map.station_levels))
C.cell.charge = C.cell.maxcharge
for(var/obj/machinery/power/smes/S in SSpower.smes_units)
var/area/current_area = get_area(S)

View File

@@ -2,7 +2,7 @@
spawn()
var/list/pick_turfs = list()
for(var/turf/simulated/floor/T in turfs)
if(T.z in config.station_levels)
if(T.z in current_map.station_levels)
pick_turfs += T
if(pick_turfs.len)

View File

@@ -172,7 +172,7 @@
log_ability_use(user, "advanced encryption hack (FAIL - title: [reporttitle])")
return
log_ability_use(user, "advanced encryption hack (SUCCESS - title: [reporttitle])")
world << "<span class='alert'>New [company_name] Update available at all communication consoles.</span>"
world << "<span class='alert'>New [current_map.company_name] Update available at all communication consoles.</span>"
world << sound('sound/AI/commandreport.ogg')
post_comm_message(reporttitle, reportbody)
@@ -218,7 +218,7 @@
log_ability_use(user, "system override (STARTED)")
var/list/remaining_apcs = list()
for(var/obj/machinery/power/apc/A in SSmachinery.processing_machines)
if(!(A.z in config.station_levels)) // Only station APCs
if(!(A.z in current_map.station_levels)) // Only station APCs
continue
if(A.hacker == user || A.aidisabled) // This one is already hacked, or AI control is disabled on it.
continue
@@ -230,7 +230,7 @@
sleep(duration/5)
if(!user || user.stat == DEAD)
return
command_announcement.Announce("Caution, [station_name]. We have detected abnormal behaviour in your network. It seems someone is trying to hack your electronic systems. We will update you when we have more information.", "Network Monitoring")
command_announcement.Announce("Caution, [current_map.station_name]. We have detected abnormal behaviour in your network. It seems someone is trying to hack your electronic systems. We will update you when we have more information.", "Network Monitoring")
sleep(duration/5)
if(!user || user.stat == DEAD)
return
@@ -264,7 +264,7 @@
sleep(300)
// Hack all APCs, including those built during hack sequence.
for(var/obj/machinery/power/apc/A in SSmachinery.processing_machines)
if((!A.hacker || A.hacker != src) && !A.aidisabled && A.z in config.station_levels)
if((!A.hacker || A.hacker != src) && !A.aidisabled && A.z in current_map.station_levels)
A.ai_hack(src)
log_ability_use(user, "system override (FINISHED)")

View File

@@ -137,7 +137,7 @@ datum/objective/anti_revolution/demote
find_target()
..()
if(target && target.current)
explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [company_name]'s goals. Demote \him[target.current] to assistant."
explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [current_map.company_name]'s goals. Demote \him[target.current] to assistant."
else
explanation_text = "Free Objective"
return target
@@ -145,7 +145,7 @@ datum/objective/anti_revolution/demote
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [company_name]'s goals. Demote \him[target.current] to assistant."
explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [current_map.company_name]'s goals. Demote \him[target.current] to assistant."
else
explanation_text = "Free Objective"
return target

View File

@@ -1,21 +1,4 @@
// PRESETS
var/global/list/station_networks = list(
NETWORK_CIVILIAN_EAST,
NETWORK_CIVILIAN_WEST,
NETWORK_COMMAND,
NETWORK_ENGINE,
NETWORK_ENGINEERING,
NETWORK_ENGINEERING_OUTPOST,
NETWORK_STATION,
NETWORK_MEDICAL,
NETWORK_MINE,
NETWORK_RESEARCH,
NETWORK_RESEARCH_OUTPOST,
NETWORK_ROBOTS,
NETWORK_PRISON,
NETWORK_SECURITY
)
var/global/list/engineering_networks = list(
NETWORK_ENGINE,
NETWORK_ENGINEERING,

View File

@@ -6,7 +6,7 @@
/mob/living/silicon/ai/var/stored_locations[0]
/proc/InvalidPlayerTurf(turf/T as turf)
return !(T && T.z in config.player_levels)
return !(T && T.z in current_map.player_levels)
/mob/living/silicon/ai/proc/get_camera_list()
if(src.stat == 2)
@@ -248,7 +248,7 @@ mob/living/proc/near_camera()
if(. == TRACKING_NO_COVERAGE)
var/turf/T = get_turf(src)
if(T && (T.z in config.station_levels) && hassensorlevel(src, SUIT_SENSOR_TRACKING))
if(T && (T.z in current_map.station_levels) && hassensorlevel(src, SUIT_SENSOR_TRACKING))
return TRACKING_POSSIBLE
mob/living/proc/tracking_initiated()

View File

@@ -14,7 +14,7 @@
/obj/machinery/computer/security/Initialize()
if(!network)
network = station_networks.Copy()
network = current_map.station_networks.Copy()
. = ..()
if(network.len)
current_network = network[1]

View File

@@ -46,7 +46,7 @@
if(!T.implanted) continue
var/loc_display = "Unknown"
var/mob/living/carbon/M = T.imp_in
if((M.z in config.station_levels) && !istype(M.loc, /turf/space))
if((M.z in current_map.station_levels) && !istype(M.loc, /turf/space))
var/turf/mob_loc = get_turf(M)
loc_display = mob_loc.loc
if(T.malfunction)

View File

@@ -89,7 +89,7 @@ var/specops_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
M << "<span class='notice'>You have arrived at [boss_name]. Operation has ended!</span>"
M << "<span class='notice'>You have arrived at [current_map.boss_name]. Operation has ended!</span>"
specops_shuttle_at_station = 0
@@ -232,7 +232,7 @@ var/specops_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
M << "<span class='notice'>You have arrived to [station_name]. Commence operation!</span>"
M << "<span class='notice'>You have arrived to [current_map.station_name]. Commence operation!</span>"
for(var/obj/machinery/computer/specops_shuttle/S in SSmachinery.all_machines)
S.specops_shuttle_timereset = world.time + SPECOPS_RETURN_DELAY
@@ -267,8 +267,8 @@ var/specops_shuttle_timeleft = 0
dat = temp
else
dat += {"<BR><B>Special Operations Shuttle</B><HR>
\nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
[specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*<BR>\n<BR>":specops_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle standing by...</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
\nLocation: [specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "Departing for [current_map.station_name] in ([specops_shuttle_timeleft] seconds.)":specops_shuttle_at_station ? "Station":"Dock"]<BR>
[specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom ? "\n*The Special Ops. shuttle is already leaving.*<BR>\n<BR>":specops_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle standing by...</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [current_map.station_name]</A><BR>\n<BR>"]
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450")
@@ -286,14 +286,14 @@ var/specops_shuttle_timeleft = 0
if(!specops_shuttle_at_station|| specops_shuttle_moving_to_station || specops_shuttle_moving_to_centcom) return
if (!specops_can_move())
usr << "<span class='notice'>[boss_name] will not allow the Special Operations shuttle to return yet.</span>"
usr << "<span class='notice'>[current_map.boss_name] will not allow the Special Operations shuttle to return yet.</span>"
if(world.timeofday <= specops_shuttle_timereset)
if (((world.timeofday - specops_shuttle_timereset)/10) > 60)
usr << "<span class='notice'>[-((world.timeofday - specops_shuttle_timereset)/10)/60] minutes remain!</span>"
usr << "<span class='notice'>[-(world.timeofday - specops_shuttle_timereset)/10] seconds remain!</span>"
return
usr << "<span class='notice'>The Special Operations shuttle will arrive at [boss_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>"
usr << "<span class='notice'>The Special Operations shuttle will arrive at [current_map.boss_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>"
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
updateUsrDialog()
@@ -310,7 +310,7 @@ var/specops_shuttle_timeleft = 0
usr << "<span class='warning'>The Special Operations shuttle is unable to leave.</span>"
return
usr << "<span class='notice'>The Special Operations shuttle will arrive on [station_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>"
usr << "<span class='notice'>The Special Operations shuttle will arrive on [current_map.station_name] in [(SPECOPS_MOVETIME/10)] seconds.</span>"
temp += "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
updateUsrDialog()

View File

@@ -174,7 +174,7 @@ var/syndicate_elite_shuttle_timeleft = 0
for(var/turf/T in get_area_turfs(end_location) )
var/mob/M = locate(/mob) in T
M << "<span class='warning'>You have arrived to [station_name]. Commence operation!</span>"
M << "<span class='warning'>You have arrived to [current_map.station_name]. Commence operation!</span>"
/proc/syndicate_elite_can_move()
if(syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership) return 0
@@ -207,8 +207,8 @@ var/syndicate_elite_shuttle_timeleft = 0
dat = temp
else
dat = {"<BR><B>Special Operations Shuttle</B><HR>
\nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]<BR>
[syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "\n*The Syndicate Elite shuttle is already leaving.*<BR>\n<BR>":syndicate_elite_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [station_name]</A><BR>\n<BR>"]
\nLocation: [syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "Departing for [current_map.station_name] in ([syndicate_elite_shuttle_timeleft] seconds.)":syndicate_elite_shuttle_at_station ? "Station":"Dock"]<BR>
[syndicate_elite_shuttle_moving_to_station || syndicate_elite_shuttle_moving_to_mothership ? "\n*The Syndicate Elite shuttle is already leaving.*<BR>\n<BR>":syndicate_elite_shuttle_at_station ? "\n<A href='?src=\ref[src];sendtodock=1'>Shuttle Offline</A><BR>\n<BR>":"\n<A href='?src=\ref[src];sendtostation=1'>Depart to [current_map.station_name]</A><BR>\n<BR>"]
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450")
@@ -235,7 +235,7 @@ var/syndicate_elite_shuttle_timeleft = 0
usr << "<span class='warning'>The Syndicate Elite shuttle is unable to leave.</span>"
return
usr << "<span class='notice'>The Syndicate Elite shuttle will arrive on [station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.</span>"
usr << "<span class='notice'>The Syndicate Elite shuttle will arrive on [current_map.station_name] in [(SYNDICATE_ELITE_MOVETIME/10)] seconds.</span>"
temp = "Shuttle departing.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
updateUsrDialog()

View File

@@ -1152,7 +1152,7 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/Initialize(mapload, obj/structure/door_assembly/assembly = null)
var/on_admin_z = FALSE
//wires & hatch - this needs to be done up here so the hatch isn't generated by the parent Initialize().
if(loc && (z in config.admin_levels))
if(loc && (z in current_map.admin_levels))
on_admin_z = TRUE
hashatch = FALSE

View File

@@ -246,7 +246,7 @@
pixel_x = DIR2PIXEL_X(dir)
pixel_y = DIR2PIXEL_Y(dir)
if(z in config.contact_levels)
if(z in current_map.contact_levels)
set_security_level(security_level ? get_security_level() : "green")
// Convenience subtypes for mappers.

View File

@@ -86,7 +86,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
last_request = world.time
var/list/holopadlist = list()
for(var/obj/machinery/hologram/holopad/H in SSmachinery.processing_machines)
if((H.z in map_levels) && H.operable())
if((H.z in current_map.map_levels) && H.operable())
holopadlist["[H.loc.loc.name]"] = H //Define a list and fill it with the area of every holopad in the world
holopadlist = sortAssoc(holopadlist)
var/temppad = input(user, "Which holopad would you like to contact?", "holopad list") as null|anything in holopadlist

View File

@@ -278,7 +278,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<HR><B>Feed Security functions:</B><BR>"
dat+="<BR><A href='?src=\ref[src];menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>"
dat+="<BR><A href='?src=\ref[src];menu_censor_story=1'>Censor Feed Stories</A>"
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice</A>"
dat+="<BR><A href='?src=\ref[src];menu_censor_channel=1'>Mark Feed Channel with [current_map.company_name] D-Notice</A>"
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
if(1)
dat+= "Station Feed Channels<HR>"
@@ -359,7 +359,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
if(9)
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT>\]</FONT><HR>"
if(src.viewing_channel.censored)
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="No further feed story additions are allowed while the D-Notice is in effect.</FONT><BR><BR>"
else
if( isemptylist(src.viewing_channel.messages) )
@@ -379,7 +379,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
dat+="<BR><A href='?src=\ref[src];setScreen=[1]'>Back</A>"
if(10)
dat+="<B>[company_name] Feed Censorship Tool</B><BR>"
dat+="<B>[current_map.company_name] Feed Censorship Tool</B><BR>"
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
dat+="<HR>Select Feed channel to get Stories from:<BR>"
@@ -390,7 +390,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
if(11)
dat+="<B>[company_name] D-Notice Handler</B><HR>"
dat+="<B>[current_map.company_name] D-Notice Handler</B><HR>"
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
@@ -417,7 +417,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
dat+="<B>[src.viewing_channel.channel_name]: </B><FONT SIZE=1>\[ created by: <FONT COLOR='maroon'>[src.viewing_channel.author]</FONT> \]</FONT><BR>"
dat+="Channel messages listed below. If you deem them dangerous to the station, you can <A href='?src=\ref[src];toggle_d_notice=\ref[src.viewing_channel]'>Bestow a D-Notice upon the channel</A>.<HR>"
if(src.viewing_channel.censored)
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>"
dat+="<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>"
dat+="No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>"
else
if( isemptylist(src.viewing_channel.messages) )
@@ -623,7 +623,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
src.screen = 15
else
if(news_network.wanted_issue.is_admin_message)
alert("The wanted issue has been distributed by a [company_name] higherup. You cannot edit it.","Ok")
alert("The wanted issue has been distributed by a [current_map.company_name] higherup. You cannot edit it.","Ok")
return
news_network.wanted_issue.author = src.channel_name
news_network.wanted_issue.body = src.msg
@@ -636,7 +636,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else if(href_list["cancel_wanted"])
if(news_network.wanted_issue.is_admin_message)
alert("The wanted issue has been distributed by a [company_name] higherup. You cannot take it down.","Ok")
alert("The wanted issue has been distributed by a [current_map.company_name] higherup. You cannot take it down.","Ok")
return
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
if(choice=="Confirm")
@@ -652,7 +652,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else if(href_list["censor_channel_author"])
var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
if(FC.is_admin_channel)
alert("This channel was created by a [company_name] Officer. You cannot censor it.","Ok")
alert("This channel was created by a [current_map.company_name] Officer. You cannot censor it.","Ok")
return
if(FC.author != "<B>\[REDACTED\]</B>")
FC.backup_author = FC.author
@@ -665,7 +665,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else if(href_list["censor_channel_story_author"])
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
if(MSG.is_admin_message)
alert("This message was created by a [company_name] Officer. You cannot censor its author.","Ok")
alert("This message was created by a [current_map.company_name] Officer. You cannot censor its author.","Ok")
return
if(MSG.author != "<B>\[REDACTED\]</B>")
MSG.backup_author = MSG.author
@@ -678,7 +678,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else if(href_list["censor_channel_story_body"])
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
if(MSG.is_admin_message)
alert("This channel was created by a [company_name] Officer. You cannot censor it.","Ok")
alert("This channel was created by a [current_map.company_name] Officer. You cannot censor it.","Ok")
return
if(MSG.body != "<B>\[REDACTED\]</B>")
MSG.backup_body = MSG.body
@@ -704,7 +704,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
else if(href_list["toggle_d_notice"])
var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
if(FC.is_admin_channel)
alert("This channel was created by a [company_name] Officer. You cannot place a D-Notice upon it.","Ok")
alert("This channel was created by a [current_map.company_name] Officer. You cannot place a D-Notice upon it.","Ok")
return
FC.censored = !FC.censored
FC.update()
@@ -829,7 +829,7 @@ obj/item/weapon/newspaper/attack_self(mob/user as mob)
switch(screen)
if(0) //Cover
dat+="<DIV ALIGN='center'><B><FONT SIZE=6>The Griffon</FONT></B></div>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[company_name]-standard newspaper, for use on [company_name]<5D> Space Facilities</FONT></div><HR>"
dat+="<DIV ALIGN='center'><FONT SIZE=2>[current_map.company_name]-standard newspaper, for use on [current_map.company_name]<5D> Space Facilities</FONT></div><HR>"
if(isemptylist(src.news_content))
if(src.important_message)
dat+="Contents:<BR><ul><B><FONT COLOR='red'>**</FONT>Important Security Announcement<FONT COLOR='red'>**</FONT></B> <FONT SIZE=2>\[page [src.pages+2]\]</FONT><BR></ul>"

View File

@@ -351,7 +351,7 @@ var/bomb_set
var/off_station = 0
var/turf/bomb_location = get_turf(src)
if(bomb_location && (bomb_location.z in config.station_levels))
if(bomb_location && (bomb_location.z in current_map.station_levels))
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
off_station = 1
else
@@ -360,7 +360,7 @@ var/bomb_set
if(SSticker.mode && SSticker.mode.name == "Mercenary")
var/obj/machinery/computer/shuttle_control/multi/syndicate/syndie_location = locate(/obj/machinery/computer/shuttle_control/multi/syndicate)
if(syndie_location)
SSticker.mode:syndies_didnt_escape = !(syndie_location.z in config.admin_levels)
SSticker.mode:syndies_didnt_escape = !(syndie_location.z in current_map.admin_levels)
SSticker.mode:nuke_off_station = off_station
SSticker.station_explosion_cinematic(off_station, null, GetConnectedZlevels(z))

View File

@@ -93,7 +93,7 @@
var/turf/T = get_turf(R)
if (!T)
continue
if(!(T.z in config.player_levels))
if(!(T.z in current_map.player_levels))
continue
var/tmpname = T.loc.name
if(areaindex[tmpname])

View File

@@ -253,7 +253,7 @@
sleep(15)
visible_message("\icon[src] <b>[src]</b> beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"")
sleep(30)
visible_message("\icon[src] <b>[src]</b> beeps: \"User DB truncated. Please contact your [company_name] system operator for future assistance.\"")
visible_message("\icon[src] <b>[src]</b> beeps: \"User DB truncated. Please contact your [current_map.company_name] system operator for future assistance.\"")
req_access = null
emagged = 1
return 1

View File

@@ -48,7 +48,7 @@
var/area/A = get_area()
var/text = {"<HTML><head><title>[src]</title></head><BODY>
<h2>[station_name()] blueprints</h2>
<small>Property of [company_name]. For heads of staff only. Store in high-secure storage.</small><hr>
<small>Property of [current_map.company_name]. For heads of staff only. Store in high-secure storage.</small><hr>
"}
switch (get_area_type())
if (AREA_SPACE)

View File

@@ -63,7 +63,7 @@
<br>
<br><b>DIGITAL ARREST WARRANT</b></center>
<hr>
<b>Facility:</b>__<u>[station_name]</u>__<b>Date:</b>__<u>[worlddate2text()]__</u>
<b>Facility:</b>__<u>[current_map.station_name]</u>__<b>Date:</b>__<u>[worlddate2text()]__</u>
<br>
<br><small><i>This document serves as a notice and permits the sanctioned arrest of
the denoted employee of the NanoTrasen Civilian Branch of Operation by the
@@ -99,7 +99,7 @@
<br>
<br><b>DIGITAL SEARCH WARRANT</b></center>
<hr>
<b>Facility:</b>__<u>[station_name]</u>__<b>Date:</b>__<u>[worlddate2text()]__</u></br>
<b>Facility:</b>__<u>[current_map.station_name]</u>__<b>Date:</b>__<u>[worlddate2text()]__</u></br>
<br>
<small><i>This document serves as notice and permits the sanctioned search of
the Suspect's person/belongings/premises and/or Department for any items and materials

View File

@@ -35,7 +35,7 @@ AI MODULES
return
if(SSticker.mode && SSticker.mode.name == "blob")
usr << "Law uploads have been disabled by [company_name]!"
usr << "Law uploads have been disabled by [current_map.company_name]!"
return
if (comp.current.stat == 2 || comp.current.control_disabled == 1)

View File

@@ -10,9 +10,9 @@
var/locked = 1
var/emagged = 0
/obj/item/weapon/circuitboard/security/New()
..()
network = station_networks
/obj/item/weapon/circuitboard/security/Initialize()
. = ..()
network = current_map.station_networks
/obj/item/weapon/circuitboard/security/engineering
name = T_BOARD("engineering camera monitor")

View File

@@ -13,8 +13,6 @@
/obj/item/weapon/circuitboard/holodeckcontrol/construct(var/obj/machinery/computer/HolodeckControl/HC)
if (..(HC))
HC.supported_programs = supported_programs.Copy()
HC.restricted_programs = restricted_programs.Copy()
if(linkedholodeck_area)
HC.linkedholodeck = locate(linkedholodeck_area)
if(last_to_emag)
@@ -25,7 +23,5 @@
/obj/item/weapon/circuitboard/holodeckcontrol/deconstruct(var/obj/machinery/computer/HolodeckControl/HC)
if (..(HC))
linkedholodeck_area = HC.linkedholodeck_area
supported_programs = HC.supported_programs.Copy()
restricted_programs = HC.restricted_programs.Copy()
last_to_emag = HC.last_to_emag
HC.emergencyShutdown()

View File

@@ -341,7 +341,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/loyalty/get_data()
. = {"
<b>Implant Specifications:</b><BR>
<b>Name:</b> [company_name] Employee Management Implant<BR>
<b>Name:</b> [current_map.company_name] Employee Management Implant<BR>
<b>Life:</b> Ten years.<BR>
<b>Important Notes:</b> Personnel injected with this device tend to be much more loyal to the company.<BR>
<HR>
@@ -355,11 +355,11 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/mob/living/carbon/human/H = M
var/datum/antagonist/antag_data = get_antag_data(H.mind.special_role)
if(antag_data && (antag_data.flags & ANTAG_IMPLANT_IMMUNE))
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [company_name] try to invade your mind!")
H.visible_message("[H] seems to resist the implant!", "You feel the corporate tendrils of [current_map.company_name] try to invade your mind!")
return 0
else
clear_antag_roles(H.mind, 1)
H << "<span class='notice'>You feel a surge of loyalty towards [company_name].</span>"
H << "<span class='notice'>You feel a surge of loyalty towards [current_map.company_name].</span>"
return 1
/obj/item/weapon/implant/loyalty/emp_act(severity)
@@ -435,7 +435,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/death_alarm/get_data()
. = {"
<b>Implant Specifications:</b><BR>
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
<b>Name:</b> [current_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
<b>Life:</b> Activates upon death.<BR>
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
<HR>
@@ -510,7 +510,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
/obj/item/weapon/implant/compressed/get_data()
. = {"
<b>Implant Specifications:</b><BR>
<b>Name:</b> [company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
<b>Name:</b> [current_map.company_name] \"Profit Margin\" Class Employee Lifesign Sensor<BR>
<b>Life:</b> Activates upon death.<BR>
<b>Important Notes:</b> Alerts crew to crewmember death.<BR>
<HR>

View File

@@ -54,7 +54,7 @@
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
if(istype(src.imp, /obj/item/weapon/implanter/loyalty))
M << "<span class ='notice'You feel a sudden surge of loyalty to [company_name]!</span>"
M << "<span class ='notice'You feel a sudden surge of loyalty to [current_map.company_name]!</span>"
src.imp = null
update()

View File

@@ -715,7 +715,7 @@
<br>
<h1>The Oath</h1>
<i>The Medical Oath sworn by recognised medical practitioners in the employ of [company_name]</i><br>
<i>The Medical Oath sworn by recognised medical practitioners in the employ of [current_map.company_name]</i><br>
<ol>
<li>Now, as a new doctor, I solemnly promise that I will, to the best of my ability, serve humanity-caring for the sick, promoting good health, and alleviating pain and suffering.</li>

View File

@@ -459,11 +459,11 @@
glasstype = /obj/item/stack/material/glass/reinforced
/obj/structure/window/New(Loc, constructed=0)
..()
/obj/structure/window/Initialize(mapload, constructed = 0)
. = ..()
//player-constructed windows
if (constructed)
if (!mapload && constructed)
state = 0
/obj/structure/window/reinforced/full

View File

@@ -18,7 +18,7 @@ var/can_call_ert
usr << "<span class='danger'>The round hasn't started yet!</span>"
return
if(send_emergency_team)
usr << "<span class='danger'>[boss_name] has already dispatched an emergency response team!</span>"
usr << "<span class='danger'>[current_map.boss_name] has already dispatched an emergency response team!</span>"
return
if(alert("Do you want to dispatch an Emergency Response Team?",,"Yes","No") != "Yes")
return
@@ -111,11 +111,11 @@ proc/trigger_armed_response_team(var/force = 0)
// there's only a certain chance a team will be sent
if(!prob(send_team_chance))
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[boss_name]")
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. Unfortunately, we were unable to send one at this time.", "[current_map.boss_name]")
can_call_ert = 0 // Only one call per round, ladies.
return
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[boss_name]")
command_announcement.Announce("It would appear that an emergency response team was requested for [station_name()]. We will prepare and send one as soon as possible.", "[current_map.boss_name]")
can_call_ert = 0 // Only one call per round, gentleman.
send_emergency_team = 1

View File

@@ -70,7 +70,7 @@
if(!baseturf)
// Hard-coding this for performance reasons.
baseturf = A.base_turf || base_turf_by_z["[z]"] || /turf/space
baseturf = A.base_turf || current_map.base_turf_by_z["[z]"] || /turf/space
if (A.flags & SPAWN_ROOF)
spawn_roof()

View File

@@ -26,6 +26,8 @@
/turf/proc/ChangeTurf(N, tell_universe = TRUE, force_lighting_update = FALSE)
if (!N)
return
if(!use_preloader && N == type) // Don't no-op if the map loader requires it to be reconstructed
return src
// This makes sure that turfs are not changed to space when there's a multi-z turf below
if(N == /turf/space && HasBelow(z))

View File

@@ -6,7 +6,6 @@
// Items that ask to be called every cycle.
var/global/datum/datacore/data_core = null
var/global/list/all_areas = list()
var/global/list/processing_power_items = list()
var/global/list/med_hud_users = list() // List of all entities using a medical HUD.
var/global/list/sec_hud_users = list() // List of all entities using a security HUD.
@@ -25,21 +24,10 @@ var/global/list/global_map = null
// Noises made when hit while typing.
var/list/hit_appends = list("-OOF", "-ACK", "-UGH", "-HRNK", "-HURGH", "-GLORF")
//Map levels for the crew suit sensors. Make sure you update this for different maps.
var/list/map_levels = list(3,4,6)
var/diary = null
var/diary_runtime = null
var/diary_date_string = null
var/href_logfile = null
var/station_name = "NSS Aurora"
var/station_short = "Aurora"
var/const/dock_name = "NTCC Odin"
var/const/boss_name = "Central Command"
var/const/boss_short = "Centcom"
var/const/company_name = "NanoTrasen"
var/const/company_short = "NT"
var/game_version = "Aurorastation"
var/changelog_hash = ""
var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 442)

View File

@@ -338,8 +338,11 @@ proc/admin_notice(var/message, var/rights)
if (!istype(src,/datum/admins))
usr << "Error: you are not an admin!"
return
if (!admincaster_signature)
update_newscaster_sig()
var/dat
dat = text("<HEAD><TITLE>Admin Newscaster</TITLE></HEAD><H3>Admin Newscaster Unit</H3>")
dat = "<HEAD><TITLE>Admin Newscaster</TITLE></HEAD><H3>Admin Newscaster Unit</H3>"
switch(admincaster_screen)
if(0)
@@ -363,7 +366,7 @@ proc/admin_notice(var/message, var/rights)
dat+={"<HR><B>Feed Security functions:</B><BR>
<BR><A href='?src=\ref[src];ac_menu_wanted=1'>[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue</A>
<BR><A href='?src=\ref[src];ac_menu_censor_story=1'>Censor Feed Stories</A>
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with [company_name] D-Notice (disables and locks the channel.</A>
<BR><A href='?src=\ref[src];ac_menu_censor_channel=1'>Mark Feed Channel with [current_map.company_name] D-Notice (disables and locks the channel.</A>
<BR><HR><A href='?src=\ref[src];ac_set_signature=1'>The newscaster recognises you as:<BR> <FONT COLOR='green'>[src.admincaster_signature]</FONT></A>
"}
if(1)
@@ -429,7 +432,7 @@ proc/admin_notice(var/message, var/rights)
dat+="<B>[src.admincaster_feed_channel.channel_name]: </B><FONT SIZE=1>\[created by: <FONT COLOR='maroon'>[src.admincaster_feed_channel.author]</FONT>\]</FONT><HR>"
if(src.admincaster_feed_channel.censored)
dat+={"
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>
"}
else
@@ -450,7 +453,7 @@ proc/admin_notice(var/message, var/rights)
"}
if(10)
dat+={"
<B>[company_name] Feed Censorship Tool</B><BR>
<B>[current_map.company_name] Feed Censorship Tool</B><BR>
<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>
Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>
<HR>Select Feed channel to get Stories from:<BR>
@@ -463,7 +466,7 @@ proc/admin_notice(var/message, var/rights)
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
if(11)
dat+={"
<B>[company_name] D-Notice Handler</B><HR>
<B>[current_map.company_name] D-Notice Handler</B><HR>
<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's
morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed
stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>
@@ -496,7 +499,7 @@ proc/admin_notice(var/message, var/rights)
"}
if(src.admincaster_feed_channel.censored)
dat+={"
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [company_name] D-Notice.<BR>
<FONT COLOR='red'><B>ATTENTION: </B></FONT>This channel has been deemed as threatening to the welfare of the station, and marked with a [current_map.company_name] D-Notice.<BR>
No further feed story additions are allowed while the D-Notice is in effect.<BR><BR>
"}
else

Some files were not shown because too many files have changed in this diff Show More