mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-17 01:53:35 +01:00
Merge branch 'master' into character-slot-clearing
This commit is contained in:
+33
-2
@@ -18,10 +18,10 @@ jobs:
|
||||
- tools/travis/install_build_deps.sh
|
||||
- tools/travis/install_dreamchecker.sh
|
||||
script:
|
||||
- shopt -s globstar
|
||||
- find . -name "*.php" -print0 | xargs -0 -n1 php -l
|
||||
- find . -name "*.json" -not -path "./nano/node_modules/*" -print0 | xargs -0 python3 ./tools/travis/json_verifier.py
|
||||
- find . -name "*.json" -not -path "*/node_modules/*" -print0 | xargs -0 python3 ./tools/travis/json_verifier.py
|
||||
- tools/travis/build_nanoui.sh
|
||||
- tools/travis/build_tgui.sh
|
||||
- tools/travis/check_grep.sh
|
||||
- python3 tools/travis/check_line_endings.py
|
||||
- ~/dreamchecker
|
||||
@@ -38,4 +38,35 @@ jobs:
|
||||
- tools/travis/install_byond.sh
|
||||
- source $HOME/BYOND/byond/bin/byondsetup
|
||||
script:
|
||||
- tools/travis/generate_maplist.sh
|
||||
- tools/travis/dm.sh -Mtravis_map_testing paradise.dme
|
||||
|
||||
- name: "Unit Tests + SQL Validation"
|
||||
addons:
|
||||
mariadb: '10.2'
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- python3
|
||||
- libstdc++6:i386
|
||||
- libssl-dev:i386
|
||||
- gcc-multilib
|
||||
- g++-7
|
||||
- g++-7-multilib
|
||||
- pkg-config:i386
|
||||
- zlib1g-dev:i386
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cargo
|
||||
- $HOME/.rustup
|
||||
- $HOME/BYOND
|
||||
install:
|
||||
- tools/travis/install_byond.sh
|
||||
- source $HOME/BYOND/byond/bin/byondsetup
|
||||
- python3 tools/travis/generate_sql_scripts.py
|
||||
before_script:
|
||||
- tools/travis/validate_sql.sh
|
||||
script:
|
||||
- tools/travis/dm.sh -DTRAVISBUILDING paradise.dme || travis_terminate 1
|
||||
- tools/travis/run_server.sh
|
||||
|
||||
Vendored
+2
-1
@@ -2,6 +2,7 @@
|
||||
"recommendations": [
|
||||
"gbasood.byond-dm-language-support",
|
||||
"platymuus.dm-langclient",
|
||||
"EditorConfig.EditorConfig"
|
||||
"EditorConfig.EditorConfig",
|
||||
"dbaeumer.vscode-eslint"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ ALTER TABLE feedback.connection_log CONVERT TO CHARACTER SET utf8mb4 COLLATE utf
|
||||
ALTER TABLE feedback.customuseritems CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.death CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.donators CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.erro_privacy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.privacy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.feedback CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.ipintel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.karma CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
@@ -34,7 +34,6 @@ ALTER TABLE feedback.poll_option CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb
|
||||
ALTER TABLE feedback.poll_question CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.poll_textreply CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.poll_vote CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.population CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.privacy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.vpn_whitelist CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
ALTER TABLE feedback.watch CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# This file has all the information on what versions of libraries are thrown into the code
|
||||
# For dreamchecker
|
||||
export SPACEMANDMM_TAG=suite-1.4
|
||||
# For NanoUI
|
||||
export NODE_VERSION=9
|
||||
# For NanoUI + TGUI
|
||||
export NODE_VERSION=12
|
||||
# For the scripts in tools
|
||||
export PHP_VERSION=5.6
|
||||
# Byond Major
|
||||
export BYOND_MAJOR=513
|
||||
# Byond Minor
|
||||
export BYOND_MINOR=1505
|
||||
export BYOND_MINOR=1526
|
||||
|
||||
@@ -32,9 +32,9 @@
|
||||
#define TELECOMMS "Telecomms Satellite"
|
||||
#define DERELICT "Derelicted Station"
|
||||
#define MINING "Lavaland"
|
||||
#define CONSTRUCTION "Construction Area"
|
||||
#define EMPTY_AREA "Empty Area"
|
||||
#define EMPTY_AREA_2 "Empty Area 2"
|
||||
#define EMPTY_AREA_3 "Empty Area 3"
|
||||
#define AWAY_MISSION "Away Mission"
|
||||
|
||||
// Convenience define
|
||||
|
||||
+3
-3
@@ -16,7 +16,7 @@ z7 = empty
|
||||
#include "map_files\cyberiad\cyberiad.dmm"
|
||||
#include "map_files\cyberiad\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.dmm"
|
||||
#include "map_files\cyberiad\z4.dmm"
|
||||
#include "map_files\generic\z4.dmm"
|
||||
#include "map_files\generic\Lavaland.dmm"
|
||||
#include "map_files\cyberiad\z6.dmm"
|
||||
#include "map_files\generic\z7.dmm"
|
||||
@@ -25,10 +25,10 @@ z7 = empty
|
||||
DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL, STATION_CONTACT, REACHABLE, AI_OK)),\
|
||||
DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(CONSTRUCTION, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)),\
|
||||
DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)))
|
||||
DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/cyberiad
|
||||
|
||||
|
||||
+3
-3
@@ -19,7 +19,7 @@ Lovingly ported by Purpose2 to Paradise
|
||||
#include "map_files\delta\delta.dmm"
|
||||
#include "map_files\cyberiad\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.dmm"
|
||||
#include "map_files\cyberiad\z4.dmm"
|
||||
#include "map_files\generic\z4.dmm"
|
||||
#include "map_files\generic\Lavaland.dmm"
|
||||
#include "map_files\cyberiad\z6.dmm"
|
||||
#include "map_files\generic\z7.dmm"
|
||||
@@ -30,10 +30,10 @@ Lovingly ported by Purpose2 to Paradise
|
||||
DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL, STATION_CONTACT, REACHABLE, AI_OK)),\
|
||||
DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(CONSTRUCTION, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)),\
|
||||
DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)))
|
||||
DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/delta
|
||||
|
||||
|
||||
+41
-196
@@ -24058,29 +24058,17 @@
|
||||
pressure_checks_default = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aUm" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics Air Tank";
|
||||
network = list("SS13","Engineering")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aUn" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aUo" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
@@ -25034,31 +25022,19 @@
|
||||
frequency = 1441;
|
||||
id_tag = "air_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aVT" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aVU" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aVV" = (
|
||||
/obj/structure/table/wood,
|
||||
@@ -25824,24 +25800,14 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/security/prison)
|
||||
"aXa" = (
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aXb" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics CO2 Tank";
|
||||
network = list("SS13","Engineering")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aXc" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -25860,12 +25826,7 @@
|
||||
pressure_checks_default = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aXd" = (
|
||||
/obj/structure/grille,
|
||||
@@ -26062,11 +26023,7 @@
|
||||
frequency = 1441;
|
||||
id = "air_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"aXy" = (
|
||||
/obj/structure/cable{
|
||||
@@ -26589,35 +26546,20 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aYv" = (
|
||||
/obj/machinery/portable_atmospherics/canister/carbon_dioxide{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aYw" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1441;
|
||||
id_tag = "co2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"aYx" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -27718,12 +27660,7 @@
|
||||
frequency = 1441;
|
||||
id = "co2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"bah" = (
|
||||
/obj/structure/grille,
|
||||
@@ -27932,29 +27869,17 @@
|
||||
pressure_checks_default = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"baA" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics Oxygen Tank";
|
||||
network = list("SS13","Engineering")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"baB" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"baC" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -28759,31 +28684,19 @@
|
||||
frequency = 1441;
|
||||
id_tag = "o2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"bbZ" = (
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"bca" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"bcb" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
@@ -29370,26 +29283,14 @@
|
||||
},
|
||||
/area/shuttle/pod_3)
|
||||
"bdk" = (
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bdl" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics Toxins Tank";
|
||||
network = list("SS13","Engineering")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bdm" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -29408,13 +29309,7 @@
|
||||
pressure_checks_default = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bdn" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -29502,11 +29397,7 @@
|
||||
frequency = 1441;
|
||||
id = "o2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"bdw" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
@@ -30166,38 +30057,20 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"beF" = (
|
||||
/obj/machinery/portable_atmospherics/canister/toxins{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"beG" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1441;
|
||||
id_tag = "tox_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"beH" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -30872,13 +30745,7 @@
|
||||
frequency = 1441;
|
||||
id = "tox_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bgb" = (
|
||||
/obj/structure/window/reinforced,
|
||||
@@ -30999,29 +30866,17 @@
|
||||
pressure_checks_default = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bgl" = (
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Atmospherics Nitrogen Tank";
|
||||
network = list("SS13","Engineering")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bgm" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bgn" = (
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -31594,31 +31449,19 @@
|
||||
frequency = 1441;
|
||||
id_tag = "n2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bht" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen{
|
||||
anchored = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bhu" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bhv" = (
|
||||
/obj/structure/reagent_dispensers/watertank,
|
||||
@@ -32533,11 +32376,7 @@
|
||||
frequency = 1441;
|
||||
id = "n2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"bjc" = (
|
||||
/obj/structure/closet/crate,
|
||||
@@ -92387,6 +92226,9 @@
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/effect/decal/warning_stripes/yellow/hollow,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "neutralfull"
|
||||
@@ -95058,6 +94900,9 @@
|
||||
on = 1
|
||||
},
|
||||
/obj/effect/decal/warning_stripes/yellow/hollow,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "neutralfull"
|
||||
|
||||
@@ -42197,9 +42197,6 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -43780,6 +43777,11 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/structure/transit_tube/station{
|
||||
tag = "icon-closed (EAST)";
|
||||
icon_state = "closed";
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "vault";
|
||||
dir = 5
|
||||
@@ -43993,6 +43995,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -44005,6 +44010,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -44020,6 +44028,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -45003,6 +45014,9 @@
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -53740,25 +53754,13 @@
|
||||
/turf/space,
|
||||
/area/space/nearstation)
|
||||
"bOa" = (
|
||||
/turf/simulated/floor/bluegrid{
|
||||
icon_state = "dark";
|
||||
name = "Mainframe Floor";
|
||||
nitrogen = 100;
|
||||
oxygen = 0;
|
||||
temperature = 80
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"bOb" = (
|
||||
/obj/machinery/light{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/bluegrid{
|
||||
icon_state = "dark";
|
||||
name = "Mainframe Floor";
|
||||
nitrogen = 100;
|
||||
oxygen = 0;
|
||||
temperature = 80
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"bOd" = (
|
||||
/turf/space,
|
||||
@@ -55399,9 +55401,7 @@
|
||||
/turf/simulated/floor/engine/n20,
|
||||
/area/atmos)
|
||||
"bRk" = (
|
||||
/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{
|
||||
valve_open = 1
|
||||
},
|
||||
/obj/machinery/portable_atmospherics/canister/sleeping_agent,
|
||||
/turf/simulated/floor/engine/n20,
|
||||
/area/atmos)
|
||||
"bRl" = (
|
||||
@@ -55452,9 +55452,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"bRs" = (
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -55463,9 +55461,7 @@
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"bRu" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -57907,35 +57903,17 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bVV" = (
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bVW" = (
|
||||
/obj/effect/landmark{
|
||||
name = "xeno_spawn";
|
||||
pixel_x = -1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bVY" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -58797,35 +58775,17 @@
|
||||
frequency = 1441;
|
||||
id_tag = "tox_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bXA" = (
|
||||
/obj/machinery/portable_atmospherics/canister/toxins,
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bXB" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bXH" = (
|
||||
/obj/structure/cable/yellow{
|
||||
@@ -59451,13 +59411,7 @@
|
||||
id = "tox_in";
|
||||
pixel_y = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bYP" = (
|
||||
/obj/item/storage/belt/utility,
|
||||
@@ -59976,13 +59930,7 @@
|
||||
dir = 8;
|
||||
network = list("SS13")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/atmos)
|
||||
"bZP" = (
|
||||
/turf/simulated/wall,
|
||||
@@ -60850,20 +60798,10 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"cbl" = (
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"cbm" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -61344,32 +61282,17 @@
|
||||
frequency = 1441;
|
||||
id_tag = "co2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"cci" = (
|
||||
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"ccj" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"ccl" = (
|
||||
/obj/effect/landmark{
|
||||
@@ -62198,12 +62121,7 @@
|
||||
id = "co2_in";
|
||||
pixel_y = 1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"cdA" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
@@ -62396,12 +62314,7 @@
|
||||
dir = 8;
|
||||
network = list("SS13")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 50000;
|
||||
name = "co2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/co2,
|
||||
/area/atmos)
|
||||
"cdT" = (
|
||||
/turf/simulated/wall,
|
||||
@@ -69133,22 +69046,14 @@
|
||||
frequency = 1441;
|
||||
id = "n2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cpi" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1441;
|
||||
id_tag = "n2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cpj" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -69162,11 +69067,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cpk" = (
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on{
|
||||
@@ -69174,22 +69075,14 @@
|
||||
frequency = 1441;
|
||||
id = "o2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"cpl" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1441;
|
||||
id_tag = "o2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"cpm" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -69203,11 +69096,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"cpn" = (
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on{
|
||||
@@ -69215,11 +69104,7 @@
|
||||
frequency = 1443;
|
||||
id = "air_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cpo" = (
|
||||
/obj/machinery/air_sensor{
|
||||
@@ -69227,11 +69112,7 @@
|
||||
id_tag = "air_sensor";
|
||||
output = 7
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cpp" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump/high_volume{
|
||||
@@ -69245,11 +69126,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cpq" = (
|
||||
/obj/machinery/atmospherics/binary/pump{
|
||||
@@ -70140,19 +70017,11 @@
|
||||
name = "\improper Secure Lab"
|
||||
})
|
||||
"cqK" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cqL" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cqM" = (
|
||||
/obj/machinery/door_control{
|
||||
@@ -70163,19 +70032,11 @@
|
||||
/turf/simulated/floor/engine,
|
||||
/area/toxins/explab)
|
||||
"cqN" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"cqO" = (
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"cqP" = (
|
||||
/obj/structure/cable{
|
||||
@@ -70190,19 +70051,11 @@
|
||||
name = "xeno_spawn";
|
||||
pixel_x = -1
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cqR" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cqS" = (
|
||||
/obj/machinery/camera{
|
||||
@@ -70210,11 +70063,7 @@
|
||||
dir = 8;
|
||||
network = list("SS13")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"cqT" = (
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on{
|
||||
@@ -70418,11 +70267,7 @@
|
||||
dir = 8;
|
||||
network = list("SS13")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"crm" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
@@ -70487,11 +70332,7 @@
|
||||
dir = 8;
|
||||
network = list("SS13")
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"crr" = (
|
||||
/turf/simulated/floor/plasteel{
|
||||
@@ -71112,34 +70953,18 @@
|
||||
/area/space/nearstation)
|
||||
"csq" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/atmos)
|
||||
"csr" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/atmos)
|
||||
"css" = (
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"cst" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/atmos)
|
||||
"csu" = (
|
||||
/obj/item/stack/rods{
|
||||
@@ -96545,13 +96370,7 @@
|
||||
icon_state = "tube1";
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/bluegrid{
|
||||
icon_state = "dark";
|
||||
name = "Mainframe Floor";
|
||||
nitrogen = 100;
|
||||
oxygen = 0;
|
||||
temperature = 80
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"elK" = (
|
||||
/obj/effect/spawner/airlock/w_to_e,
|
||||
@@ -96595,9 +96414,7 @@
|
||||
d2 = 2;
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"gIG" = (
|
||||
/obj/machinery/ntnet_relay,
|
||||
@@ -96621,13 +96438,7 @@
|
||||
name = "south bump";
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/simulated/floor/bluegrid{
|
||||
icon_state = "dark";
|
||||
name = "Mainframe Floor";
|
||||
nitrogen = 100;
|
||||
oxygen = 0;
|
||||
temperature = 80
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/tcommsat/server)
|
||||
"hLL" = (
|
||||
/obj/structure/lattice,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -857,21 +857,13 @@
|
||||
frequency = 1442;
|
||||
id_tag = "syndie_lavaland_n2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"bt" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"bu" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump/siphon/on{
|
||||
@@ -880,11 +872,7 @@
|
||||
id_tag = "syndie_lavaland_n2_out";
|
||||
name = "nitrogen out"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"bv" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -1243,32 +1231,20 @@
|
||||
/area/ruin/unpowered/syndicate_lava_base/main)
|
||||
"cg" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 100000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"ch" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1442;
|
||||
id_tag = "syndie_lavaland_o2_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"ci" = (
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"cj" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump/siphon/on{
|
||||
@@ -1277,19 +1253,11 @@
|
||||
id_tag = "syndie_lavaland_o2_out";
|
||||
name = "oxygen out"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"ck" = (
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"cl" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump/siphon/on{
|
||||
@@ -1298,46 +1266,22 @@
|
||||
id_tag = "syndie_lavaland_tox_out";
|
||||
name = "toxin out"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"cm" = (
|
||||
/obj/machinery/air_sensor{
|
||||
frequency = 1442;
|
||||
id_tag = "syndie_lavaland_tox_sensor"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"cn" = (
|
||||
/obj/machinery/portable_atmospherics/canister/toxins,
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"co" = (
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
carbon_dioxide = 0;
|
||||
name = "plasma floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 0;
|
||||
toxins = 70000
|
||||
},
|
||||
/turf/simulated/floor/engine/plasma,
|
||||
/area/ruin/unpowered/syndicate_lava_base/engineering)
|
||||
"cp" = (
|
||||
/obj/structure/cable{
|
||||
|
||||
@@ -7904,11 +7904,7 @@
|
||||
/area/awaymission/UO71/centralhall)
|
||||
"pu" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaymission/UO71/eng)
|
||||
"pv" = (
|
||||
/obj/machinery/air_sensor{
|
||||
@@ -7916,11 +7912,7 @@
|
||||
id_tag = "UO71_air_sensor";
|
||||
output = 7
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaymission/UO71/eng)
|
||||
"pw" = (
|
||||
/obj/structure/cable{
|
||||
@@ -8172,11 +8164,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaymission/UO71/eng)
|
||||
"pQ" = (
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on{
|
||||
@@ -8184,11 +8172,7 @@
|
||||
frequency = 1443;
|
||||
id = "UO71_air_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaymission/UO71/eng)
|
||||
"pR" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/visible/cyan,
|
||||
@@ -11446,11 +11430,7 @@
|
||||
frequency = 1441;
|
||||
id = "UO71_n2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"vF" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -11464,11 +11444,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"vG" = (
|
||||
/obj/machinery/atmospherics/unary/outlet_injector/on{
|
||||
@@ -11476,11 +11452,7 @@
|
||||
frequency = 1441;
|
||||
id = "UO71_o2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"vH" = (
|
||||
/obj/machinery/atmospherics/unary/vent_pump{
|
||||
@@ -11494,11 +11466,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"vI" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
@@ -11821,19 +11789,11 @@
|
||||
id_tag = "UO71_n2_sensor"
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"wm" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"wn" = (
|
||||
/obj/machinery/air_sensor{
|
||||
@@ -11841,19 +11801,11 @@
|
||||
id_tag = "UO71_o2_sensor"
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"wo" = (
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 100000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaymission/UO71/eng)
|
||||
"wp" = (
|
||||
/obj/effect/decal/warning_stripes/yellow/partial{
|
||||
|
||||
@@ -10200,11 +10200,7 @@
|
||||
})
|
||||
"pa" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -10215,11 +10211,7 @@
|
||||
id_tag = "UO45_air_sensor";
|
||||
output = 7
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -10612,11 +10604,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -10627,11 +10615,7 @@
|
||||
frequency = 1443;
|
||||
id = "UO45_air_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "air floor";
|
||||
nitrogen = 10580;
|
||||
oxygen = 2644
|
||||
},
|
||||
/turf/simulated/floor/engine/air,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -14650,11 +14634,7 @@
|
||||
frequency = 1441;
|
||||
id = "UO45_n2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -14671,11 +14651,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -14686,11 +14662,7 @@
|
||||
frequency = 1441;
|
||||
id = "UO45_o2_in"
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 10000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -14707,11 +14679,7 @@
|
||||
pressure_checks = 2;
|
||||
pump_direction = 0
|
||||
},
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 10000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -15040,22 +15008,14 @@
|
||||
id_tag = "UO45_n2_sensor"
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
})
|
||||
"vF" = (
|
||||
/obj/machinery/portable_atmospherics/canister/nitrogen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "n2 floor";
|
||||
nitrogen = 10000;
|
||||
oxygen = 0
|
||||
},
|
||||
/turf/simulated/floor/engine/n2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
@@ -15066,22 +15026,14 @@
|
||||
id_tag = "UO45_o2_sensor"
|
||||
},
|
||||
/obj/machinery/light/small,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 10000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
})
|
||||
"vH" = (
|
||||
/obj/machinery/portable_atmospherics/canister/oxygen,
|
||||
/turf/simulated/floor/engine{
|
||||
name = "o2 floor";
|
||||
nitrogen = 0;
|
||||
oxygen = 10000
|
||||
},
|
||||
/turf/simulated/floor/engine/o2,
|
||||
/area/awaycontent/a3{
|
||||
has_gravity = 1;
|
||||
name = "UO45 Engineering"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+1032
-1055
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -924,6 +924,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"cn" = (
|
||||
@@ -1008,6 +1009,11 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer North";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"cx" = (
|
||||
@@ -1428,11 +1434,6 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 30;
|
||||
pixel_y = 1
|
||||
@@ -1443,6 +1444,11 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer South";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"dw" = (
|
||||
@@ -1897,6 +1903,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"eu" = (
|
||||
@@ -2019,6 +2026,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"eD" = (
|
||||
@@ -2396,6 +2404,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"fv" = (
|
||||
@@ -2794,6 +2803,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"gj" = (
|
||||
@@ -3056,6 +3066,7 @@
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/baseturf_helper/lava_land/surface,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/mine/maintenance)
|
||||
"gJ" = (
|
||||
@@ -4119,6 +4130,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"BD" = (
|
||||
@@ -4266,6 +4278,10 @@
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"Ww" = (
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/eva)
|
||||
"WO" = (
|
||||
/obj/effect/spawner/window,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
@@ -20693,7 +20709,7 @@ ab
|
||||
bg
|
||||
bs
|
||||
bY
|
||||
bY
|
||||
Ww
|
||||
bU
|
||||
cp
|
||||
bf
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -17,7 +17,7 @@ z7 = empty space
|
||||
#include "map_files\MetaStation\MetaStation.v41A.II.dmm"
|
||||
#include "map_files\MetaStation\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.dmm"
|
||||
#include "map_files\MetaStation\z4.dmm"
|
||||
#include "map_files\generic\z4.dmm"
|
||||
#include "map_files\generic\Lavaland.dmm"
|
||||
#include "map_files\generic\z6.dmm"
|
||||
#include "map_files\generic\z7.dmm"
|
||||
@@ -27,11 +27,11 @@ z7 = empty space
|
||||
#define MAP_TRANSITION_CONFIG list(\
|
||||
DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL, STATION_CONTACT, REACHABLE, AI_OK)),\
|
||||
DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE, BOOSTS_SIGNAL, AI_OK)),\
|
||||
DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE)))
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA_3, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/metastation
|
||||
|
||||
|
||||
@@ -1,156 +0,0 @@
|
||||
// This is for Travis testing. DO NOT SET THIS AS THE GAME'S MAP NORMALLY!
|
||||
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
// Cyberiad
|
||||
#include "map_files/Cyberiad/cyberiad.dmm"
|
||||
#include "map_files/Cyberiad/z2.dmm"
|
||||
#include "map_files/Cyberiad/z4.dmm"
|
||||
#include "map_files/Cyberiad/z6.dmm"
|
||||
|
||||
// Debug Maps
|
||||
#include "map_files/Debug/singletile.dmm"
|
||||
#include "map_files/Debug/smoothing.dmm"
|
||||
|
||||
// Delta
|
||||
#include "map_files/Delta/delta.dmm"
|
||||
|
||||
// Generic Z Levels
|
||||
#include "map_files/Generic/Lavaland.dmm"
|
||||
#include "map_files/Generic/tcommsat-blown.dmm"
|
||||
#include "map_files/Generic/z6.dmm"
|
||||
#include "map_files/Generic/z7.dmm"
|
||||
|
||||
// MetaStation
|
||||
#include "map_files/MetaStation/MetaStation.v41A.II.dmm"
|
||||
#include "map_files/MetaStation/z2.dmm"
|
||||
#include "map_files/MetaStation/z4.dmm"
|
||||
|
||||
// Lavaland Ruins
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk2.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_blooddrunk3.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_cube.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_dead_ratvar.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_envy.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_greed.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_pride.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_puzzle.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_random_ripley.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm"
|
||||
#include "map_files/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm"
|
||||
|
||||
// Space Ruins
|
||||
#include "map_files/RandomRuins/SpaceRuins/abandonedzoo.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid1.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid2.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid3.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid4.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/asteroid5.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/deepstorage.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict1.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict2.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict3.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict4.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/derelict5.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/emptyshell.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/gasthelizards.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/intactemptyship.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/listeningpost.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/mechtransport.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/oldstation.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/onehalf.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/spacebar.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/turretedoutpost.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/way_home.dmm"
|
||||
#include "map_files/RandomRuins/SpaceRuins/wizardcrash.dmm"
|
||||
|
||||
// Gateway Missions
|
||||
#include "map_files/RandomZLevels/academy.dmm"
|
||||
#include "map_files/RandomZLevels/beach.dmm"
|
||||
#include "map_files/RandomZLevels/blackmarketpackers.dmm"
|
||||
#include "map_files/RandomZLevels/centcomAway.dmm"
|
||||
#include "map_files/RandomZLevels/evil_santa.dmm"
|
||||
#include "map_files/RandomZLevels/example.dmm"
|
||||
#include "map_files/RandomZLevels/moonoutpost19.dmm"
|
||||
#include "map_files/RandomZLevels/spacebattle.dmm"
|
||||
#include "map_files/RandomZLevels/spacehotel.dmm"
|
||||
#include "map_files/RandomZLevels/stationCollision.dmm"
|
||||
#include "map_files/RandomZLevels/terrorspiders.dmm"
|
||||
#include "map_files/RandomZLevels/undergroundoutpost45.dmm"
|
||||
#include "map_files/RandomZLevels/wildwest.dmm"
|
||||
|
||||
// Shuttles
|
||||
#include "map_files/shuttles/admin_admin.dmm"
|
||||
#include "map_files/shuttles/admin_hospital.dmm"
|
||||
#include "map_files/shuttles/cargo_base.dmm"
|
||||
#include "map_files/shuttles/emergency_bar.dmm"
|
||||
#include "map_files/shuttles/emergency_clown.dmm"
|
||||
#include "map_files/shuttles/emergency_cramped.dmm"
|
||||
#include "map_files/shuttles/emergency_cyb.dmm"
|
||||
#include "map_files/shuttles/emergency_dept.dmm"
|
||||
#include "map_files/shuttles/emergency_meta.dmm"
|
||||
#include "map_files/shuttles/emergency_mil.dmm"
|
||||
#include "map_files/shuttles/emergency_narnar.dmm"
|
||||
#include "map_files/shuttles/emergency_old.dmm"
|
||||
#include "map_files/shuttles/ferry_base.dmm"
|
||||
#include "map_files/shuttles/ferry_meat.dmm"
|
||||
|
||||
// Templates
|
||||
#include "map_files/templates/light_floor_1.dmm"
|
||||
#include "map_files/templates/light_floor_2.dmm"
|
||||
#include "map_files/templates/light_floor_3.dmm"
|
||||
#include "map_files/templates/medium_shuttle1.dmm"
|
||||
#include "map_files/templates/medium_shuttle2.dmm"
|
||||
#include "map_files/templates/medium_shuttle3.dmm"
|
||||
#include "map_files/templates/shelter_1.dmm"
|
||||
#include "map_files/templates/shelter_2.dmm"
|
||||
#include "map_files/templates/small_asteroid_1.dmm"
|
||||
#include "map_files/templates/small_shuttle_1.dmm"
|
||||
|
||||
// Spacehotel Rooms
|
||||
#include "map_files/templates/spacehotel/n_01.dmm"
|
||||
#include "map_files/templates/spacehotel/n_02.dmm"
|
||||
#include "map_files/templates/spacehotel/n_03.dmm"
|
||||
#include "map_files/templates/spacehotel/n_04.dmm"
|
||||
#include "map_files/templates/spacehotel/n_05.dmm"
|
||||
#include "map_files/templates/spacehotel/n_06.dmm"
|
||||
#include "map_files/templates/spacehotel/n_07.dmm"
|
||||
#include "map_files/templates/spacehotel/n_08.dmm"
|
||||
#include "map_files/templates/spacehotel/n_09.dmm"
|
||||
#include "map_files/templates/spacehotel/n_10.dmm"
|
||||
#include "map_files/templates/spacehotel/n_11.dmm"
|
||||
#include "map_files/templates/spacehotel/n_12.dmm"
|
||||
#include "map_files/templates/spacehotel/n_13.dmm"
|
||||
#include "map_files/templates/spacehotel/n_14.dmm"
|
||||
#include "map_files/templates/spacehotel/n_15.dmm"
|
||||
#include "map_files/templates/spacehotel/n_16.dmm"
|
||||
#include "map_files/templates/spacehotel/n_17.dmm"
|
||||
#include "map_files/templates/spacehotel/n_18.dmm"
|
||||
#include "map_files/templates/spacehotel/n_19.dmm"
|
||||
#include "map_files/templates/spacehotel/s_01.dmm"
|
||||
#include "map_files/templates/spacehotel/s_02.dmm"
|
||||
#include "map_files/templates/spacehotel/s_03.dmm"
|
||||
#include "map_files/templates/spacehotel/s_04.dmm"
|
||||
#include "map_files/templates/spacehotel/s_05.dmm"
|
||||
#include "map_files/templates/spacehotel/s_06.dmm"
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
#warn a map has already been included.
|
||||
#endif
|
||||
@@ -59,7 +59,7 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
|
||||
for(var/mob/living/L in src) //ventcrawling is serious business
|
||||
L.remove_ventcrawl()
|
||||
L.forceMove(get_turf(src))
|
||||
QDEL_NULL(pipe_image) //we have to del it, or it might keep a ref somewhere else
|
||||
QDEL_NULL(pipe_image) //we have to qdel it, or it might keep a ref somewhere else
|
||||
return ..()
|
||||
|
||||
// Icons/overlays/underlays
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -232,7 +232,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -228,7 +228,7 @@ Thus, the two variables affect pump operation are set in New():
|
||||
rate = text2num(rate)
|
||||
. = TRUE
|
||||
if(.)
|
||||
transfer_rate = Clamp(rate, 0, MAX_TRANSFER_RATE)
|
||||
transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE)
|
||||
investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", "atmos")
|
||||
|
||||
update_icon()
|
||||
|
||||
@@ -89,12 +89,12 @@
|
||||
if(ATM_P)
|
||||
filtered_out.toxins = removed.toxins
|
||||
removed.toxins = 0
|
||||
|
||||
filtered_out.agent_b = removed.agent_b
|
||||
removed.agent_b = 0
|
||||
if(ATM_N2O)
|
||||
if(removed.trace_gases.len>0)
|
||||
for(var/datum/gas/sleeping_agent/trace_gas in removed.trace_gases)
|
||||
if(istype(trace_gas))
|
||||
removed.trace_gases -= trace_gas
|
||||
filtered_out.trace_gases += trace_gas
|
||||
filtered_out.sleeping_agent = removed.sleeping_agent
|
||||
removed.sleeping_agent = 0
|
||||
else
|
||||
filtered_out = null
|
||||
|
||||
|
||||
@@ -150,11 +150,8 @@ Filter types:
|
||||
filtered_out.toxins = removed.toxins
|
||||
removed.toxins = 0
|
||||
|
||||
if(removed.trace_gases.len>0)
|
||||
for(var/datum/gas/trace_gas in removed.trace_gases)
|
||||
if(istype(trace_gas, /datum/gas/oxygen_agent_b))
|
||||
removed.trace_gases -= trace_gas
|
||||
filtered_out.trace_gases += trace_gas
|
||||
filtered_out.agent_b = removed.agent_b
|
||||
removed.agent_b = 0
|
||||
|
||||
if(1) //removing O2
|
||||
filtered_out.oxygen = removed.oxygen
|
||||
@@ -169,12 +166,8 @@ Filter types:
|
||||
removed.carbon_dioxide = 0
|
||||
|
||||
if(4)//removing N2O
|
||||
if(removed.trace_gases.len>0)
|
||||
for(var/datum/gas/trace_gas in removed.trace_gases)
|
||||
if(istype(trace_gas, /datum/gas/sleeping_agent))
|
||||
removed.trace_gases -= trace_gas
|
||||
filtered_out.trace_gases += trace_gas
|
||||
|
||||
filtered_out.sleeping_agent = removed.sleeping_agent
|
||||
removed.sleeping_agent = 0
|
||||
else
|
||||
filtered_out = null
|
||||
|
||||
@@ -244,7 +237,7 @@ Filter types:
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
if(href_list["filter"])
|
||||
filter_type = text2num(href_list["filter"])
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
|
||||
if(href_list["node1"])
|
||||
var/value = text2num(href_list["node1"])
|
||||
|
||||
@@ -92,10 +92,7 @@
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
|
||||
var/datum/gas/sleeping_agent/trace_gas = new
|
||||
trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
|
||||
|
||||
air_contents.trace_gases += trace_gas
|
||||
air_contents.sleeping_agent = (25 * ONE_ATMOSPHERE) * (air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
|
||||
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen_agent_b
|
||||
name = "Unidentified Gas Tank"
|
||||
@@ -108,6 +105,4 @@
|
||||
air_contents.volume = volume
|
||||
air_contents.temperature = T20C
|
||||
|
||||
var/datum/gas/oxygen_agent_b/trace_gas = new
|
||||
trace_gas.moles = (50 * ONE_ATMOSPHERE) * (air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
|
||||
air_contents.trace_gases += trace_gas
|
||||
air_contents.agent_b = (50 * ONE_ATMOSPHERE) * (air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature)
|
||||
|
||||
@@ -225,7 +225,7 @@
|
||||
var/datum/gas_mixture/environment = tile.return_air()
|
||||
|
||||
if(scrubbing)
|
||||
if((scrub_O2 && environment.oxygen>0.001) || (scrub_N2 && environment.nitrogen>0.001) || (scrub_CO2 && environment.carbon_dioxide>0.001) || (scrub_Toxins && environment.toxins>0.001) || (environment.trace_gases.len>0))
|
||||
if((scrub_O2 && environment.oxygen>0.001) || (scrub_N2 && environment.nitrogen>0.001) || (scrub_CO2 && environment.carbon_dioxide>0.001) || (scrub_Toxins && environment.toxins>0.001) || (environment.sleeping_agent) || (environment.agent_b))
|
||||
var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
|
||||
|
||||
//Take a gas sample
|
||||
@@ -249,14 +249,13 @@
|
||||
filtered_out.carbon_dioxide = removed.carbon_dioxide
|
||||
removed.carbon_dioxide = 0
|
||||
|
||||
if(removed.trace_gases.len>0)
|
||||
for(var/datum/gas/trace_gas in removed.trace_gases)
|
||||
if(istype(trace_gas, /datum/gas/oxygen_agent_b))
|
||||
removed.trace_gases -= trace_gas
|
||||
filtered_out.trace_gases += trace_gas
|
||||
else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O)
|
||||
removed.trace_gases -= trace_gas
|
||||
filtered_out.trace_gases += trace_gas
|
||||
if(removed.agent_b)
|
||||
filtered_out.agent_b = removed.agent_b
|
||||
removed.agent_b = 0
|
||||
|
||||
if(scrub_N2O)
|
||||
filtered_out.sleeping_agent = removed.sleeping_agent
|
||||
removed.sleeping_agent = 0
|
||||
|
||||
//Remix the resulting gases
|
||||
air_contents.merge(filtered_out)
|
||||
|
||||
@@ -127,20 +127,15 @@ GLOBAL_VAR_INIT(pipenetwarnings, 10)
|
||||
member.air_temporary = new
|
||||
member.air_temporary.volume = member.volume
|
||||
|
||||
member.air_temporary.oxygen = air.oxygen*member.volume/air.volume
|
||||
member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume
|
||||
member.air_temporary.toxins = air.toxins*member.volume/air.volume
|
||||
member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume
|
||||
member.air_temporary.oxygen = air.oxygen * member.volume / air.volume
|
||||
member.air_temporary.nitrogen = air.nitrogen * member.volume / air.volume
|
||||
member.air_temporary.toxins = air.toxins * member.volume / air.volume
|
||||
member.air_temporary.carbon_dioxide = air.carbon_dioxide * member.volume / air.volume
|
||||
member.air_temporary.sleeping_agent = air.sleeping_agent * member.volume / air.volume
|
||||
member.air_temporary.agent_b = air.agent_b * member.volume / air.volume
|
||||
|
||||
member.air_temporary.temperature = air.temperature
|
||||
|
||||
if(air.trace_gases.len)
|
||||
for(var/datum/gas/trace_gas in air.trace_gases)
|
||||
var/datum/gas/corresponding = new trace_gas.type()
|
||||
member.air_temporary.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles*member.volume/air.volume
|
||||
|
||||
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
|
||||
var/total_heat_capacity = air.heat_capacity()
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
@@ -228,7 +223,8 @@ GLOBAL_VAR_INIT(pipenetwarnings, 10)
|
||||
var/total_nitrogen = 0
|
||||
var/total_toxins = 0
|
||||
var/total_carbon_dioxide = 0
|
||||
var/list/total_trace_gases = list()
|
||||
var/total_sleeping_agent = 0
|
||||
var/total_agent_b = 0
|
||||
|
||||
for(var/datum/gas_mixture/G in GL)
|
||||
total_volume += G.volume
|
||||
@@ -239,15 +235,8 @@ GLOBAL_VAR_INIT(pipenetwarnings, 10)
|
||||
total_nitrogen += G.nitrogen
|
||||
total_toxins += G.toxins
|
||||
total_carbon_dioxide += G.carbon_dioxide
|
||||
|
||||
if(G.trace_gases.len)
|
||||
for(var/datum/gas/trace_gas in G.trace_gases)
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases
|
||||
if(!corresponding)
|
||||
corresponding = new trace_gas.type()
|
||||
total_trace_gases += corresponding
|
||||
|
||||
corresponding.moles += trace_gas.moles
|
||||
total_sleeping_agent += G.sleeping_agent
|
||||
total_agent_b += G.agent_b
|
||||
|
||||
if(total_volume > 0)
|
||||
|
||||
@@ -259,18 +248,11 @@ GLOBAL_VAR_INIT(pipenetwarnings, 10)
|
||||
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
for(var/datum/gas_mixture/G in GL)
|
||||
G.oxygen = total_oxygen*G.volume/total_volume
|
||||
G.nitrogen = total_nitrogen*G.volume/total_volume
|
||||
G.toxins = total_toxins*G.volume/total_volume
|
||||
G.carbon_dioxide = total_carbon_dioxide*G.volume/total_volume
|
||||
G.oxygen = total_oxygen * G.volume / total_volume
|
||||
G.nitrogen = total_nitrogen * G.volume / total_volume
|
||||
G.toxins = total_toxins * G.volume / total_volume
|
||||
G.carbon_dioxide = total_carbon_dioxide * G.volume / total_volume
|
||||
G.sleeping_agent = total_sleeping_agent * G.volume / total_volume
|
||||
G.agent_b = total_agent_b * G.volume / total_volume
|
||||
|
||||
G.temperature = temperature
|
||||
|
||||
if(total_trace_gases.len)
|
||||
for(var/datum/gas/trace_gas in total_trace_gases)
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in G.trace_gases
|
||||
if(!corresponding)
|
||||
corresponding = new trace_gas.type()
|
||||
G.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles*G.volume/total_volume
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
if(istype(loc, /turf/simulated))
|
||||
var/turf/simulated/T = loc
|
||||
if(T.to_be_destroyed)
|
||||
if(T.to_be_destroyed && !T.changing_turf)
|
||||
var/chance_of_deletion
|
||||
if(T.heat_capacity) //beware of division by zero
|
||||
chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
|
||||
|
||||
@@ -142,7 +142,7 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
return
|
||||
T.atmos_spawn_air(text, amount)
|
||||
|
||||
/turf/simulated/proc/atmos_spawn_air(var/flag, var/amount)
|
||||
/turf/simulated/proc/atmos_spawn_air(flag, amount)
|
||||
if(!text || !amount || !air)
|
||||
return
|
||||
|
||||
@@ -156,17 +156,21 @@ turf/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
|
||||
if(flag & LINDA_SPAWN_TOXINS)
|
||||
G.toxins += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_OXYGEN)
|
||||
G.oxygen += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_CO2)
|
||||
G.carbon_dioxide += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_NITROGEN)
|
||||
G.nitrogen += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_N2O)
|
||||
var/datum/gas/sleeping_agent/T = new
|
||||
T.moles += amount
|
||||
G.trace_gases += T
|
||||
G.sleeping_agent += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_AGENT_B)
|
||||
G.agent_b += amount
|
||||
|
||||
if(flag & LINDA_SPAWN_AIR)
|
||||
G.oxygen += MOLES_O2STANDARD * amount
|
||||
|
||||
@@ -19,20 +19,24 @@
|
||||
GM.carbon_dioxide = carbon_dioxide
|
||||
GM.nitrogen = nitrogen
|
||||
GM.toxins = toxins
|
||||
GM.sleeping_agent = sleeping_agent
|
||||
GM.agent_b = agent_b
|
||||
|
||||
GM.temperature = temperature
|
||||
|
||||
return GM
|
||||
|
||||
/turf/remove_air(amount as num)
|
||||
/turf/remove_air(amount)
|
||||
var/datum/gas_mixture/GM = new
|
||||
|
||||
var/sum = oxygen + carbon_dioxide + nitrogen + toxins
|
||||
if(sum>0)
|
||||
GM.oxygen = (oxygen/sum)*amount
|
||||
GM.carbon_dioxide = (carbon_dioxide/sum)*amount
|
||||
GM.nitrogen = (nitrogen/sum)*amount
|
||||
GM.toxins = (toxins/sum)*amount
|
||||
var/sum = oxygen + carbon_dioxide + nitrogen + toxins + sleeping_agent + agent_b
|
||||
if(sum > 0)
|
||||
GM.oxygen = (oxygen / sum) * amount
|
||||
GM.carbon_dioxide = (carbon_dioxide / sum) * amount
|
||||
GM.nitrogen = (nitrogen / sum) * amount
|
||||
GM.toxins = (toxins / sum) * amount
|
||||
GM.sleeping_agent = (sleeping_agent / sum) * amount
|
||||
GM.agent_b = (agent_b / sum) * amount
|
||||
|
||||
GM.temperature = temperature
|
||||
|
||||
@@ -53,7 +57,7 @@
|
||||
|
||||
var/temperature_archived //USED ONLY FOR SOLIDS
|
||||
|
||||
var/atmos_overlay_type = "" //current active overlay
|
||||
var/atmos_overlay_type = null //current active overlay
|
||||
|
||||
/turf/simulated/New()
|
||||
..()
|
||||
@@ -64,12 +68,14 @@
|
||||
air.carbon_dioxide = carbon_dioxide
|
||||
air.nitrogen = nitrogen
|
||||
air.toxins = toxins
|
||||
air.sleeping_agent = sleeping_agent
|
||||
air.agent_b = agent_b
|
||||
|
||||
air.temperature = temperature
|
||||
|
||||
/turf/simulated/Destroy()
|
||||
visibilityChanged()
|
||||
QDEL_NULL(active_hotspot)
|
||||
QDEL_NULL(wet_overlay)
|
||||
return ..()
|
||||
|
||||
/turf/simulated/assume_air(datum/gas_mixture/giver)
|
||||
@@ -100,7 +106,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/turf/simulated/remove_air(amount as num)
|
||||
/turf/simulated/remove_air(amount)
|
||||
if(air)
|
||||
var/datum/gas_mixture/removed = null
|
||||
|
||||
@@ -155,7 +161,7 @@
|
||||
|
||||
var/turf/enemy_tile = get_step(src, direction)
|
||||
|
||||
if(istype(enemy_tile,/turf/simulated))
|
||||
if(istype(enemy_tile, /turf/simulated))
|
||||
var/turf/simulated/enemy_simulated = enemy_tile
|
||||
|
||||
if(current_cycle > enemy_simulated.current_cycle)
|
||||
@@ -211,7 +217,13 @@
|
||||
|
||||
if(planet_atmos) //share our air with the "atmosphere" "above" the turf
|
||||
var/datum/gas_mixture/G = new
|
||||
G.copy_from_turf(src)
|
||||
G.oxygen = oxygen
|
||||
G.carbon_dioxide = carbon_dioxide
|
||||
G.nitrogen = nitrogen
|
||||
G.toxins = toxins
|
||||
G.sleeping_agent = sleeping_agent
|
||||
G.agent_b = agent_b
|
||||
G.temperature = initial(temperature) // Temperature is modified at runtime; we only care about the turf's initial temperature
|
||||
G.archive()
|
||||
if(!air.compare(G))
|
||||
if(!excited_group)
|
||||
@@ -271,8 +283,7 @@
|
||||
if(air.toxins > MOLES_PLASMA_VISIBLE)
|
||||
return "plasma"
|
||||
|
||||
var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air.trace_gases
|
||||
if(sleeping_agent && (sleeping_agent.moles > 1))
|
||||
if(air.sleeping_agent > 1)
|
||||
return "sleeping_agent"
|
||||
return null
|
||||
|
||||
@@ -340,7 +351,7 @@
|
||||
reset_cooldowns()
|
||||
|
||||
/datum/excited_group/proc/merge_groups(var/datum/excited_group/E)
|
||||
if(turf_list.len > E.turf_list.len)
|
||||
if(length(turf_list) > length(E.turf_list))
|
||||
SSair.excited_groups -= E
|
||||
for(var/turf/simulated/T in E.turf_list)
|
||||
T.excited_group = src
|
||||
@@ -358,32 +369,26 @@
|
||||
|
||||
/datum/excited_group/proc/self_breakdown()
|
||||
var/datum/gas_mixture/A = new
|
||||
var/datum/gas/sleeping_agent/S = new
|
||||
A.trace_gases += S
|
||||
for(var/turf/simulated/T in turf_list)
|
||||
A.oxygen += T.air.oxygen
|
||||
A.carbon_dioxide+= T.air.carbon_dioxide
|
||||
A.nitrogen += T.air.nitrogen
|
||||
A.toxins += T.air.toxins
|
||||
|
||||
if(T.air.trace_gases.len)
|
||||
for(var/datum/gas/N in T.air.trace_gases)
|
||||
S.moles += N.moles
|
||||
var/list/cached_turf_list = turf_list // cache for super speed
|
||||
|
||||
for(var/turf/simulated/T in turf_list)
|
||||
T.air.oxygen = A.oxygen/turf_list.len
|
||||
T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len
|
||||
T.air.nitrogen = A.nitrogen/turf_list.len
|
||||
T.air.toxins = A.toxins/turf_list.len
|
||||
for(var/turf/simulated/T in cached_turf_list)
|
||||
A.oxygen += T.air.oxygen
|
||||
A.carbon_dioxide += T.air.carbon_dioxide
|
||||
A.nitrogen += T.air.nitrogen
|
||||
A.toxins += T.air.toxins
|
||||
A.sleeping_agent += T.air.sleeping_agent
|
||||
A.agent_b += T.air.agent_b
|
||||
|
||||
if(S.moles > 0)
|
||||
if(T.air.trace_gases.len)
|
||||
for(var/datum/gas/G in T.air.trace_gases)
|
||||
G.moles = S.moles/turf_list.len
|
||||
else
|
||||
var/datum/gas/sleeping_agent/G = new
|
||||
G.moles = S.moles/turf_list.len
|
||||
T.air.trace_gases += G
|
||||
var/turflen = length(cached_turf_list)
|
||||
|
||||
for(var/turf/simulated/T in cached_turf_list)
|
||||
T.air.oxygen = A.oxygen / turflen
|
||||
T.air.carbon_dioxide = A.carbon_dioxide / turflen
|
||||
T.air.nitrogen = A.nitrogen / turflen
|
||||
T.air.toxins = A.toxins / turflen
|
||||
T.air.sleeping_agent = A.sleeping_agent / turflen
|
||||
T.air.agent_b = A.agent_b / turflen
|
||||
|
||||
T.update_visuals()
|
||||
|
||||
|
||||
@@ -145,7 +145,6 @@
|
||||
#define RESISTCOLD "resist_cold"
|
||||
#define NO_EXAMINE "no_examine"
|
||||
#define CAN_WINGDINGS "can_wingdings"
|
||||
#define NOZOMBIE "no_zombie"
|
||||
#define NO_GERMS "no_germs"
|
||||
#define NO_DECAY "no_decay"
|
||||
#define PIERCEIMMUNE "pierce_immunity"
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
// Atoms
|
||||
#define isatom(A) istype(A, /atom)
|
||||
#define ismovableatom(A) istype(A, /atom/movable)
|
||||
#define isatom(A) (isloc(A))
|
||||
|
||||
// Mobs
|
||||
#define ismegafauna(A) istype(A, /mob/living/simple_animal/hostile/megafauna)
|
||||
#define iszombie(A) (is_species(A, /datum/species/zombie))
|
||||
|
||||
//Simple animals
|
||||
#define isshade(A) (istype(A, /mob/living/simple_animal/shade))
|
||||
|
||||
+211
-32
@@ -1,59 +1,238 @@
|
||||
#define NUM_E 2.71828183
|
||||
|
||||
#define PI 3.1415
|
||||
#define SPEED_OF_LIGHT 3e8 //not exact but hey!
|
||||
#define SPEED_OF_LIGHT_SQ 9e+16
|
||||
#define INFINITY 1e31 //closer than enough
|
||||
|
||||
#define Clamp(x, y, z) ((x) <= (y) ? (y) : ((x) >= (z) ? (z) : (x)))
|
||||
#define CLAMP01(x) (Clamp((x), 0, 1))
|
||||
|
||||
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
|
||||
#define WRAP(val, min, max) ( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) )
|
||||
|
||||
#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1)
|
||||
#define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0)
|
||||
#define hypotenuse(Ax, Ay, Bx, By) (sqrt(((Ax) - (Bx))**2 + ((Ay) - (By))**2))
|
||||
#define Ceiling(x) (-round(-(x)))
|
||||
#define Tan(x) (sin(x) / cos(x))
|
||||
#define Cot(x) (1 / Tan(x))
|
||||
#define Csc(x) (1 / sin(x))
|
||||
#define Sec(x) (1 / cos(x))
|
||||
#define Floor(x) (round(x))
|
||||
#define Inverse(x) (1 / (x))
|
||||
#define IsEven(x) ((x) % 2 == 0)
|
||||
#define IsOdd(x) ((x) % 2 == 1)
|
||||
#define IsInRange(val, min, max) ((min) <= (val) && (val) <= (max))
|
||||
#define IsInteger(x) (Floor(x) == (x))
|
||||
#define IsMultiple(x, y) ((x) % (y) == 0)
|
||||
#define Lcm(a, b) (abs(a) / Gcd((a), (b)) * abs(b))
|
||||
#define Root(n, x) ((x) ** (1 / (n)))
|
||||
#define ToDegrees(radians) ((radians) * 57.2957795) // 180 / Pi
|
||||
#define ToRadians(degrees) ((degrees) * 0.0174532925) // Pi / 180
|
||||
|
||||
#define SHORT_REAL_LIMIT 16777216
|
||||
|
||||
// Real modulus that handles decimals
|
||||
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
|
||||
|
||||
|
||||
//"fancy" math for calculating time in ms from tick_usage percentage and the length of ticks
|
||||
//percent_of_tick_used * (ticklag * 100(to convert to ms)) / 100(percent ratio)
|
||||
//collapsed to percent_of_tick_used * tick_lag
|
||||
#define TICK_DELTA_TO_MS(percent_of_tick_used) ((percent_of_tick_used) * world.tick_lag)
|
||||
#define TICK_USAGE_TO_MS(starting_tickusage) (TICK_DELTA_TO_MS(TICK_USAGE_REAL - starting_tickusage))
|
||||
|
||||
#define PERCENT(val) (round((val)*100, 0.1))
|
||||
#define CLAMP01(x) (clamp(x, 0, 1))
|
||||
|
||||
//time of day but automatically adjusts to the server going into the next day within the same round.
|
||||
//for when you need a reliable time number that doesn't depend on byond time.
|
||||
#define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK))
|
||||
#define MIDNIGHT_ROLLOVER_CHECK ( GLOB.rollovercheck_last_timeofday != world.timeofday ? update_midnight_rollover() : GLOB.midnight_rollovers )
|
||||
|
||||
#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1)
|
||||
|
||||
#define SIGN(x) ( (x)!=0 ? (x) / abs(x) : 0 )
|
||||
|
||||
#define CEILING(x, y) ( -round(-(x) / (y)) * (y) )
|
||||
|
||||
// round() acts like floor(x, 1) by default but can't handle other values
|
||||
#define FLOOR(x, y) ( round((x) / (y)) * (y) )
|
||||
|
||||
// Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive
|
||||
#define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max)
|
||||
|
||||
// Real modulus that handles decimals
|
||||
#define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) )
|
||||
|
||||
// Cotangent
|
||||
#define COT(x) (1 / tan(x))
|
||||
|
||||
// Secant
|
||||
#define SEC(x) (1 / cos(x))
|
||||
|
||||
// Cosecant
|
||||
#define CSC(x) (1 / sin(x))
|
||||
|
||||
#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) )
|
||||
|
||||
#define HYPOTENUSE(Ax, Ay, Bx, By) (sqrt(((Ax) - (Bx))**2 + ((Ay) - (By))**2))
|
||||
|
||||
// Greatest Common Divisor - Euclid's algorithm
|
||||
/proc/Gcd(a, b)
|
||||
return b ? Gcd(b, (a) % (b)) : a
|
||||
|
||||
// Least Common Multiple
|
||||
#define Lcm(a, b) (abs(a) / Gcd(a, b) * abs(b))
|
||||
|
||||
#define INVERSE(x) ( 1/(x) )
|
||||
|
||||
// Used for calculating the radioactive strength falloff
|
||||
#define INVERSE_SQUARE(initial_strength,cur_distance,initial_distance) ( (initial_strength)*((initial_distance)**2/(cur_distance)**2) )
|
||||
|
||||
#define ISABOUTEQUAL(a, b, deviation) (deviation ? abs((a) - (b)) <= deviation : abs((a) - (b)) <= 0.1)
|
||||
|
||||
#define ISEVEN(x) (x % 2 == 0)
|
||||
|
||||
#define ISODD(x) (x % 2 != 0)
|
||||
|
||||
// Returns true if val is from min to max, inclusive.
|
||||
#define ISINRANGE(val, min, max) (min <= val && val <= max)
|
||||
|
||||
// Same as above, exclusive.
|
||||
#define ISINRANGE_EX(val, min, max) (min < val && val < max)
|
||||
|
||||
#define ISINTEGER(x) (round(x) == x)
|
||||
|
||||
#define ISMULTIPLE(x, y) ((x) % (y) == 0)
|
||||
|
||||
// Performs a linear interpolation between a and b.
|
||||
// Note that amount=0 returns a, amount=1 returns b, and
|
||||
// amount=0.5 returns the mean of a and b.
|
||||
#define LERP(a, b, amount) ( amount ? ((a) + ((b) - (a)) * (amount)) : a )
|
||||
|
||||
// Returns the nth root of x.
|
||||
#define ROOT(n, x) ((x) ** (1 / (n)))
|
||||
|
||||
// The quadratic formula. Returns a list with the solutions, or an empty list
|
||||
// if they are imaginary.
|
||||
/proc/SolveQuadratic(a, b, c)
|
||||
ASSERT(a)
|
||||
. = list()
|
||||
var/d = b*b - 4 * a * c
|
||||
var/bottom = 2 * a
|
||||
if(d < 0)
|
||||
return
|
||||
var/root = sqrt(d)
|
||||
. += (-b + root) / bottom
|
||||
if(!d)
|
||||
return
|
||||
. += (-b - root) / bottom
|
||||
|
||||
#define TODEGREES(radians) ((radians) * 57.2957795)
|
||||
|
||||
#define TORADIANS(degrees) ((degrees) * 0.0174532925)
|
||||
|
||||
/// Gets shift x that would be required the bitflag (1<<x)
|
||||
#define TOBITSHIFT(bit) ( log(2, bit) )
|
||||
|
||||
// Will filter out extra rotations and negative rotations
|
||||
// E.g: 540 becomes 180. -180 becomes 180.
|
||||
#define SIMPLIFY_DEGREES(degrees) (MODULUS((degrees), 360))
|
||||
|
||||
#define GET_ANGLE_OF_INCIDENCE(face, input) (MODULUS((face) - (input), 360))
|
||||
|
||||
//Finds the shortest angle that angle A has to change to get to angle B. Aka, whether to move clock or counterclockwise.
|
||||
/proc/closer_angle_difference(a, b)
|
||||
if(!isnum(a) || !isnum(b))
|
||||
return
|
||||
a = SIMPLIFY_DEGREES(a)
|
||||
b = SIMPLIFY_DEGREES(b)
|
||||
var/inc = b - a
|
||||
if(inc < 0)
|
||||
inc += 360
|
||||
var/dec = a - b
|
||||
if(dec < 0)
|
||||
dec += 360
|
||||
. = inc > dec? -dec : inc
|
||||
|
||||
//A logarithm that converts an integer to a number scaled between 0 and 1.
|
||||
//Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions.
|
||||
#define TRANSFORM_USING_VARIABLE(input, max) ( sin((90*(input))/(max))**2 )
|
||||
|
||||
//converts a uniform distributed random number into a normal distributed one
|
||||
//since this method produces two random numbers, one is saved for subsequent calls
|
||||
//(making the cost negligble for every second call)
|
||||
//This will return +/- decimals, situated about mean with standard deviation stddev
|
||||
//68% chance that the number is within 1stddev
|
||||
//95% chance that the number is within 2stddev
|
||||
//98% chance that the number is within 3stddev...etc
|
||||
#define ACCURACY 10000
|
||||
/proc/gaussian(mean, stddev)
|
||||
var/static/gaussian_next
|
||||
var/R1;var/R2;var/working
|
||||
if(gaussian_next != null)
|
||||
R1 = gaussian_next
|
||||
gaussian_next = null
|
||||
else
|
||||
do
|
||||
R1 = rand(-ACCURACY,ACCURACY)/ACCURACY
|
||||
R2 = rand(-ACCURACY,ACCURACY)/ACCURACY
|
||||
working = R1*R1 + R2*R2
|
||||
while(working >= 1 || working==0)
|
||||
working = sqrt(-2 * log(working) / working)
|
||||
R1 *= working
|
||||
gaussian_next = R2 * working
|
||||
return (mean + stddev * R1)
|
||||
#undef ACCURACY
|
||||
|
||||
/proc/get_turf_in_angle(angle, turf/starting, increments)
|
||||
var/pixel_x = 0
|
||||
var/pixel_y = 0
|
||||
for(var/i in 1 to increments)
|
||||
pixel_x += sin(angle)+16*sin(angle)*2
|
||||
pixel_y += cos(angle)+16*cos(angle)*2
|
||||
var/new_x = starting.x
|
||||
var/new_y = starting.y
|
||||
while(pixel_x > 16)
|
||||
pixel_x -= 32
|
||||
new_x++
|
||||
while(pixel_x < -16)
|
||||
pixel_x += 32
|
||||
new_x--
|
||||
while(pixel_y > 16)
|
||||
pixel_y -= 32
|
||||
new_y++
|
||||
while(pixel_y < -16)
|
||||
pixel_y += 32
|
||||
new_y--
|
||||
new_x = clamp(new_x, 0, world.maxx)
|
||||
new_y = clamp(new_y, 0, world.maxy)
|
||||
return locate(new_x, new_y, starting.z)
|
||||
|
||||
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
|
||||
/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4)
|
||||
var/list/region_x1 = list()
|
||||
var/list/region_y1 = list()
|
||||
var/list/region_x2 = list()
|
||||
var/list/region_y2 = list()
|
||||
|
||||
// These loops create loops filled with x/y values that the boundaries inhabit
|
||||
// ex: list(5, 6, 7, 8, 9)
|
||||
for(var/i in min(x1, x2) to max(x1, x2))
|
||||
region_x1["[i]"] = TRUE
|
||||
for(var/i in min(y1, y2) to max(y1, y2))
|
||||
region_y1["[i]"] = TRUE
|
||||
for(var/i in min(x3, x4) to max(x3, x4))
|
||||
region_x2["[i]"] = TRUE
|
||||
for(var/i in min(y3, y4) to max(y3, y4))
|
||||
region_y2["[i]"] = TRUE
|
||||
|
||||
return list(region_x1 & region_x2, region_y1 & region_y2)
|
||||
|
||||
#define EXP_DISTRIBUTION(desired_mean) ( -(1/(1/desired_mean)) * log(rand(1, 1000) * 0.001) )
|
||||
|
||||
#define LORENTZ_DISTRIBUTION(x, s) ( s*tan(TODEGREES(PI*(rand()-0.5))) + x )
|
||||
#define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 )
|
||||
|
||||
#define RULE_OF_THREE(a, b, x) ((a*x)/b)
|
||||
// )
|
||||
|
||||
/proc/RaiseToPower(num, power)
|
||||
if(!power)
|
||||
return 1
|
||||
return (power-- > 1 ? num * RaiseToPower(num, power) : num)
|
||||
|
||||
// oof, what a mouthful
|
||||
// Used in status_procs' "adjust" to let them modify a status effect by a given
|
||||
// amount, without inadverdently increasing it in the wrong direction
|
||||
/proc/directional_bounded_sum(orig_val, modifier, bound_lower, bound_upper)
|
||||
var/new_val = orig_val + modifier
|
||||
if(modifier > 0)
|
||||
if(new_val > bound_upper)
|
||||
new_val = max(orig_val, bound_upper)
|
||||
else if(modifier < 0)
|
||||
if(new_val < bound_lower)
|
||||
new_val = min(orig_val, bound_lower)
|
||||
return new_val
|
||||
|
||||
// sqrt, but if you give it a negative number, you get 0 instead of a runtime
|
||||
/proc/sqrtor0(num)
|
||||
if(num < 0)
|
||||
return 0
|
||||
return sqrt(num)
|
||||
|
||||
/proc/round_down(num)
|
||||
if(round(num) != num)
|
||||
return round(num--)
|
||||
else
|
||||
return num
|
||||
|
||||
@@ -431,7 +431,6 @@
|
||||
#define LINDA_SPAWN_OXYGEN 8
|
||||
#define LINDA_SPAWN_CO2 16
|
||||
#define LINDA_SPAWN_NITROGEN 32
|
||||
|
||||
#define LINDA_SPAWN_N2O 64
|
||||
|
||||
#define LINDA_SPAWN_AGENT_B 128
|
||||
#define LINDA_SPAWN_AIR 256
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
#define isslimeperson(A) (is_species(A, /datum/species/slime))
|
||||
#define isgrey(A) (is_species(A, /datum/species/grey))
|
||||
#define isdiona(A) (is_species(A, /datum/species/diona))
|
||||
#define ismachine(A) (is_species(A, /datum/species/machine))
|
||||
#define ismachineperson(A) (is_species(A, /datum/species/machine))
|
||||
#define isdrask(A) (is_species(A, /datum/species/drask))
|
||||
|
||||
#define isanimal(A) (istype((A), /mob/living/simple_animal))
|
||||
|
||||
@@ -15,3 +15,57 @@
|
||||
|
||||
#define SOUND_MINIMUM_PRESSURE 10
|
||||
#define FALLOFF_SOUNDS 0.5
|
||||
|
||||
//Ambience types
|
||||
|
||||
#define GENERIC_SOUNDS list('sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen3.ogg',\
|
||||
'sound/ambience/ambigen4.ogg', 'sound/ambience/ambigen5.ogg',\
|
||||
'sound/ambience/ambigen6.ogg', 'sound/ambience/ambigen7.ogg',\
|
||||
'sound/ambience/ambigen8.ogg', 'sound/ambience/ambigen9.ogg',\
|
||||
'sound/ambience/ambigen10.ogg', 'sound/ambience/ambigen11.ogg',\
|
||||
'sound/ambience/ambigen12.ogg', 'sound/ambience/ambigen14.ogg', 'sound/ambience/ambigen15.ogg')
|
||||
|
||||
#define HOLY_SOUNDS list('sound/ambience/ambicha1.ogg', 'sound/ambience/ambicha2.ogg', 'sound/ambience/ambicha3.ogg',\
|
||||
'sound/ambience/ambicha4.ogg', 'sound/ambience/ambiholy.ogg', 'sound/ambience/ambiholy2.ogg',\
|
||||
'sound/ambience/ambiholy3.ogg')
|
||||
|
||||
#define HIGHSEC_SOUNDS list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg')
|
||||
|
||||
#define RUINS_SOUNDS list('sound/ambience/ambimine.ogg', 'sound/ambience/ambicave.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambitech3.ogg',\
|
||||
'sound/ambience/ambimystery.ogg', 'sound/ambience/ambimaint1.ogg')
|
||||
|
||||
#define ENGINEERING_SOUNDS list('sound/ambience/ambisin1.ogg', 'sound/ambience/ambisin2.ogg', 'sound/ambience/ambisin3.ogg', 'sound/ambience/ambisin4.ogg',\
|
||||
'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg')
|
||||
|
||||
#define MINING_SOUNDS list('sound/ambience/ambimine.ogg', 'sound/ambience/ambicave.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambimaint1.ogg',\
|
||||
'sound/ambience/ambilava1.ogg', 'sound/ambience/ambilava2.ogg', 'sound/ambience/ambilava3.ogg')
|
||||
|
||||
#define MEDICAL_SOUNDS list('sound/ambience/ambinice.ogg')
|
||||
|
||||
#define SPOOKY_SOUNDS list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg','sound/ambience/ambiruin7.ogg','sound/ambience/ambiruin6.ogg',\
|
||||
'sound/ambience/ambiodd.ogg', 'sound/ambience/ambimystery.ogg')
|
||||
|
||||
#define SPACE_SOUNDS list('sound/ambience/ambispace.ogg', 'sound/ambience/ambispace2.ogg', 'sound/music/title2.ogg', 'sound/ambience/ambiatmos.ogg')
|
||||
|
||||
#define MAINTENANCE_SOUNDS list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg',\
|
||||
'sound/ambience/ambimaint5.ogg', 'sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg', 'sound/ambience/ambitech2.ogg' )
|
||||
|
||||
#define AWAY_MISSION_SOUNDS list('sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambimaint.ogg',\
|
||||
'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg', 'sound/ambience/ambiodd.ogg')
|
||||
|
||||
|
||||
|
||||
#define CREEPY_SOUNDS list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\
|
||||
'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\
|
||||
'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
|
||||
'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
|
||||
'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define UNCONSCIOUS 1
|
||||
#define DEAD 2
|
||||
|
||||
// NanoUI flags
|
||||
// NanoUI & TGUI flags
|
||||
#define STATUS_INTERACTIVE 2 // GREEN Visability
|
||||
#define STATUS_UPDATE 1 // ORANGE Visability
|
||||
#define STATUS_DISABLED 0 // RED Visability
|
||||
|
||||
@@ -143,6 +143,9 @@ GLOBAL_VAR_INIT(log_end, (world.system_type == UNIX ? ascii2text(13) : ""))
|
||||
/proc/log_runtime_summary(text)
|
||||
WRITE_LOG(GLOB.runtime_summary_log, "[text]")
|
||||
|
||||
/proc/log_tgui(text)
|
||||
WRITE_LOG(GLOB.tgui_log, "[text]")
|
||||
|
||||
/**
|
||||
* Standardized method for tracking startup times.
|
||||
*/
|
||||
|
||||
@@ -344,7 +344,7 @@
|
||||
for(var/i = 1; i <= GLOB.player_list.len; i++)
|
||||
var/mob/M = GLOB.player_list[i]
|
||||
if(M && M.client)
|
||||
if(istype(M, /mob/new_player)) // exclude people in the lobby
|
||||
if(isnewplayer(M)) // exclude people in the lobby
|
||||
continue
|
||||
else if(isobserver(M)) // Ghosts are fine if they were playing once (didn't start as observers)
|
||||
var/mob/dead/observer/O = M
|
||||
@@ -425,12 +425,6 @@
|
||||
if(pressure <= LAVALAND_EQUIPMENT_EFFECT_PRESSURE)
|
||||
. = TRUE
|
||||
|
||||
/proc/MinutesToTicks(var/minutes as num)
|
||||
return minutes * 60 * 10
|
||||
|
||||
/proc/SecondsToTicks(var/seconds)
|
||||
return seconds * 10
|
||||
|
||||
proc/pollCandidates(Question, be_special_type, antag_age_check = FALSE, poll_time = 300, ignore_respawnability = FALSE, min_hours = 0, flashwindow = TRUE, check_antaghud = TRUE)
|
||||
var/roletext = be_special_type ? get_roletext(be_special_type) : null
|
||||
var/list/mob/dead/observer/candidates = list()
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
var/adjacencies = 0
|
||||
|
||||
var/atom/movable/AM
|
||||
if(ismovableatom(A))
|
||||
if(ismovable(A))
|
||||
AM = A
|
||||
if(AM.can_be_unanchored && !AM.anchored)
|
||||
return 0
|
||||
|
||||
@@ -580,7 +580,7 @@ world
|
||||
var/B = RGB[2]
|
||||
|
||||
var/Y = (0.2126 * R) + (0.7152 * G) + (0.0722 * B)
|
||||
return Clamp((Y * 0.01), 0, 1) //Returns the brightness of a color in decimal percentage format. Can multiply light_power by this to receive 100% brightness or a lower brightness. Not a higher brightness.
|
||||
return clamp((Y * 0.01), 0, 1) //Returns the brightness of a color in decimal percentage format. Can multiply light_power by this to receive 100% brightness or a lower brightness. Not a higher brightness.
|
||||
|
||||
/proc/HueToAngle(hue)
|
||||
// normalize hsv in case anything is screwy
|
||||
@@ -899,9 +899,9 @@ The _flatIcons list is a cache for generated icon files.
|
||||
if(!value) return color
|
||||
|
||||
var/list/RGB = ReadRGB(color)
|
||||
RGB[1] = Clamp(RGB[1]+value,0,255)
|
||||
RGB[2] = Clamp(RGB[2]+value,0,255)
|
||||
RGB[3] = Clamp(RGB[3]+value,0,255)
|
||||
RGB[1] = clamp(RGB[1]+value,0,255)
|
||||
RGB[2] = clamp(RGB[2]+value,0,255)
|
||||
RGB[3] = clamp(RGB[3]+value,0,255)
|
||||
return rgb(RGB[1],RGB[2],RGB[3])
|
||||
|
||||
/proc/sort_atoms_by_layer(var/list/atoms)
|
||||
|
||||
@@ -690,6 +690,8 @@ proc/dd_sortedObjectList(list/incoming)
|
||||
// LAZYING PT 2: THE LAZENING
|
||||
#define LAZYREINITLIST(L) LAZYCLEARLIST(L); LAZYINITLIST(L);
|
||||
|
||||
// Lazying Episode 3
|
||||
#define LAZYSET(L, K, V) LAZYINITLIST(L); L[K] = V;
|
||||
|
||||
//same, but returns nothing and acts on list in place
|
||||
/proc/shuffle_inplace(list/L)
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
// Credits to Nickr5 for the useful procs I've taken from his library resource.
|
||||
|
||||
#define MATH_E 2.71828183
|
||||
#define SQRT2 1.41421356
|
||||
|
||||
/proc/Atan2(x, y)
|
||||
if(!x && !y) return 0
|
||||
var/a = arccos(x / sqrt(x*x + y*y))
|
||||
return y >= 0 ? a : -a
|
||||
|
||||
// Greatest Common Divisor - Euclid's algorithm
|
||||
/proc/Gcd(a, b)
|
||||
return b ? Gcd(b, a % b) : a
|
||||
|
||||
/proc/IsAboutEqual(a, b, deviation = 0.1)
|
||||
return abs(a - b) <= deviation
|
||||
|
||||
// Performs a linear interpolation between a and b.
|
||||
// Note that amount=0 returns a, amount=1 returns b, and
|
||||
// amount=0.5 returns the mean of a and b.
|
||||
/proc/Lerp(a, b, amount = 0.5)
|
||||
return a + (b - a) * amount
|
||||
|
||||
/proc/Mean(...)
|
||||
var/values = 0
|
||||
var/sum = 0
|
||||
for(var/val in args)
|
||||
values++
|
||||
sum += val
|
||||
return sum / values
|
||||
|
||||
// The quadratic formula. Returns a list with the solutions, or an empty list
|
||||
// if they are imaginary.
|
||||
/proc/SolveQuadratic(a, b, c)
|
||||
ASSERT(a)
|
||||
. = list()
|
||||
var/d = b*b - 4 * a * c
|
||||
var/bottom = 2 * a
|
||||
if(d < 0) return
|
||||
var/root = sqrt(d)
|
||||
. += (-b + root) / bottom
|
||||
if(!d) return
|
||||
. += (-b - root) / bottom
|
||||
|
||||
// Will filter out extra rotations and negative rotations
|
||||
// E.g: 540 becomes 180. -180 becomes 180.
|
||||
/proc/SimplifyDegrees(degrees)
|
||||
degrees = degrees % 360
|
||||
if(degrees < 0)
|
||||
degrees += 360
|
||||
return degrees
|
||||
|
||||
// min is inclusive, max is exclusive
|
||||
/proc/Wrap(val, min, max)
|
||||
var/d = max - min
|
||||
var/t = Floor((val - min) / d)
|
||||
return val - (t * d)
|
||||
|
||||
//A logarithm that converts an integer to a number scaled between 0 and 1 (can be tweaked to be higher).
|
||||
//Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions.
|
||||
/proc/TransformUsingVariable(input, inputmaximum, scaling_modifier = 0)
|
||||
|
||||
var/inputToDegrees = (input/inputmaximum)*180 //Converting from a 0 -> 100 scale to a 0 -> 180 scale. The 0 -> 180 scale corresponds to degrees
|
||||
var/size_factor = ((-cos(inputToDegrees) +1) /2) //returns a value from 0 to 1
|
||||
|
||||
return size_factor + scaling_modifier //scale mod of 0 results in a number from 0 to 1. A scale modifier of +0.5 returns 0.5 to 1.5
|
||||
//world<< "Transform multiplier of [src] is [size_factor + scaling_modifer]"
|
||||
|
||||
/proc/RaiseToPower(num, power)
|
||||
if(!power) return 1
|
||||
return (power-- > 1 ? num * RaiseToPower(num, power) : num)
|
||||
|
||||
//converts a uniform distributed random number into a normal distributed one
|
||||
//since this method produces two random numbers, one is saved for subsequent calls
|
||||
//(making the cost negligble for every second call)
|
||||
//This will return +/- decimals, situated about mean with standard deviation stddev
|
||||
//68% chance that the number is within 1stddev
|
||||
//95% chance that the number is within 2stddev
|
||||
//98% chance that the number is within 3stddev...etc
|
||||
GLOBAL_VAR(gaussian_next)
|
||||
#define ACCURACY 10000
|
||||
/proc/gaussian(mean, stddev)
|
||||
var/R1;var/R2;var/working
|
||||
if(GLOB.gaussian_next != null)
|
||||
R1 = GLOB.gaussian_next
|
||||
GLOB.gaussian_next = null
|
||||
else
|
||||
do
|
||||
R1 = rand(-ACCURACY,ACCURACY)/ACCURACY
|
||||
R2 = rand(-ACCURACY,ACCURACY)/ACCURACY
|
||||
working = R1*R1 + R2*R2
|
||||
while(working >= 1 || working==0)
|
||||
working = sqrt(-2 * log(working) / working)
|
||||
R1 *= working
|
||||
GLOB.gaussian_next = R2 * working
|
||||
return (mean + stddev * R1)
|
||||
#undef ACCURACY
|
||||
|
||||
|
||||
|
||||
// oof, what a mouthful
|
||||
// Used in status_procs' "adjust" to let them modify a status effect by a given
|
||||
// amount, without inadverdently increasing it in the wrong direction
|
||||
/proc/directional_bounded_sum(orig_val, modifier, bound_lower, bound_upper)
|
||||
var/new_val = orig_val + modifier
|
||||
if(modifier > 0)
|
||||
if(new_val > bound_upper)
|
||||
new_val = max(orig_val, bound_upper)
|
||||
else if(modifier < 0)
|
||||
if(new_val < bound_lower)
|
||||
new_val = min(orig_val, bound_lower)
|
||||
return new_val
|
||||
|
||||
// sqrt, but if you give it a negative number, you get 0 instead of a runtime
|
||||
/proc/sqrtor0(num)
|
||||
if(num < 0)
|
||||
return 0
|
||||
return sqrt(num)
|
||||
|
||||
/proc/round_down(num)
|
||||
if(round(num) != num)
|
||||
return round(num--)
|
||||
else return num
|
||||
|
||||
// Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles
|
||||
/proc/get_overlap(x1, y1, x2, y2, x3, y3, x4, y4)
|
||||
var/list/region_x1 = list()
|
||||
var/list/region_y1 = list()
|
||||
var/list/region_x2 = list()
|
||||
var/list/region_y2 = list()
|
||||
|
||||
// These loops create loops filled with x/y values that the boundaries inhabit
|
||||
// ex: list(5, 6, 7, 8, 9)
|
||||
for(var/i in min(x1, x2) to max(x1, x2))
|
||||
region_x1["[i]"] = TRUE
|
||||
for(var/i in min(y1, y2) to max(y1, y2))
|
||||
region_y1["[i]"] = TRUE
|
||||
for(var/i in min(x3, x4) to max(x3, x4))
|
||||
region_x2["[i]"] = TRUE
|
||||
for(var/i in min(y3, y4) to max(y3, y4))
|
||||
region_y2["[i]"] = TRUE
|
||||
|
||||
return list(region_x1 & region_x2, region_y1 & region_y2)
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
GLOBAL_VAR_INIT(next_unique_datum_id, 1)
|
||||
|
||||
// /client/var/tmp/unique_datum_id = null
|
||||
|
||||
/datum/proc/UID()
|
||||
if(!unique_datum_id)
|
||||
var/tag_backup = tag
|
||||
@@ -37,8 +35,6 @@ GLOBAL_VAR_INIT(next_unique_datum_id, 1)
|
||||
|
||||
var/datum/D = locate(copytext(uid, 1, splitat))
|
||||
|
||||
// We might locate a client instead of a datum, but just using : is easier
|
||||
// than actually checking and typecasting
|
||||
if(D && D:unique_datum_id == uid)
|
||||
if(D && D.unique_datum_id == uid)
|
||||
return D
|
||||
return null
|
||||
|
||||
+10
-33
@@ -329,8 +329,9 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/select_active_ai_with_fewest_borgs()
|
||||
var/mob/living/silicon/ai/selected
|
||||
var/list/active = active_ais()
|
||||
for(var/mob/living/silicon/ai/A in active)
|
||||
if(!selected || (selected.connected_robots > A.connected_robots))
|
||||
for(var/thing in active)
|
||||
var/mob/living/silicon/ai/A = thing
|
||||
if(!selected || (length(selected.connected_robots) > length(A.connected_robots)))
|
||||
selected = A
|
||||
|
||||
return selected
|
||||
@@ -434,16 +435,6 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
return "[round((powerused * 0.000001), 0.001)] MW"
|
||||
return "[round((powerused * 0.000000001), 0.0001)] GW"
|
||||
|
||||
//E = MC^2
|
||||
/proc/convert2energy(var/M)
|
||||
var/E = M*(SPEED_OF_LIGHT_SQ)
|
||||
return E
|
||||
|
||||
//M = E/C^2
|
||||
/proc/convert2mass(var/E)
|
||||
var/M = E/(SPEED_OF_LIGHT_SQ)
|
||||
return M
|
||||
|
||||
//Forces a variable to be posative
|
||||
/proc/modulus(var/M)
|
||||
if(M >= 0)
|
||||
@@ -537,21 +528,6 @@ Returns 1 if the chain up to the area contains the given typepath
|
||||
/proc/between(var/low, var/middle, var/high)
|
||||
return max(min(middle, high), low)
|
||||
|
||||
|
||||
|
||||
#if DM_VERSION > 513
|
||||
#warn 513 is definitely stable now, remove this
|
||||
#endif
|
||||
#if DM_VERSION < 513
|
||||
/proc/arctan(x)
|
||||
var/y=arcsin(x/sqrt(1+x*x))
|
||||
return y
|
||||
/proc/islist(list/list)
|
||||
if(istype(list))
|
||||
return 1
|
||||
return 0
|
||||
#endif
|
||||
|
||||
//returns random gauss number
|
||||
proc/GaussRand(var/sigma)
|
||||
var/x,y,rsq
|
||||
@@ -1517,7 +1493,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
//orbit() can run without it (swap orbiting for A)
|
||||
//but then you can never stop it and that's just silly.
|
||||
/atom/movable/var/atom/orbiting = null
|
||||
|
||||
/atom/movable/var/cached_transform = null
|
||||
//A: atom to orbit
|
||||
//radius: range to orbit at, radius of the circle formed by orbiting
|
||||
//clockwise: whether you orbit clockwise or anti clockwise
|
||||
@@ -1535,6 +1511,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
|
||||
orbiting = A
|
||||
var/matrix/initial_transform = matrix(transform)
|
||||
cached_transform = initial_transform
|
||||
var/lastloc = loc
|
||||
|
||||
//Head first!
|
||||
@@ -1552,8 +1529,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
|
||||
SpinAnimation(rotation_speed, -1, clockwise, rotation_segments)
|
||||
|
||||
//we stack the orbits up client side, so we can assign this back to normal server side without it breaking the orbit
|
||||
transform = initial_transform
|
||||
while(orbiting && orbiting == A && A.loc)
|
||||
var/targetloc = get_turf(A)
|
||||
if(!lockinorbit && loc != lastloc && loc != targetloc)
|
||||
@@ -1567,12 +1542,14 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
|
||||
if(orbiting == A) //make sure we haven't started orbiting something else.
|
||||
orbiting = null
|
||||
SpinAnimation(0,0)
|
||||
SpinAnimation(0, 0)
|
||||
transform = cached_transform
|
||||
|
||||
|
||||
|
||||
/atom/movable/proc/stop_orbit()
|
||||
orbiting = null
|
||||
transform = cached_transform
|
||||
|
||||
//Centers an image.
|
||||
//Requires:
|
||||
@@ -2032,8 +2009,8 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
tX = splittext(tX[1], ":")
|
||||
tX = tX[1]
|
||||
var/list/actual_view = getviewsize(C ? C.view : world.view)
|
||||
tX = Clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
|
||||
tY = Clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
|
||||
tX = clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx)
|
||||
tY = clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy)
|
||||
return locate(tX, tY, tZ)
|
||||
|
||||
/proc/CallAsync(datum/source, proctype, list/arguments)
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
#define DEBUG
|
||||
//#define TESTING
|
||||
|
||||
// Uncomment the following line to compile unit tests.
|
||||
// #define UNIT_TESTS
|
||||
|
||||
|
||||
#ifdef TRAVISBUILDING
|
||||
#define UNIT_TESTS
|
||||
#endif
|
||||
|
||||
#ifdef TESTING
|
||||
//#define GC_FAILURE_HARD_LOOKUP //makes paths that fail to GC call find_references before del'ing.
|
||||
//implies FIND_REF_NO_CHECK_TICK
|
||||
@@ -18,11 +26,13 @@
|
||||
#define MAX_BOOK_MESSAGE_LEN 9216
|
||||
#define MAX_NAME_LEN 50 //diona names can get loooooooong
|
||||
|
||||
// Version check, terminates compilation if someone is using a version of BYOND that's too old
|
||||
#if DM_VERSION < 510
|
||||
#error OUTDATED VERSION ERROR - \
|
||||
Due to BYOND features used in this codebase, you must update to version 510 or later to compile. \
|
||||
This may require updating to a beta release.
|
||||
//Update this whenever you need to take advantage of more recent byond features
|
||||
#define MIN_COMPILER_VERSION 513
|
||||
#define MIN_COMPILER_BUILD 1514
|
||||
#if DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD
|
||||
//Don't forget to update this part
|
||||
#error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update.
|
||||
#error You need version 513.1514 or higher
|
||||
#endif
|
||||
|
||||
// Macros that must exist before world.dm
|
||||
|
||||
@@ -18,6 +18,8 @@ GLOBAL_LIST_EMPTY(player_list) //List of all mobs **with clients attached**.
|
||||
GLOBAL_LIST_EMPTY(mob_list) //List of all mobs, including clientless
|
||||
GLOBAL_LIST_EMPTY(silicon_mob_list) //List of all silicon mobs, including clientless
|
||||
GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes
|
||||
GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain simple animals
|
||||
GLOBAL_LIST_EMPTY(human_list) //all instances of /mob/living/carbon/human and subtypes
|
||||
GLOBAL_LIST_EMPTY(spirits) //List of all the spirits, including Masks
|
||||
GLOBAL_LIST_EMPTY(alive_mob_list) //List of all alive mobs, including clientless. Excludes /mob/new_player
|
||||
GLOBAL_LIST_EMPTY(dead_mob_list) //List of all dead mobs, including clientless. Excludes /mob/new_player
|
||||
|
||||
@@ -16,7 +16,6 @@ GLOBAL_LIST_INIT(prisoncomputer_list, list())
|
||||
GLOBAL_LIST_INIT(celltimers_list, list()) // list of all cell timers
|
||||
GLOBAL_LIST_INIT(cell_logs, list())
|
||||
GLOBAL_LIST_INIT(navigation_computers, list())
|
||||
GLOBAL_LIST_INIT(zombie_infection_list, list())
|
||||
|
||||
GLOBAL_LIST_INIT(all_areas, list())
|
||||
GLOBAL_LIST_INIT(machines, list())
|
||||
|
||||
@@ -15,6 +15,8 @@ GLOBAL_VAR(world_asset_log)
|
||||
GLOBAL_PROTECT(world_asset_log)
|
||||
GLOBAL_VAR(runtime_summary_log)
|
||||
GLOBAL_PROTECT(runtime_summary_log)
|
||||
GLOBAL_VAR(tgui_log)
|
||||
GLOBAL_PROTECT(tgui_log)
|
||||
|
||||
GLOBAL_LIST_EMPTY(jobMax)
|
||||
GLOBAL_PROTECT(jobMax)
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
#define Z_SOUTH 3
|
||||
#define Z_WEST 4
|
||||
|
||||
GLOBAL_LIST_INIT(cardinal, list( NORTH, SOUTH, EAST, WEST ))
|
||||
GLOBAL_LIST_INIT(cardinal, list(NORTH, SOUTH, EAST, WEST))
|
||||
GLOBAL_LIST_INIT(alldirs, list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
|
||||
GLOBAL_LIST_INIT(alldirs2, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST, NORTH, SOUTH, EAST, WEST))
|
||||
GLOBAL_LIST_INIT(diagonals, list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST))
|
||||
|
||||
// This must exist early on or shit breaks bad
|
||||
|
||||
@@ -4,7 +4,7 @@ GLOBAL_DATUM(slmaster, /obj/effect/overlay)
|
||||
GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule
|
||||
GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
||||
|
||||
// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it.
|
||||
// Announcer intercom, because too much stuff creates an intercom for one message then qdel()s it.
|
||||
GLOBAL_DATUM_INIT(global_announcer, /obj/item/radio/intercom, create_global_announcer())
|
||||
GLOBAL_DATUM_INIT(command_announcer, /obj/item/radio/intercom/command, create_command_announcer())
|
||||
|
||||
@@ -101,3 +101,4 @@ GLOBAL_PROTECT(dbcon)
|
||||
|
||||
GLOBAL_LIST_EMPTY(ability_verbs) // Create-level abilities
|
||||
GLOBAL_LIST_INIT(pipe_colors, list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE))
|
||||
|
||||
|
||||
@@ -9,4 +9,4 @@ GLOBAL_REAL_VAR(sqlfdbkdb) = "test"
|
||||
GLOBAL_REAL_VAR(sqlfdbklogin) = "root"
|
||||
GLOBAL_REAL_VAR(sqlfdbkpass) = ""
|
||||
GLOBAL_REAL_VAR(sqlfdbktableprefix) = "erro_"
|
||||
|
||||
GLOBAL_REAL_VAR(sql_version) = 0
|
||||
|
||||
@@ -161,10 +161,13 @@
|
||||
#define ui_bot_pull "EAST-2:26,SOUTH:7"
|
||||
|
||||
//Ghosts
|
||||
#define ui_ghost_jumptomob "SOUTH:6,CENTER-2:24"
|
||||
#define ui_ghost_orbit "SOUTH:6,CENTER-1:24"
|
||||
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER:24"
|
||||
#define ui_ghost_teleport "SOUTH:6,CENTER+1:24"
|
||||
#define ui_ghost_jumptomob "SOUTH:6,CENTER-2"
|
||||
#define ui_ghost_orbit "SOUTH:6,CENTER-1"
|
||||
#define ui_ghost_reenter_corpse "SOUTH:6,CENTER"
|
||||
#define ui_ghost_teleport "SOUTH:6,CENTER+1"
|
||||
#define ui_ghost_respawn_list "SOUTH:6,CENTER+2"
|
||||
#define ui_ghost_respawn_mob "SOUTH:6+1,CENTER+2"
|
||||
#define ui_ghost_respawn_pai "SOUTH:6+2,CENTER+2"
|
||||
|
||||
//HUD styles. Please ensure HUD_VERSIONS is the same as the maximum index. Index order defines how they are cycled in F12.
|
||||
#define HUD_STYLE_STANDARD 1
|
||||
|
||||
+11
-10
@@ -19,9 +19,8 @@
|
||||
if(!category)
|
||||
return
|
||||
|
||||
var/obj/screen/alert/alert
|
||||
if(alerts[category])
|
||||
alert = alerts[category]
|
||||
var/obj/screen/alert/alert = LAZYACCESS(alerts, category)
|
||||
if(alert)
|
||||
if(alert.override_alerts)
|
||||
return 0
|
||||
if(new_master && new_master != alert.master)
|
||||
@@ -57,7 +56,7 @@
|
||||
alert.icon_state = "[initial(alert.icon_state)][severity]"
|
||||
alert.severity = severity
|
||||
|
||||
alerts[category] = alert
|
||||
LAZYSET(alerts, category, alert) // This also creates the list if it doesn't exist
|
||||
if(client && hud_used)
|
||||
hud_used.reorganize_alerts()
|
||||
alert.transform = matrix(32, 6, MATRIX_TRANSLATE)
|
||||
@@ -72,7 +71,7 @@
|
||||
|
||||
// Proc to clear an existing alert.
|
||||
/mob/proc/clear_alert(category, clear_override = FALSE)
|
||||
var/obj/screen/alert/alert = alerts[category]
|
||||
var/obj/screen/alert/alert = LAZYACCESS(alerts, category)
|
||||
if(!alert)
|
||||
return 0
|
||||
if(alert.override_alerts && !clear_override)
|
||||
@@ -585,12 +584,14 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
// Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there
|
||||
/datum/hud/proc/reorganize_alerts()
|
||||
var/list/alerts = mymob.alerts
|
||||
if(!alerts)
|
||||
return FALSE
|
||||
var/icon_pref
|
||||
if(!hud_shown)
|
||||
for(var/i = 1, i <= alerts.len, i++)
|
||||
for(var/i in 1 to alerts.len)
|
||||
mymob.client.screen -= alerts[alerts[i]]
|
||||
return 1
|
||||
for(var/i = 1, i <= alerts.len, i++)
|
||||
return TRUE
|
||||
for(var/i in 1 to alerts.len)
|
||||
var/obj/screen/alert/alert = alerts[alerts[i]]
|
||||
if(alert.icon_state == "template")
|
||||
if(!icon_pref)
|
||||
@@ -611,10 +612,10 @@ so as to remain in compliance with the most up-to-date laws."
|
||||
. = ""
|
||||
alert.screen_loc = .
|
||||
mymob.client.screen |= alert
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob
|
||||
var/list/alerts = list() // contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly
|
||||
var/list/alerts // lazy list. contains /obj/screen/alert only // On /mob so clientless mobs will throw alerts properly
|
||||
|
||||
/obj/screen/alert/Click(location, control, params)
|
||||
if(!usr || !usr.client)
|
||||
|
||||
@@ -40,6 +40,52 @@
|
||||
var/mob/dead/observer/G = usr
|
||||
G.dead_tele()
|
||||
|
||||
/obj/screen/ghost/respawn_list
|
||||
name = "Ghost spawns"
|
||||
icon = 'icons/mob/screen_midnight.dmi'
|
||||
icon_state = "template"
|
||||
|
||||
/obj/screen/ghost/respawn_list/Initialize(mapload)
|
||||
. = ..()
|
||||
update_hidden_state()
|
||||
|
||||
/obj/screen/ghost/respawn_list/Click()
|
||||
var/client/C = hud.mymob.client
|
||||
hud.inventory_shown = !hud.inventory_shown
|
||||
if(hud.inventory_shown)
|
||||
C.screen += hud.toggleable_inventory
|
||||
else
|
||||
C.screen -= hud.toggleable_inventory
|
||||
update_hidden_state()
|
||||
|
||||
/obj/screen/ghost/respawn_list/proc/update_hidden_state()
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(-90)
|
||||
|
||||
overlays.Cut()
|
||||
var/image/img = image('icons/mob/actions/actions.dmi', src, (hud && hud.inventory_shown) ? "hide" : "show")
|
||||
img.transform = M
|
||||
overlays += img
|
||||
|
||||
/obj/screen/ghost/respawn_mob
|
||||
name = "Mob spawners"
|
||||
icon_state = "mob_spawner"
|
||||
|
||||
/obj/screen/ghost/respawn_mob/Click()
|
||||
var/mob/dead/observer/G = usr
|
||||
G.open_spawners_menu()
|
||||
|
||||
/obj/screen/ghost/respawn_pai
|
||||
name = "Configure pAI"
|
||||
icon_state = "pai"
|
||||
|
||||
/obj/screen/ghost/respawn_pai/Click()
|
||||
var/mob/dead/observer/G = usr
|
||||
GLOB.paiController.recruitWindow(G)
|
||||
|
||||
/datum/hud/ghost
|
||||
inventory_shown = FALSE
|
||||
|
||||
/datum/hud/ghost/New(mob/owner)
|
||||
..()
|
||||
var/obj/screen/using
|
||||
@@ -59,6 +105,22 @@
|
||||
using = new /obj/screen/ghost/teleport()
|
||||
using.screen_loc = ui_ghost_teleport
|
||||
static_inventory += using
|
||||
static_inventory += using
|
||||
|
||||
using = new /obj/screen/ghost/respawn_list()
|
||||
using.screen_loc = ui_ghost_respawn_list
|
||||
static_inventory += using
|
||||
|
||||
using = new /obj/screen/ghost/respawn_mob()
|
||||
using.screen_loc = ui_ghost_respawn_mob
|
||||
toggleable_inventory += using
|
||||
|
||||
using = new /obj/screen/ghost/respawn_pai()
|
||||
using.screen_loc = ui_ghost_respawn_pai
|
||||
toggleable_inventory += using
|
||||
|
||||
for(var/obj/screen/S in (static_inventory + toggleable_inventory))
|
||||
S.hud = src
|
||||
|
||||
/datum/hud/ghost/show_hud()
|
||||
mymob.client.screen = list()
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
if(!view)
|
||||
view = world.view
|
||||
var/list/new_overlays = list()
|
||||
var/count = Ceiling(view/(480/world.icon_size))+1
|
||||
var/count = CEILING(view/(480/world.icon_size), 1)+1
|
||||
for(var/x in -count to count)
|
||||
for(var/y in -count to count)
|
||||
if(x == 0 && y == 0)
|
||||
|
||||
@@ -102,8 +102,8 @@
|
||||
overlays += standard_background
|
||||
|
||||
/obj/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE)
|
||||
width = Clamp(width, 0, max_dimensions)
|
||||
height = Clamp(height, 0, max_dimensions)
|
||||
width = clamp(width, 0, max_dimensions)
|
||||
height = clamp(height, 0, max_dimensions)
|
||||
src.width = width
|
||||
src.height = height
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
if(!R.robot_modules_background)
|
||||
return
|
||||
|
||||
var/display_rows = Ceiling(R.module.modules.len / 8)
|
||||
var/display_rows = CEILING(R.module.modules.len / 8, 1)
|
||||
R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7"
|
||||
R.client.screen += R.robot_modules_background
|
||||
|
||||
|
||||
@@ -75,8 +75,8 @@
|
||||
if(hitsound)
|
||||
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||
|
||||
user.lastattacked = M
|
||||
M.lastattacker = user
|
||||
M.lastattacker = user.real_name
|
||||
M.lastattackerckey = user.ckey
|
||||
|
||||
user.do_attack_animation(M)
|
||||
. = M.attacked_by(src, user, def_zone)
|
||||
@@ -135,9 +135,9 @@
|
||||
/obj/item/proc/get_clamped_volume()
|
||||
if(w_class)
|
||||
if(force)
|
||||
return Clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
|
||||
return clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100
|
||||
else
|
||||
return Clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
|
||||
return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100
|
||||
|
||||
/mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area)
|
||||
if(I.discrete)
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
|
||||
// Otherwise jump
|
||||
else
|
||||
following = null
|
||||
forceMove(get_turf(A))
|
||||
update_parallax_contents()
|
||||
|
||||
@@ -64,7 +63,7 @@
|
||||
if(!istype(user)) // Make sure user is actually an observer. Revenents also use attack_ghost, but do not have the health_scan var.
|
||||
return
|
||||
if(user.client && user.health_scan)
|
||||
if(issilicon(src) || ismachine(src))
|
||||
if(issilicon(src) || ismachineperson(src))
|
||||
robot_healthscan(user, src)
|
||||
else if(ishuman(src))
|
||||
healthscan(user, src, 1, TRUE)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi)
|
||||
var/vote_no_dead = 0 // dead people can't vote (tbi)
|
||||
// var/enable_authentication = 0 // goon authentication
|
||||
var/del_new_on_log = 1 // del's new players if they log before they spawn in
|
||||
var/del_new_on_log = 1 // qdel's new players if they log before they spawn in
|
||||
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
|
||||
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
|
||||
@@ -641,31 +641,31 @@
|
||||
config.max_maint_drones = text2num(value)
|
||||
|
||||
if("expected_round_length")
|
||||
config.expected_round_length = MinutesToTicks(text2num(value))
|
||||
config.expected_round_length = text2num(value) MINUTES
|
||||
|
||||
if("event_custom_start_mundane")
|
||||
var/values = text2numlist(value, ";")
|
||||
config.event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2]))
|
||||
config.event_first_run[EVENT_LEVEL_MUNDANE] = list("lower" = values[1] MINUTES, "upper" = values[2] MINUTES)
|
||||
|
||||
if("event_custom_start_moderate")
|
||||
var/values = text2numlist(value, ";")
|
||||
config.event_first_run[EVENT_LEVEL_MODERATE] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2]))
|
||||
config.event_first_run[EVENT_LEVEL_MODERATE] = list("lower" = values[1] MINUTES, "upper" = values[2] MINUTES)
|
||||
|
||||
if("event_custom_start_major")
|
||||
var/values = text2numlist(value, ";")
|
||||
config.event_first_run[EVENT_LEVEL_MAJOR] = list("lower" = MinutesToTicks(values[1]), "upper" = MinutesToTicks(values[2]))
|
||||
config.event_first_run[EVENT_LEVEL_MAJOR] = list("lower" = values[1] MINUTES, "upper" = values[2] MINUTES)
|
||||
|
||||
if("event_delay_lower")
|
||||
var/values = text2numlist(value, ";")
|
||||
config.event_delay_lower[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1])
|
||||
config.event_delay_lower[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2])
|
||||
config.event_delay_lower[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3])
|
||||
config.event_delay_lower[EVENT_LEVEL_MUNDANE] = values[1] MINUTES
|
||||
config.event_delay_lower[EVENT_LEVEL_MODERATE] = values[2] MINUTES
|
||||
config.event_delay_lower[EVENT_LEVEL_MAJOR] = values[3] MINUTES
|
||||
|
||||
if("event_delay_upper")
|
||||
var/values = text2numlist(value, ";")
|
||||
config.event_delay_upper[EVENT_LEVEL_MUNDANE] = MinutesToTicks(values[1])
|
||||
config.event_delay_upper[EVENT_LEVEL_MODERATE] = MinutesToTicks(values[2])
|
||||
config.event_delay_upper[EVENT_LEVEL_MAJOR] = MinutesToTicks(values[3])
|
||||
config.event_delay_upper[EVENT_LEVEL_MUNDANE] = values[1] MINUTES
|
||||
config.event_delay_upper[EVENT_LEVEL_MODERATE] = values[2] MINUTES
|
||||
config.event_delay_upper[EVENT_LEVEL_MAJOR] = values[3] MINUTES
|
||||
|
||||
if("starlight")
|
||||
config.starlight = 1
|
||||
@@ -701,7 +701,7 @@
|
||||
config.max_loadout_points = text2num(value)
|
||||
|
||||
if("round_abandon_penalty_period")
|
||||
config.round_abandon_penalty_period = MinutesToTicks(text2num(value))
|
||||
config.round_abandon_penalty_period = text2num(value) MINUTES
|
||||
|
||||
if("medal_hub_address")
|
||||
config.medal_hub_address = value
|
||||
@@ -809,7 +809,6 @@
|
||||
|
||||
/datum/configuration/proc/loadsql(filename) // -- TLE
|
||||
var/list/Lines = file2list(filename)
|
||||
var/db_version = 0
|
||||
for(var/t in Lines)
|
||||
if(!t) continue
|
||||
|
||||
@@ -848,10 +847,13 @@
|
||||
if("feedback_tableprefix")
|
||||
sqlfdbktableprefix = value
|
||||
if("db_version")
|
||||
db_version = text2num(value)
|
||||
sql_version = text2num(value)
|
||||
else
|
||||
log_config("Unknown setting in configuration: '[name]'")
|
||||
if(config.sql_enabled && db_version != SQL_VERSION)
|
||||
|
||||
// The unit tests have their own version of this check, which wont hold the server up infinitely, so this is disabled if we are running unit tests
|
||||
#ifndef UNIT_TESTS
|
||||
if(config.sql_enabled && sql_version != SQL_VERSION)
|
||||
config.sql_enabled = 0
|
||||
log_config("WARNING: DB_CONFIG DEFINITION MISMATCH!")
|
||||
spawn(60)
|
||||
@@ -859,6 +861,7 @@
|
||||
SSticker.ticker_going = FALSE
|
||||
spawn(600)
|
||||
to_chat(world, "<span class='alert'>DB_CONFIG MISMATCH, ROUND START DELAYED. <BR>Please check database version for recent upstream changes!</span>")
|
||||
#endif
|
||||
|
||||
/datum/configuration/proc/loadoverflowwhitelist(filename)
|
||||
var/list/Lines = file2list(filename)
|
||||
|
||||
@@ -49,7 +49,7 @@ SUBSYSTEM_DEF(afk)
|
||||
if(mins_afk >= config.auto_cryo_afk && A.can_get_auto_cryod)
|
||||
if(A.fast_despawn)
|
||||
toRemove += H.ckey
|
||||
warn(H, "<span class='danger'>You are have been despawned after being AFK for [mins_afk] minutes. You have been despawned instantly due to you being in a secure area.</span>")
|
||||
warn(H, "<span class='danger'>You have been despawned after being AFK for [mins_afk] minutes. You have been despawned instantly due to you being in a secure area.</span>")
|
||||
log_afk_action(H, mins_afk, T, "despawned", "AFK in a fast despawn area")
|
||||
force_cryo_human(H)
|
||||
else
|
||||
@@ -67,7 +67,7 @@ SUBSYSTEM_DEF(afk)
|
||||
|
||||
else if(afk_players[H.ckey] != AFK_ADMINS_WARNED && mins_afk >= config.auto_despawn_afk)
|
||||
log_afk_action(H, mins_afk, T, "despawned")
|
||||
warn(H, "<span class='danger'>You are have been despawned after being AFK for [mins_afk] minutes.</span>")
|
||||
warn(H, "<span class='danger'>You have been despawned after being AFK for [mins_afk] minutes.</span>")
|
||||
toRemove += H.ckey
|
||||
force_cryo_human(H)
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ SUBSYSTEM_DEF(events)
|
||||
if(E.isRunning)
|
||||
message += "and is still running."
|
||||
else
|
||||
if(E.endedAt - E.startedAt > MinutesToTicks(5)) // Only mention end time if the entire duration was more than 5 minutes
|
||||
if(E.endedAt - E.startedAt > 5 MINUTES) // Only mention end time if the entire duration was more than 5 minutes
|
||||
message += "and ended at [station_time_timestamp("hh:mm:ss", E.endedAt)]."
|
||||
else
|
||||
message += "and ran to completion."
|
||||
|
||||
@@ -7,7 +7,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
init_order = INIT_ORDER_GARBAGE
|
||||
offline_implications = "Garbage collection is no longer functional, and objects will not be qdel'd. Immediate server restart recommended."
|
||||
|
||||
var/list/collection_timeout = list(0, 2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
|
||||
var/list/collection_timeout = list(2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
|
||||
|
||||
//Stat tracking
|
||||
var/delslasttick = 0 // number of del()'s we've done this tick
|
||||
|
||||
@@ -121,3 +121,8 @@ SUBSYSTEM_DEF(input)
|
||||
for(var/i in 1 to clients.len)
|
||||
var/client/C = clients[i]
|
||||
C.keyLoop()
|
||||
|
||||
/datum/controller/subsystem/input/Recover()
|
||||
macro_sets = SSinput.macro_sets
|
||||
movement_keys = SSinput.movement_keys
|
||||
alt_movement_keys = SSinput.alt_movement_keys
|
||||
|
||||
@@ -42,7 +42,7 @@ SUBSYSTEM_DEF(machines)
|
||||
while(currentrun.len)
|
||||
var/obj/O = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if(O)
|
||||
if(O && !QDELETED(O))
|
||||
var/datum/powernet/newPN = new() // create a new powernet...
|
||||
propagate_network(O, newPN)//... and propagate it to the other side of the cable
|
||||
|
||||
|
||||
@@ -103,12 +103,12 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
return
|
||||
if(red_terminal && red_terminal.ready && blue_terminal && blue_terminal.ready)
|
||||
battle_turn = pick("Red", "Blue")
|
||||
red_terminal.audible_message("Battle starting!", null, 5)
|
||||
blue_terminal.audible_message("Battle starting!", null, 5)
|
||||
red_terminal.atom_say("Battle starting!")
|
||||
blue_terminal.atom_say("Battle starting!")
|
||||
if(battle_turn == "Red")
|
||||
red_terminal.audible_message("Red Player's Turn!", null, 5)
|
||||
red_terminal.atom_say("Red Player's Turn!")
|
||||
else if(battle_turn == "Blue")
|
||||
blue_terminal.audible_message("Blue Player's Turn!", null, 5)
|
||||
blue_terminal.atom_say("Blue Player's Turn!")
|
||||
|
||||
/datum/controller/subsystem/mob_hunt/proc/launch_attack(team, raw_damage, datum/mob_type/attack_type)
|
||||
if(!team || !raw_damage)
|
||||
@@ -135,11 +135,11 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
winner_terminal.ready = 0
|
||||
loser_terminal.ready = 0
|
||||
if(surrender) //surrender doesn't give exp, to avoid people just farming exp without actually doing a battle
|
||||
winner_terminal.audible_message("Your rival surrendered!", null, 2)
|
||||
winner_terminal.atom_say("Your rival surrendered!")
|
||||
else
|
||||
var/progress_message = winner_terminal.mob_info.gain_exp()
|
||||
winner_terminal.audible_message("[winner_terminal.team] Player wins!", null, 5)
|
||||
winner_terminal.audible_message(progress_message, null, 2)
|
||||
winner_terminal.atom_say("[winner_terminal.team] Player wins!")
|
||||
winner_terminal.atom_say(progress_message)
|
||||
|
||||
/datum/controller/subsystem/mob_hunt/proc/end_turn()
|
||||
red_terminal.updateUsrDialog()
|
||||
@@ -148,7 +148,7 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
return
|
||||
if(battle_turn == "Red")
|
||||
battle_turn = "Blue"
|
||||
blue_terminal.audible_message("Blue's turn.", null, 5)
|
||||
blue_terminal.atom_say("Blue's turn.")
|
||||
else if(battle_turn == "Blue")
|
||||
battle_turn = "Red"
|
||||
blue_terminal.audible_message("Red's turn.", null, 5)
|
||||
blue_terminal.atom_say("Red's turn.")
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
/**
|
||||
* tgui subsystem
|
||||
*
|
||||
* Contains all tgui state and subsystem code.
|
||||
**/
|
||||
|
||||
|
||||
SUBSYSTEM_DEF(tgui)
|
||||
name = "TGUI"
|
||||
wait = 9
|
||||
flags = SS_NO_INIT
|
||||
priority = FIRE_PRIORITY_NANOUI // Yes I am aware that this is TGUI and I used the nanoUI fire priority. Dont @ me.
|
||||
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
||||
offline_implications = "All TGUIs will no longer process. Shuttle call recommended."
|
||||
|
||||
var/list/currentrun = list()
|
||||
var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key.
|
||||
var/list/processing_uis = list() // A list of processing UIs, ungrouped.
|
||||
var/basehtml // The HTML base used for all UIs.
|
||||
|
||||
/datum/controller/subsystem/tgui/PreInit()
|
||||
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
|
||||
|
||||
/datum/controller/subsystem/tgui/Shutdown()
|
||||
close_all_uis()
|
||||
|
||||
/datum/controller/subsystem/tgui/stat_entry()
|
||||
..("P:[processing_uis.len]")
|
||||
|
||||
/datum/controller/subsystem/tgui/fire(resumed = 0)
|
||||
if (!resumed)
|
||||
src.currentrun = processing_uis.Copy()
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
|
||||
while(currentrun.len)
|
||||
var/datum/tgui/ui = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if(ui && ui.user && ui.src_object)
|
||||
ui.process()
|
||||
else
|
||||
processing_uis.Remove(ui)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Get a open UI given a user, src_object, and ui_key and try to update it with data.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* required src_object datum The object/datum which owns the UI.
|
||||
* required ui_key string The ui_key of the UI.
|
||||
* optional ui datum/tgui The UI to be updated, if it exists.
|
||||
* optional force_open bool If the UI should be re-opened instead of updated.
|
||||
*
|
||||
* return datum/tgui The found UI.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = FALSE)
|
||||
if(isnull(ui)) // No UI was passed, so look for one.
|
||||
ui = get_open_ui(user, src_object, ui_key)
|
||||
|
||||
if(!isnull(ui))
|
||||
var/data = src_object.tgui_data(user) // Get data from the src_object.
|
||||
if(!force_open) // UI is already open; update it.
|
||||
ui.push_data(data)
|
||||
else // Re-open it anyways.
|
||||
ui.reinitialize(null, data)
|
||||
return ui // We found the UI, return it.
|
||||
else
|
||||
return null // We couldn't find a UI.
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Get a open UI given a user, src_object, and ui_key.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* required src_object datum The object/datum which owns the UI.
|
||||
* required ui_key string The ui_key of the UI.
|
||||
*
|
||||
* return datum/tgui The found UI.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return null // No UIs open.
|
||||
else if(isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list))
|
||||
return null // No UIs open for this object.
|
||||
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object.
|
||||
if(ui.user == user) // Make sure we have the right user
|
||||
return ui
|
||||
|
||||
return null // Couldn't find a UI!
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Update all UIs attached to src_object.
|
||||
*
|
||||
* required src_object datum The object/datum which owns the UIs.
|
||||
*
|
||||
* return int The number of UIs updated.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return 0 // Couldn't find any UIs for this object.
|
||||
|
||||
var/update_count = 0
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.process(force = 1) // Update the UI.
|
||||
update_count++ // Count each UI we update.
|
||||
return update_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close all UIs attached to src_object.
|
||||
*
|
||||
* required src_object datum The object/datum which owns the UIs.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return 0 // Couldn't find any UIs for this object.
|
||||
|
||||
var/close_count = 0
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close *ALL* UIs
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_all_uis()
|
||||
var/close_count = 0
|
||||
for(var/src_object_key in open_uis)
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Update all UIs belonging to a user.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* optional src_object datum If provided, only update UIs belonging this src_object.
|
||||
* optional ui_key string If provided, only update UIs with this UI key.
|
||||
*
|
||||
* return int The number of UIs updated.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null)
|
||||
if(isnull(user.open_tguis) || !istype(user.open_tguis, /list) || open_uis.len == 0)
|
||||
return 0 // Couldn't find any UIs for this user.
|
||||
|
||||
var/update_count = 0
|
||||
for(var/datum/tgui/ui in user.open_tguis)
|
||||
if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key))
|
||||
ui.process(force = 1) // Update the UI.
|
||||
update_count++ // Count each UI we upadte.
|
||||
return update_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close all UIs belonging to a user.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* optional src_object datum If provided, only close UIs belonging this src_object.
|
||||
* optional ui_key string If provided, only close UIs with this UI key.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null)
|
||||
if(isnull(user.open_tguis) || !istype(user.open_tguis, /list) || open_uis.len == 0)
|
||||
return 0 // Couldn't find any UIs for this user.
|
||||
|
||||
var/close_count = 0
|
||||
for(var/datum/tgui/ui in user.open_tguis)
|
||||
if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key))
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Add a UI to the list of open UIs.
|
||||
*
|
||||
* required ui datum/tgui The UI to be added.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui)
|
||||
var/src_object_key = "[ui.src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object.
|
||||
else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
||||
open_uis[src_object_key][ui.ui_key] = list() // Make a list for the ui_key.
|
||||
|
||||
// Append the UI to all the lists.
|
||||
ui.user.open_tguis |= ui
|
||||
var/list/uis = open_uis[src_object_key][ui.ui_key]
|
||||
uis |= ui
|
||||
processing_uis |= ui
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Remove a UI from the list of open UIs.
|
||||
*
|
||||
* required ui datum/tgui The UI to be removed.
|
||||
*
|
||||
* return bool If the UI was removed or not.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui)
|
||||
var/src_object_key = "[ui.src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return FALSE // It wasn't open.
|
||||
else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
||||
return FALSE // It wasn't open.
|
||||
|
||||
processing_uis.Remove(ui) // Remove it from the list of processing UIs.
|
||||
if(ui.user) // If the user exists, remove it from them too.
|
||||
ui.user.open_tguis.Remove(ui)
|
||||
var/Ukey = ui.ui_key
|
||||
var/list/uis = open_uis[src_object_key][Ukey] // Remove it from the list of open UIs.
|
||||
uis.Remove(ui)
|
||||
if(!uis.len)
|
||||
var/list/uiobj = open_uis[src_object_key]
|
||||
uiobj.Remove(Ukey)
|
||||
if(!uiobj.len)
|
||||
open_uis.Remove(src_object_key)
|
||||
|
||||
return TRUE // Let the caller know we did it.
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Handle client logout, by closing all their UIs.
|
||||
*
|
||||
* required user mob The mob which logged out.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_logout(mob/user)
|
||||
return close_user_uis(user)
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Handle clients switching mobs, by transferring their UIs.
|
||||
*
|
||||
* required user source The client's original mob.
|
||||
* required user target The client's new mob.
|
||||
*
|
||||
* return bool If the UIs were transferred.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target)
|
||||
if(!source || isnull(source.open_tguis) || !istype(source.open_tguis, /list) || open_uis.len == 0)
|
||||
return FALSE // The old mob had no open UIs.
|
||||
|
||||
if(isnull(target.open_tguis) || !istype(target.open_tguis, /list))
|
||||
target.open_tguis = list() // Create a list for the new mob if needed.
|
||||
|
||||
for(var/datum/tgui/ui in source.open_tguis)
|
||||
ui.user = target // Inform the UIs of their new owner.
|
||||
target.open_tguis.Add(ui) // Transfer all the UIs.
|
||||
|
||||
source.open_tguis.Cut() // Clear the old list.
|
||||
return TRUE // Let the caller know we did it.
|
||||
@@ -279,7 +279,9 @@ SUBSYSTEM_DEF(ticker)
|
||||
for(var/mob/new_player/N in GLOB.mob_list)
|
||||
if(N.client)
|
||||
N.new_player_panel_proc()
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
RunUnitTests()
|
||||
#endif
|
||||
return 1
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null)
|
||||
@@ -405,7 +407,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
EquipCustomItems(player)
|
||||
if(captainless)
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(!istype(M,/mob/new_player))
|
||||
if(!isnewplayer(M))
|
||||
to_chat(M, "Captainship not forced on anyone.")
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
|
||||
|
||||
@@ -20,16 +20,16 @@ SUBSYSTEM_DEF(tickets)
|
||||
init_order = INIT_ORDER_TICKETS
|
||||
wait = 300
|
||||
priority = FIRE_PRIORITY_TICKETS
|
||||
|
||||
|
||||
flags = SS_BACKGROUND
|
||||
|
||||
|
||||
var/list/allTickets = list() //make it here because someone might ahelp before the system has initialized
|
||||
|
||||
var/ticketCounter = 1
|
||||
|
||||
/datum/controller/subsystem/tickets/Initialize()
|
||||
close_messages = list("<font color='red' size='4'><b>- [ticket_name] Rejected! -</b></font>",
|
||||
"<span class='boldmessage'>Please try to be calm, clear, and descriptive in admin helps, do not assume the staff member has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.</span>",
|
||||
"<span class='boldmessage'>Please try to be calm, clear, and descriptive in admin helps, do not assume the staff member has seen any related events, and clearly state the names of anybody you are reporting. If you asked a question, please ensure it was clear what you were asking.</span>",
|
||||
"<span class='[span_class]'>Your [ticket_name] has now been closed.</span>")
|
||||
return ..()
|
||||
|
||||
@@ -112,7 +112,7 @@ SUBSYSTEM_DEF(tickets)
|
||||
message_staff("<span class='[span_class]'>[usr.client] / ([usr]) resolved [ticket_name] number [N]</span>")
|
||||
to_chat_safe(returnClient(N), "<span class='[span_class]'>Your [ticket_name] has now been resolved.</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
/datum/controller/subsystem/tickets/proc/autoRespond(N)
|
||||
if(!check_rights(R_ADMIN|R_MOD))
|
||||
@@ -124,19 +124,19 @@ SUBSYSTEM_DEF(tickets)
|
||||
if(alert(usr, "[T.ticketState == TICKET_OPEN ? "Another admin appears to already be handling this." : "This ticket is already marked as closed or resolved"] Are you sure you want to continue?", "Confirmation", "Yes", "No") != "Yes")
|
||||
return
|
||||
T.assignStaff(C)
|
||||
|
||||
var/response_phrases = list("Thanks" = "Thanks, have a Paradise day!",
|
||||
|
||||
var/response_phrases = list("Thanks" = "Thanks, have a Paradise day!",
|
||||
"Handling It" = "The issue is being looked into, thanks.",
|
||||
"Already Resolved" = "The problem has been resolved already.",
|
||||
"Mentorhelp" = "Please redirect your question to Mentorhelp, as they are better experienced with these types of questions.",
|
||||
"Happens Again" = "Thanks, let us know if it continues to happen.",
|
||||
"Clear Cache" = "To fix a blank screen, please leave the game and clear your Byond Cache. To clear your Byond Cache, there is a Settings icon in the top right of the launcher. After you click that, go into the Games tab and hit the Clear Cache button. If the issue persists a few minutes after rejoining and doing this, please adminhelp again and state you cleared your cache." ,
|
||||
"Clear Cache" = "To fix a blank screen, go to the 'Special Verbs' tab and press 'Reload UI Resources'. If that fails, clear your BYOND cache (instructions provided with 'Reload UI Resources'). If that still fails, please adminhelp again, stating you have already done the following." ,
|
||||
"IC Issue" = "This is an In Character (IC) issue and will not be handled by admins. You could speak to Security, Internal Affairs, a Departmental Head, Nanotrasen Representetive, or any other relevant authority currently on station.",
|
||||
"Reject" = "Reject",
|
||||
"Man Up" = "Man Up",
|
||||
"Appeal on the Forums" = "Appealing a ban must occur on the forums. Privately messaging, or adminhelping about your ban will not resolve it. To appeal your ban, please head to <a href='[config.banappeals]'>[config.banappeals]</a>"
|
||||
)
|
||||
|
||||
|
||||
var/sorted_responses = list()
|
||||
for(var/key in response_phrases) //build a new list based on the short descriptive keys of the master list so we can send this as the input instead of the full paragraphs to the admin choosing which autoresponse
|
||||
sorted_responses += key
|
||||
@@ -351,7 +351,7 @@ UI STUFF
|
||||
dat += "<tr><td>[T.content[i]]</td></tr>"
|
||||
|
||||
dat += "</table><br /><br />"
|
||||
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a>[check_rights(R_ADMIN|R_MOD, 0) ? "<a href='?src=[UID()];autorespond=[T.ticketNum]'>Auto</a>": ""]<a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><br /><br />"
|
||||
dat += "<a href='?src=[UID()];detailreopen=[T.ticketNum]'>Re-Open</a>[check_rights(R_ADMIN|R_MOD, 0) ? "<a href='?src=[UID()];autorespond=[T.ticketNum]'>Auto</a>": ""]<a href='?src=[UID()];detailresolve=[T.ticketNum]'>Resolve</a><br /><br />"
|
||||
|
||||
if(!T.staffAssigned)
|
||||
dat += "No staff member assigned to this [ticket_name] - <a href='?src=[UID()];assignstaff=[T.ticketNum]'>Take Ticket</a><br />"
|
||||
@@ -447,7 +447,7 @@ UI STUFF
|
||||
return
|
||||
if(closeTicket(indexNum))
|
||||
showDetailUI(usr, indexNum)
|
||||
|
||||
|
||||
|
||||
if(href_list["detailreopen"])
|
||||
var/indexNum = text2num(href_list["detailreopen"])
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
#define ARMORID "armor-[melee]-[bullet]-[laser]-[energy]-[bomb]-[bio]-[rad]-[fire]-[acid]-[magic]"
|
||||
|
||||
/proc/getArmor(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0, magic = 0)
|
||||
. = locate(ARMORID)
|
||||
if (!.)
|
||||
. = new /datum/armor(melee, bullet, laser, energy, bomb, bio, rad, fire, acid, magic)
|
||||
|
||||
/datum/armor
|
||||
var/melee
|
||||
var/bullet
|
||||
var/laser
|
||||
var/energy
|
||||
var/bomb
|
||||
var/bio
|
||||
var/rad
|
||||
var/fire
|
||||
var/acid
|
||||
var/magic
|
||||
|
||||
/datum/armor/New(melee_value = 0, bullet_value = 0, laser_value = 0, energy_value = 0, bomb_value = 0, bio_value = 0, rad_value = 0, fire_value = 0, acid_value = 0, magic_value = 0)
|
||||
melee = melee_value
|
||||
bullet = bullet_value
|
||||
laser = laser_value
|
||||
energy = energy_value
|
||||
bomb = bomb_value
|
||||
bio = bio_value
|
||||
rad = rad_value
|
||||
fire = fire_value
|
||||
acid = acid_value
|
||||
magic = magic_value
|
||||
tag = ARMORID
|
||||
|
||||
/datum/armor/proc/modifyRating(melee_value = 0, bullet_value = 0, laser_value = 0, energy_value = 0, bomb_value = 0, bio_value = 0, rad_value = 0, fire_value = 0, acid_value = 0, magic_value = 0)
|
||||
return getArmor(melee + melee_value, bullet + bullet_value, laser + laser_value, energy + energy_value, bomb + bomb_value, bio + bio_value, rad + rad_value, fire + fire_value, acid + acid_value, magic + magic_value)
|
||||
|
||||
/datum/armor/proc/modifyAllRatings(modifier = 0)
|
||||
return getArmor(melee + modifier, bullet + modifier, laser + modifier, energy + modifier, bomb + modifier, bio + modifier, rad + modifier, fire + modifier, acid + modifier, magic + modifier)
|
||||
|
||||
/datum/armor/proc/setRating(melee_value, bullet_value, laser_value, energy_value, bomb_value, bio_value, rad_value, fire_value, acid_value, magic_value)
|
||||
return getArmor((isnull(melee_value) ? melee : melee_value),\
|
||||
(isnull(bullet_value) ? bullet : bullet_value),\
|
||||
(isnull(laser_value) ? laser : laser_value),\
|
||||
(isnull(energy_value) ? energy : energy_value),\
|
||||
(isnull(bomb_value) ? bomb : bomb_value),\
|
||||
(isnull(bio_value) ? bio : bio_value),\
|
||||
(isnull(rad_value) ? rad : rad_value),\
|
||||
(isnull(fire_value) ? fire : fire_value),\
|
||||
(isnull(acid_value) ? acid : acid_value),\
|
||||
(isnull(magic_value) ? magic : magic_value))
|
||||
|
||||
/datum/armor/proc/getRating(rating)
|
||||
return vars[rating]
|
||||
|
||||
/datum/armor/proc/getList()
|
||||
return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic)
|
||||
|
||||
/datum/armor/proc/attachArmor(datum/armor/AA)
|
||||
return getArmor(melee + AA.melee, bullet + AA.bullet, laser + AA.laser, energy + AA.energy, bomb + AA.bomb, bio + AA.bio, rad + AA.rad, fire + AA.fire, acid + AA.acid, magic + AA.magic)
|
||||
|
||||
/datum/armor/proc/detachArmor(datum/armor/AA)
|
||||
return getArmor(melee - AA.melee, bullet - AA.bullet, laser - AA.laser, energy - AA.energy, bomb - AA.bomb, bio - AA.bio, rad - AA.rad, fire - AA.fire, acid - AA.acid, magic - AA.magic)
|
||||
|
||||
/datum/armor/vv_edit_var(var_name, var_value)
|
||||
if (var_name == NAMEOF(src, tag))
|
||||
return FALSE
|
||||
. = ..()
|
||||
tag = ARMORID // update tag in case armor values were edited
|
||||
|
||||
#undef ARMORID
|
||||
+2
-2
@@ -99,11 +99,11 @@
|
||||
//Position the effect so the beam is one continous line
|
||||
var/a
|
||||
if(abs(Pixel_x)>32)
|
||||
a = Pixel_x > 0 ? round(Pixel_x/32) : Ceiling(Pixel_x/32)
|
||||
a = Pixel_x > 0 ? round(Pixel_x/32) : CEILING(Pixel_x/32, 1)
|
||||
X.x += a
|
||||
Pixel_x %= 32
|
||||
if(abs(Pixel_y)>32)
|
||||
a = Pixel_y > 0 ? round(Pixel_y/32) : Ceiling(Pixel_y/32)
|
||||
a = Pixel_y > 0 ? round(Pixel_y/32) : CEILING(Pixel_y/32, 1)
|
||||
X.y += a
|
||||
Pixel_y %= 32
|
||||
|
||||
|
||||
Vendored
+26
-36
@@ -4,7 +4,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
cache_data = list()
|
||||
..()
|
||||
|
||||
/datum/repository/crew/proc/health_data(var/turf/T)
|
||||
/datum/repository/crew/proc/health_data(turf/T)
|
||||
var/list/crewmembers = list()
|
||||
if(!T)
|
||||
return crewmembers
|
||||
@@ -18,50 +18,40 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
if(world.time < cache_entry.timestamp)
|
||||
return cache_entry.data
|
||||
|
||||
var/tracked = scan()
|
||||
for(var/obj/item/clothing/under/C in tracked)
|
||||
for(var/thing in GLOB.human_list)
|
||||
var/mob/living/carbon/human/H = thing
|
||||
var/obj/item/clothing/under/C = H.w_uniform
|
||||
if(!C || C.sensor_mode == SUIT_SENSOR_OFF || !C.has_sensor)
|
||||
continue
|
||||
var/turf/pos = get_turf(C)
|
||||
if((C) && (C.has_sensor) && (pos) && (T && pos.z == T.z) && (C.sensor_mode != SUIT_SENSOR_OFF))
|
||||
if(istype(C.loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = C.loc
|
||||
if(H.w_uniform != C)
|
||||
continue
|
||||
if(!T || pos.z != T.z)
|
||||
continue
|
||||
var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]")
|
||||
|
||||
var/list/crewmemberData = list("dead"=0, "oxy"=-1, "tox"=-1, "fire"=-1, "brute"=-1, "area"="", "x"=-1, "y"=-1, "ref" = "\ref[H]")
|
||||
crewmemberData["sensor_type"] = C.sensor_mode
|
||||
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
|
||||
crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
|
||||
crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
|
||||
|
||||
crewmemberData["sensor_type"] = C.sensor_mode
|
||||
crewmemberData["name"] = H.get_authentification_name(if_no_id="Unknown")
|
||||
crewmemberData["rank"] = H.get_authentification_rank(if_no_id="Unknown", if_no_job="No Job")
|
||||
crewmemberData["assignment"] = H.get_assignment(if_no_id="Unknown", if_no_job="No Job")
|
||||
if(C.sensor_mode >= SUIT_SENSOR_BINARY)
|
||||
crewmemberData["dead"] = H.stat > UNCONSCIOUS
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_BINARY)
|
||||
crewmemberData["dead"] = H.stat > UNCONSCIOUS
|
||||
if(C.sensor_mode >= SUIT_SENSOR_VITAL)
|
||||
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
|
||||
crewmemberData["tox"] = round(H.getToxLoss(), 1)
|
||||
crewmemberData["fire"] = round(H.getFireLoss(), 1)
|
||||
crewmemberData["brute"] = round(H.getBruteLoss(), 1)
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_VITAL)
|
||||
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
|
||||
crewmemberData["tox"] = round(H.getToxLoss(), 1)
|
||||
crewmemberData["fire"] = round(H.getFireLoss(), 1)
|
||||
crewmemberData["brute"] = round(H.getBruteLoss(), 1)
|
||||
if(C.sensor_mode >= SUIT_SENSOR_TRACKING)
|
||||
var/area/A = get_area(H)
|
||||
crewmemberData["area"] = sanitize(A.name)
|
||||
crewmemberData["x"] = pos.x
|
||||
crewmemberData["y"] = pos.y
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_TRACKING)
|
||||
var/area/A = get_area(H)
|
||||
crewmemberData["area"] = sanitize(A.name)
|
||||
crewmemberData["x"] = pos.x
|
||||
crewmemberData["y"] = pos.y
|
||||
|
||||
crewmembers[++crewmembers.len] = crewmemberData
|
||||
crewmembers[++crewmembers.len] = crewmemberData
|
||||
|
||||
crewmembers = sortByKey(crewmembers, "name")
|
||||
cache_entry.timestamp = world.time + 5 SECONDS
|
||||
cache_entry.data = crewmembers
|
||||
|
||||
return crewmembers
|
||||
|
||||
/datum/repository/crew/proc/scan()
|
||||
var/list/tracked = list()
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(istype(H.w_uniform, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/C = H.w_uniform
|
||||
if(C.has_sensor)
|
||||
tracked |= C
|
||||
return tracked
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
I.anchored = initial(I.anchored)
|
||||
for(var/datum/action/item_action/remove_tape/RT in I.actions)
|
||||
RT.Remove(user)
|
||||
RT.Destroy()
|
||||
qdel(RT)
|
||||
I.overlays.Cut(tape_overlay)
|
||||
user.transfer_fingerprints_to(I)
|
||||
Destroy()
|
||||
qdel(src)
|
||||
|
||||
/datum/component/ducttape/proc/afterattack(obj/item/I, atom/target, mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
var/list/say_lines
|
||||
|
||||
/datum/component/edit_complainer/Initialize(list/text)
|
||||
if(!ismovableatom(parent))
|
||||
if(!ismovable(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
var/static/list/default_lines = list(
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak)
|
||||
if(ismovableatom(parent))
|
||||
if(ismovable(parent))
|
||||
RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/play_squeak_crossed)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react)
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
/datum/component/swarming
|
||||
var/offset_x = 0
|
||||
var/offset_y = 0
|
||||
var/is_swarming = FALSE
|
||||
var/list/swarm_members = list()
|
||||
|
||||
/datum/component/swarming/Initialize(max_x = 24, max_y = 24)
|
||||
if(!ismovable(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
offset_x = rand(-max_x, max_x)
|
||||
offset_y = rand(-max_y, max_y)
|
||||
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/join_swarm)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_UNCROSSED, .proc/leave_swarm)
|
||||
|
||||
/datum/component/swarming/Destroy()
|
||||
for(var/other in swarm_members)
|
||||
var/datum/component/swarming/other_swarm = other
|
||||
other_swarm.swarm_members -= src
|
||||
if(!other_swarm.swarm_members.len)
|
||||
other_swarm.unswarm()
|
||||
swarm_members = null
|
||||
return ..()
|
||||
|
||||
/datum/component/swarming/proc/join_swarm(datum/source, atom/movable/AM)
|
||||
var/datum/component/swarming/other_swarm = AM.GetComponent(/datum/component/swarming)
|
||||
if(!other_swarm)
|
||||
return
|
||||
swarm()
|
||||
swarm_members |= other_swarm
|
||||
other_swarm.swarm()
|
||||
other_swarm.swarm_members |= src
|
||||
|
||||
/datum/component/swarming/proc/leave_swarm(datum/source, atom/movable/AM)
|
||||
var/datum/component/swarming/other_swarm = AM.GetComponent(/datum/component/swarming)
|
||||
if(!other_swarm || !(other_swarm in swarm_members))
|
||||
return
|
||||
swarm_members -= other_swarm
|
||||
if(!swarm_members.len)
|
||||
unswarm()
|
||||
other_swarm.swarm_members -= src
|
||||
if(!other_swarm.swarm_members.len)
|
||||
other_swarm.unswarm()
|
||||
|
||||
/datum/component/swarming/proc/swarm()
|
||||
var/atom/movable/owner = parent
|
||||
if(!is_swarming)
|
||||
is_swarming = TRUE
|
||||
animate(owner, pixel_x = owner.pixel_x + offset_x, pixel_y = owner.pixel_y + offset_y, time = 2)
|
||||
|
||||
/datum/component/swarming/proc/unswarm()
|
||||
var/atom/movable/owner = parent
|
||||
if(is_swarming)
|
||||
animate(owner, pixel_x = owner.pixel_x - offset_x, pixel_y = owner.pixel_y - offset_y, time = 2)
|
||||
is_swarming = FALSE
|
||||
+53
-16
@@ -819,6 +819,59 @@
|
||||
message_admins("<span class='notice'>[key_name(usr)] has made [A] process normally</span>")
|
||||
return TRUE
|
||||
|
||||
else if(href_list["modifyarmor"])
|
||||
if(!check_rights(R_DEBUG|R_ADMIN))
|
||||
return
|
||||
var/obj/A = locateUID(href_list["modifyarmor"])
|
||||
if(!istype(A))
|
||||
return
|
||||
A.var_edited = TRUE
|
||||
var/list/armorlist = A.armor.getList()
|
||||
var/list/displaylist
|
||||
|
||||
var/result
|
||||
do
|
||||
displaylist = list()
|
||||
for(var/key in armorlist)
|
||||
displaylist += "[key] = [armorlist[key]]"
|
||||
result = input(usr, "Select an armor type to modify..", "Modify armor") as null|anything in displaylist + "(ADD ALL)" + "(SET ALL)" + "(DONE)"
|
||||
|
||||
if(result == "(DONE)")
|
||||
break
|
||||
else if(result == "(ADD ALL)" || result == "(SET ALL)")
|
||||
var/new_amount = input(usr, result == "(ADD ALL)" ? "Enter armor to add to all types:" : "Enter new armor value for all types:", "Modify all types") as num|null
|
||||
if(isnull(new_amount))
|
||||
continue
|
||||
var/proper_amount = text2num(new_amount)
|
||||
if(isnull(proper_amount))
|
||||
continue
|
||||
for(var/key in armorlist)
|
||||
armorlist[key] = (result == "(ADD ALL)" ? armorlist[key] : 0) + proper_amount
|
||||
else if(result)
|
||||
var/list/fields = splittext(result, " = ")
|
||||
if(length(fields) != 2)
|
||||
continue
|
||||
var/type = fields[1]
|
||||
if(isnull(armorlist[type]))
|
||||
continue
|
||||
var/new_amount = input(usr, "Enter new armor value for [type]:", "Modify [type]") as num|null
|
||||
if(isnull(new_amount))
|
||||
continue
|
||||
var/proper_amount = text2num(new_amount)
|
||||
if(isnull(proper_amount))
|
||||
continue
|
||||
armorlist[type] = proper_amount
|
||||
while(result)
|
||||
|
||||
if(!result || !A)
|
||||
return TRUE
|
||||
|
||||
A.armor = A.armor.setRating(armorlist["melee"], armorlist["bullet"], armorlist["laser"], armorlist["energy"], armorlist["bomb"], armorlist["bio"], armorlist["rad"], armorlist["fire"], armorlist["acid"], armorlist["magic"])
|
||||
|
||||
log_admin("[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]")
|
||||
message_admins("<span class='notice'>[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]")
|
||||
return TRUE
|
||||
|
||||
else if(href_list["addreagent"]) /* Made on /TG/, credit to them. */
|
||||
if(!check_rights(R_DEBUG|R_ADMIN)) return
|
||||
|
||||
@@ -1179,22 +1232,6 @@
|
||||
log_admin("[key_name(usr)] has removed the organ [rem_organ] from [key_name(M)]")
|
||||
qdel(rem_organ)
|
||||
|
||||
else if(href_list["fix_nano"])
|
||||
if(!check_rights(R_DEBUG)) return
|
||||
|
||||
var/mob/H = locateUID(href_list["fix_nano"])
|
||||
|
||||
if(!istype(H) || !H.client)
|
||||
to_chat(usr, "This can only be done on mobs with clients")
|
||||
return
|
||||
|
||||
H.client.reload_nanoui_resources()
|
||||
|
||||
to_chat(usr, "Resource files sent")
|
||||
to_chat(H, "Your NanoUI Resource files have been refreshed")
|
||||
|
||||
log_admin("[key_name(usr)] resent the NanoUI resource files to [key_name(H)]")
|
||||
|
||||
else if(href_list["regenerateicons"])
|
||||
if(!check_rights(0)) return
|
||||
|
||||
|
||||
@@ -195,9 +195,9 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
|
||||
|
||||
// The more symptoms we have, the less transmittable it is but some symptoms can make up for it.
|
||||
SetSpread(Clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE))
|
||||
permeability_mod = max(Ceiling(0.4 * properties["transmittable"]), 1)
|
||||
cure_chance = 15 - Clamp(properties["resistance"], -5, 5) // can be between 10 and 20
|
||||
SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE))
|
||||
permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1)
|
||||
cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20
|
||||
stage_prob = max(properties["stage_rate"], 2)
|
||||
SetSeverity(properties["severity"])
|
||||
GenerateCure(properties)
|
||||
@@ -244,7 +244,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
// Will generate a random cure, the less resistance the symptoms have, the harder the cure.
|
||||
/datum/disease/advance/proc/GenerateCure(list/properties = list())
|
||||
if(properties && properties.len)
|
||||
var/res = Clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len)
|
||||
var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len)
|
||||
// to_chat(world, "Res = [res]")
|
||||
cures = list(GLOB.advance_cures[res])
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
if(NO_HUNGER in H.dna.species.species_traits)
|
||||
return TRUE
|
||||
if(ismachine(H))
|
||||
if(ismachineperson(H))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/datum/element/waddling/Attach(datum/target)
|
||||
. = ..()
|
||||
if(!ismovableatom(target))
|
||||
if(!ismovable(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
if(isliving(target))
|
||||
RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/LivingWaddle)
|
||||
|
||||
+176
-289
@@ -7,33 +7,22 @@ What are the archived variables for?
|
||||
#define SPECIFIC_HEAT_TOXIN 200
|
||||
#define SPECIFIC_HEAT_AIR 20
|
||||
#define SPECIFIC_HEAT_CDO 30
|
||||
#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \
|
||||
(carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN)
|
||||
#define SPECIFIC_HEAT_N2O 40
|
||||
#define SPECIFIC_HEAT_AGENT_B 300
|
||||
|
||||
#define HEAT_CAPACITY_CALCULATION(oxygen, carbon_dioxide, nitrogen, toxins, sleeping_agent, agent_b) \
|
||||
(carbon_dioxide * SPECIFIC_HEAT_CDO + (oxygen + nitrogen) * SPECIFIC_HEAT_AIR + toxins * SPECIFIC_HEAT_TOXIN + sleeping_agent * SPECIFIC_HEAT_N2O + agent_b * SPECIFIC_HEAT_AGENT_B)
|
||||
|
||||
#define MINIMUM_HEAT_CAPACITY 0.0003
|
||||
#define QUANTIZE(variable) (round(variable,0.0001))
|
||||
|
||||
/datum/gas
|
||||
var/moles = 0
|
||||
var/specific_heat = 0
|
||||
|
||||
var/moles_archived = 0
|
||||
|
||||
/datum/gas/sleeping_agent
|
||||
specific_heat = 40
|
||||
|
||||
/datum/gas/oxygen_agent_b
|
||||
specific_heat = 300
|
||||
|
||||
/datum/gas/volatile_fuel
|
||||
specific_heat = 30
|
||||
|
||||
#define QUANTIZE(variable) (round(variable, 0.0001))
|
||||
|
||||
/datum/gas_mixture
|
||||
var/oxygen = 0
|
||||
var/carbon_dioxide = 0
|
||||
var/nitrogen = 0
|
||||
var/toxins = 0
|
||||
var/sleeping_agent = 0
|
||||
var/agent_b = 0
|
||||
|
||||
var/volume = CELL_VOLUME
|
||||
|
||||
@@ -41,13 +30,12 @@ What are the archived variables for?
|
||||
|
||||
var/last_share
|
||||
|
||||
var/list/datum/gas/trace_gases = list()
|
||||
|
||||
|
||||
var/tmp/oxygen_archived
|
||||
var/tmp/carbon_dioxide_archived
|
||||
var/tmp/nitrogen_archived
|
||||
var/tmp/toxins_archived
|
||||
var/tmp/sleeping_agent_archived
|
||||
var/tmp/agent_b_archived
|
||||
|
||||
var/tmp/temperature_archived
|
||||
|
||||
@@ -55,35 +43,24 @@ What are the archived variables for?
|
||||
|
||||
//PV=nRT - related procedures
|
||||
/datum/gas_mixture/proc/heat_capacity()
|
||||
var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins)
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
heat_capacity += trace_gas.moles*trace_gas.specific_heat
|
||||
return heat_capacity
|
||||
return HEAT_CAPACITY_CALCULATION(oxygen, carbon_dioxide, nitrogen, toxins, sleeping_agent, agent_b)
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/heat_capacity_archived()
|
||||
var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived)
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat
|
||||
return heat_capacity_archived
|
||||
return HEAT_CAPACITY_CALCULATION(oxygen_archived, carbon_dioxide_archived, nitrogen_archived, toxins_archived, sleeping_agent_archived, agent_b_archived)
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/total_moles()
|
||||
var/moles = oxygen + carbon_dioxide + nitrogen + toxins
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
moles += trace_gas.moles
|
||||
var/moles = oxygen + carbon_dioxide + nitrogen + toxins + sleeping_agent + agent_b
|
||||
return moles
|
||||
|
||||
/datum/gas_mixture/proc/total_trace_moles()
|
||||
var/moles = sleeping_agent + agent_b
|
||||
return moles
|
||||
|
||||
/datum/gas_mixture/proc/return_pressure()
|
||||
if(volume>0)
|
||||
return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume
|
||||
if(volume > 0)
|
||||
return total_moles() * R_IDEAL_GAS_EQUATION * temperature / volume
|
||||
return 0
|
||||
|
||||
|
||||
@@ -96,7 +73,7 @@ What are the archived variables for?
|
||||
|
||||
|
||||
/datum/gas_mixture/proc/thermal_energy()
|
||||
return temperature*heat_capacity()
|
||||
return temperature * heat_capacity()
|
||||
|
||||
|
||||
//Procedures used for very specific events
|
||||
@@ -105,28 +82,23 @@ What are the archived variables for?
|
||||
/datum/gas_mixture/proc/react(atom/dump_location)
|
||||
var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network)
|
||||
|
||||
if(trace_gases.len > 0)
|
||||
if(temperature > 900)
|
||||
if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY)
|
||||
var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases
|
||||
if(trace_gas)
|
||||
var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05)
|
||||
if(agent_b && temperature > 900)
|
||||
if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY)
|
||||
var/reaction_rate = min(carbon_dioxide * 0.75, toxins * 0.25, agent_b * 0.05)
|
||||
|
||||
carbon_dioxide -= reaction_rate
|
||||
oxygen += reaction_rate
|
||||
carbon_dioxide -= reaction_rate
|
||||
oxygen += reaction_rate
|
||||
|
||||
trace_gas.moles -= reaction_rate*0.05
|
||||
agent_b -= reaction_rate * 0.05
|
||||
|
||||
temperature += (reaction_rate*20000)/heat_capacity()
|
||||
temperature += (reaction_rate * 20000) / heat_capacity()
|
||||
|
||||
reacting = 1
|
||||
reacting = 1
|
||||
|
||||
fuel_burnt = 0
|
||||
if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
|
||||
// to_chat(world, "pre [temperature], [oxygen], [toxins]")
|
||||
if(fire() > 0)
|
||||
reacting = 1
|
||||
// to_chat(world, "post [temperature], [oxygen], [toxins]")
|
||||
|
||||
return reacting
|
||||
|
||||
@@ -134,24 +106,6 @@ What are the archived variables for?
|
||||
var/energy_released = 0
|
||||
var/old_heat_capacity = heat_capacity()
|
||||
|
||||
var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases
|
||||
if(fuel_store) //General volatile gas burn
|
||||
var/burned_fuel = 0
|
||||
|
||||
if(oxygen < fuel_store.moles)
|
||||
burned_fuel = oxygen
|
||||
fuel_store.moles -= burned_fuel
|
||||
oxygen = 0
|
||||
else
|
||||
burned_fuel = fuel_store.moles
|
||||
oxygen -= fuel_store.moles
|
||||
trace_gases -= fuel_store
|
||||
fuel_store = null
|
||||
|
||||
energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel
|
||||
carbon_dioxide += burned_fuel
|
||||
fuel_burnt += burned_fuel
|
||||
|
||||
//Handle plasma burning
|
||||
if(toxins > MINIMUM_HEAT_CAPACITY)
|
||||
var/plasma_burn_rate = 0
|
||||
@@ -161,13 +115,13 @@ What are the archived variables for?
|
||||
if(temperature > PLASMA_UPPER_TEMPERATURE)
|
||||
temperature_scale = 1
|
||||
else
|
||||
temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
|
||||
temperature_scale = (temperature - PLASMA_MINIMUM_BURN_TEMPERATURE) / (PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE)
|
||||
if(temperature_scale > 0)
|
||||
oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale
|
||||
if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN)
|
||||
plasma_burn_rate = (toxins*temperature_scale)/PLASMA_BURN_RATE_DELTA
|
||||
if(oxygen > toxins * PLASMA_OXYGEN_FULLBURN)
|
||||
plasma_burn_rate = (toxins * temperature_scale) / PLASMA_BURN_RATE_DELTA
|
||||
else
|
||||
plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA
|
||||
plasma_burn_rate = (temperature_scale * (oxygen / PLASMA_OXYGEN_FULLBURN)) / PLASMA_BURN_RATE_DELTA
|
||||
if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY)
|
||||
toxins -= plasma_burn_rate
|
||||
oxygen -= plasma_burn_rate*oxygen_burn_rate
|
||||
@@ -175,12 +129,12 @@ What are the archived variables for?
|
||||
|
||||
energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate)
|
||||
|
||||
fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate)
|
||||
fuel_burnt += (plasma_burn_rate) * (1 + oxygen_burn_rate)
|
||||
|
||||
if(energy_released > 0)
|
||||
var/new_heat_capacity = heat_capacity()
|
||||
if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity
|
||||
temperature = (temperature * old_heat_capacity + energy_released) / new_heat_capacity
|
||||
|
||||
return fuel_burnt
|
||||
|
||||
@@ -231,10 +185,8 @@ What are the archived variables for?
|
||||
carbon_dioxide_archived = carbon_dioxide
|
||||
nitrogen_archived = nitrogen
|
||||
toxins_archived = toxins
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
trace_gas.moles_archived = trace_gas.moles
|
||||
sleeping_agent_archived = sleeping_agent
|
||||
agent_b_archived = agent_b
|
||||
|
||||
temperature_archived = temperature
|
||||
|
||||
@@ -244,55 +196,45 @@ What are the archived variables for?
|
||||
if(!giver)
|
||||
return 0
|
||||
|
||||
if(abs(temperature-giver.temperature)>MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
if(abs(temperature - giver.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
var/giver_heat_capacity = giver.heat_capacity()
|
||||
var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity
|
||||
if(combined_heat_capacity != 0)
|
||||
temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity
|
||||
temperature = (giver.temperature * giver_heat_capacity + temperature * self_heat_capacity) / combined_heat_capacity
|
||||
|
||||
oxygen += giver.oxygen
|
||||
carbon_dioxide += giver.carbon_dioxide
|
||||
nitrogen += giver.nitrogen
|
||||
toxins += giver.toxins
|
||||
|
||||
for(var/gas in giver.trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases
|
||||
if(!corresponding)
|
||||
corresponding = new trace_gas.type()
|
||||
trace_gases += corresponding
|
||||
corresponding.moles += trace_gas.moles
|
||||
sleeping_agent += giver.sleeping_agent
|
||||
agent_b += giver.agent_b
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/remove(amount)
|
||||
|
||||
var/sum = total_moles()
|
||||
amount = min(amount,sum) //Can not take more air than tile has!
|
||||
amount = min(amount, sum) //Can not take more air than tile has!
|
||||
if(amount <= 0)
|
||||
return null
|
||||
|
||||
var/datum/gas_mixture/removed = new
|
||||
|
||||
|
||||
removed.oxygen = QUANTIZE((oxygen/sum)*amount)
|
||||
removed.nitrogen = QUANTIZE((nitrogen/sum)*amount)
|
||||
removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount)
|
||||
removed.toxins = QUANTIZE((toxins/sum)*amount)
|
||||
removed.oxygen = QUANTIZE((oxygen / sum) * amount)
|
||||
removed.nitrogen = QUANTIZE((nitrogen/ sum) * amount)
|
||||
removed.carbon_dioxide = QUANTIZE((carbon_dioxide / sum) * amount)
|
||||
removed.toxins = QUANTIZE((toxins / sum) * amount)
|
||||
removed.sleeping_agent = QUANTIZE((sleeping_agent / sum) * amount)
|
||||
removed.agent_b = QUANTIZE((agent_b / sum) * amount)
|
||||
|
||||
oxygen -= removed.oxygen
|
||||
nitrogen -= removed.nitrogen
|
||||
carbon_dioxide -= removed.carbon_dioxide
|
||||
toxins -= removed.toxins
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/datum/gas/corresponding = new trace_gas.type()
|
||||
removed.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = (trace_gas.moles/sum)*amount
|
||||
trace_gas.moles -= corresponding.moles
|
||||
sleeping_agent -= removed.sleeping_agent
|
||||
agent_b -= removed.agent_b
|
||||
|
||||
removed.temperature = temperature
|
||||
|
||||
@@ -307,23 +249,19 @@ What are the archived variables for?
|
||||
|
||||
var/datum/gas_mixture/removed = new
|
||||
|
||||
removed.oxygen = QUANTIZE(oxygen*ratio)
|
||||
removed.nitrogen = QUANTIZE(nitrogen*ratio)
|
||||
removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio)
|
||||
removed.toxins = QUANTIZE(toxins*ratio)
|
||||
removed.oxygen = QUANTIZE(oxygen * ratio)
|
||||
removed.nitrogen = QUANTIZE(nitrogen * ratio)
|
||||
removed.carbon_dioxide = QUANTIZE(carbon_dioxide * ratio)
|
||||
removed.toxins = QUANTIZE(toxins * ratio)
|
||||
removed.sleeping_agent = QUANTIZE(sleeping_agent * ratio)
|
||||
removed.agent_b = QUANTIZE(agent_b * ratio)
|
||||
|
||||
oxygen -= removed.oxygen
|
||||
nitrogen -= removed.nitrogen
|
||||
carbon_dioxide -= removed.carbon_dioxide
|
||||
toxins -= removed.toxins
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/datum/gas/corresponding = new trace_gas.type()
|
||||
removed.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles*ratio
|
||||
trace_gas.moles -= corresponding.moles
|
||||
sleeping_agent -= removed.sleeping_agent
|
||||
agent_b -= removed.agent_b
|
||||
|
||||
removed.temperature = temperature
|
||||
|
||||
@@ -334,14 +272,8 @@ What are the archived variables for?
|
||||
carbon_dioxide = sample.carbon_dioxide
|
||||
nitrogen = sample.nitrogen
|
||||
toxins = sample.toxins
|
||||
|
||||
trace_gases.len=null
|
||||
for(var/gas in sample.trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/datum/gas/corresponding = new trace_gas.type()
|
||||
trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles
|
||||
sleeping_agent = sample.sleeping_agent
|
||||
agent_b = sample.agent_b
|
||||
|
||||
temperature = sample.temperature
|
||||
|
||||
@@ -352,6 +284,8 @@ What are the archived variables for?
|
||||
carbon_dioxide = model.carbon_dioxide
|
||||
nitrogen = model.nitrogen
|
||||
toxins = model.toxins
|
||||
sleeping_agent = model.sleeping_agent
|
||||
agent_b = model.agent_b
|
||||
|
||||
//acounts for changes in temperature
|
||||
var/turf/model_parent = model.parent_type
|
||||
@@ -361,26 +295,25 @@ What are the archived variables for?
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/check_turf(turf/model, atmos_adjacent_turfs = 4)
|
||||
var/delta_oxygen = (oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1)
|
||||
var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1)
|
||||
var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1)
|
||||
var/delta_toxins = (toxins_archived - model.toxins)/(atmos_adjacent_turfs+1)
|
||||
var/delta_oxygen = (oxygen_archived - model.oxygen) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_nitrogen = (nitrogen_archived - model.nitrogen) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_toxins = (toxins_archived - model.toxins) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_sleeping_agent = (sleeping_agent_archived - model.sleeping_agent) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_agent_b = (agent_b_archived - model.agent_b) / (atmos_adjacent_turfs + 1)
|
||||
|
||||
var/delta_temperature = (temperature_archived - model.temperature)
|
||||
|
||||
if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)))
|
||||
if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_sleeping_agent) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_sleeping_agent) >= sleeping_agent_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_agent_b) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_agent_b) >= agent_b_archived * MINIMUM_AIR_RATIO_TO_SUSPEND)))
|
||||
return 0
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
|
||||
return 0
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/proc/check_turf_total(turf/model) //I want this proc to die a painful death
|
||||
@@ -388,30 +321,32 @@ What are the archived variables for?
|
||||
var/delta_carbon_dioxide = (carbon_dioxide - model.carbon_dioxide)
|
||||
var/delta_nitrogen = (nitrogen - model.nitrogen)
|
||||
var/delta_toxins = (toxins - model.toxins)
|
||||
var/delta_sleeping_agent = (sleeping_agent - model.sleeping_agent)
|
||||
var/delta_agent_b = (agent_b - model.agent_b)
|
||||
|
||||
var/delta_temperature = (temperature - model.temperature)
|
||||
|
||||
if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND)))
|
||||
if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_sleeping_agent) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_sleeping_agent) >= sleeping_agent * MINIMUM_AIR_RATIO_TO_SUSPEND)) \
|
||||
|| ((abs(delta_agent_b) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_agent_b) >= agent_b * MINIMUM_AIR_RATIO_TO_SUSPEND)))
|
||||
return 0
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
|
||||
return 0
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND*4)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
/datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
|
||||
if(!sharer) return 0
|
||||
var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1)
|
||||
var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1)
|
||||
var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1)
|
||||
var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1)
|
||||
if(!sharer)
|
||||
return 0
|
||||
var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_sleeping_agent = QUANTIZE(sleeping_agent_archived - sharer.sleeping_agent_archived) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_agent_b = QUANTIZE(agent_b_archived - sharer.agent_b_archived) / (atmos_adjacent_turfs + 1)
|
||||
|
||||
var/delta_temperature = (temperature_archived - sharer.temperature_archived)
|
||||
|
||||
@@ -423,28 +358,42 @@ What are the archived variables for?
|
||||
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
|
||||
var/delta_air = delta_oxygen+delta_nitrogen
|
||||
var/delta_air = delta_oxygen + delta_nitrogen
|
||||
if(delta_air)
|
||||
var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air
|
||||
var/air_heat_capacity = SPECIFIC_HEAT_AIR * delta_air
|
||||
if(delta_air > 0)
|
||||
heat_capacity_self_to_sharer += air_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= air_heat_capacity
|
||||
|
||||
if(delta_carbon_dioxide)
|
||||
var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide
|
||||
var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO * delta_carbon_dioxide
|
||||
if(delta_carbon_dioxide > 0)
|
||||
heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity
|
||||
|
||||
if(delta_toxins)
|
||||
var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins
|
||||
var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN * delta_toxins
|
||||
if(delta_toxins > 0)
|
||||
heat_capacity_self_to_sharer += toxins_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= toxins_heat_capacity
|
||||
|
||||
if(delta_sleeping_agent)
|
||||
var/sleeping_agent_heat_capacity = SPECIFIC_HEAT_N2O * delta_sleeping_agent
|
||||
if(delta_sleeping_agent > 0)
|
||||
heat_capacity_self_to_sharer += sleeping_agent_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= sleeping_agent_heat_capacity
|
||||
|
||||
if(delta_agent_b)
|
||||
var/agent_b_heat_capacity = SPECIFIC_HEAT_AGENT_B * delta_agent_b
|
||||
if(delta_agent_b > 0)
|
||||
heat_capacity_self_to_sharer += agent_b_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= agent_b_heat_capacity
|
||||
|
||||
old_self_heat_capacity = heat_capacity()
|
||||
old_sharer_heat_capacity = sharer.heat_capacity()
|
||||
|
||||
@@ -460,83 +409,40 @@ What are the archived variables for?
|
||||
toxins -= delta_toxins
|
||||
sharer.toxins += delta_toxins
|
||||
|
||||
var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins)
|
||||
last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins)
|
||||
sleeping_agent -= delta_sleeping_agent
|
||||
sharer.sleeping_agent += delta_sleeping_agent
|
||||
|
||||
var/list/trace_types_considered = list()
|
||||
agent_b -= delta_agent_b
|
||||
sharer.agent_b += delta_agent_b
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases
|
||||
var/delta = 0
|
||||
|
||||
if(corresponding)
|
||||
delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1)
|
||||
else
|
||||
corresponding = new trace_gas.type()
|
||||
sharer.trace_gases += corresponding
|
||||
|
||||
delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1)
|
||||
|
||||
trace_gas.moles -= delta
|
||||
corresponding.moles += delta
|
||||
|
||||
if(delta)
|
||||
var/individual_heat_capacity = trace_gas.specific_heat*delta
|
||||
if(delta > 0)
|
||||
heat_capacity_self_to_sharer += individual_heat_capacity
|
||||
else
|
||||
heat_capacity_sharer_to_self -= individual_heat_capacity
|
||||
|
||||
moved_moles += delta
|
||||
last_share += abs(delta)
|
||||
|
||||
trace_types_considered += trace_gas.type
|
||||
|
||||
for(var/gas in sharer.trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
if(trace_gas.type in trace_types_considered)
|
||||
continue
|
||||
var/datum/gas/corresponding
|
||||
var/delta = 0
|
||||
corresponding = new trace_gas.type()
|
||||
trace_gases += corresponding
|
||||
|
||||
delta = trace_gas.moles_archived/5
|
||||
|
||||
trace_gas.moles -= delta
|
||||
corresponding.moles += delta
|
||||
|
||||
//Guaranteed transfer from sharer to self
|
||||
var/individual_heat_capacity = trace_gas.specific_heat*delta
|
||||
heat_capacity_sharer_to_self += individual_heat_capacity
|
||||
|
||||
moved_moles += -delta
|
||||
last_share += abs(delta)
|
||||
var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins + delta_sleeping_agent + delta_agent_b)
|
||||
last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) + abs(delta_sleeping_agent) + abs(delta_agent_b)
|
||||
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer
|
||||
var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self
|
||||
|
||||
if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity
|
||||
temperature = (old_self_heat_capacity * temperature - heat_capacity_self_to_sharer * temperature_archived + heat_capacity_sharer_to_self * sharer.temperature_archived) / new_self_heat_capacity
|
||||
|
||||
if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity
|
||||
sharer.temperature = (old_sharer_heat_capacity * sharer.temperature - heat_capacity_sharer_to_self * sharer.temperature_archived + heat_capacity_self_to_sharer * temperature_archived) / new_sharer_heat_capacity
|
||||
|
||||
if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY)
|
||||
if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity
|
||||
if(abs(new_sharer_heat_capacity / old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity
|
||||
temperature_share(sharer, OPEN_HEAT_TRANSFER_COEFFICIENT)
|
||||
|
||||
if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
|
||||
var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles)
|
||||
return delta_pressure*R_IDEAL_GAS_EQUATION/volume
|
||||
var/delta_pressure = temperature_archived * (total_moles() + moved_moles) - sharer.temperature_archived * (sharer.total_moles() - moved_moles)
|
||||
return delta_pressure * R_IDEAL_GAS_EQUATION / volume
|
||||
|
||||
/datum/gas_mixture/mimic(turf/model, atmos_adjacent_turfs = 4)
|
||||
var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1)
|
||||
var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1)
|
||||
var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1)
|
||||
var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1)
|
||||
var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_toxins = QUANTIZE(toxins_archived - model.toxins) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_sleeping_agent = QUANTIZE(sleeping_agent_archived - model.sleeping_agent) / (atmos_adjacent_turfs + 1)
|
||||
var/delta_agent_b = QUANTIZE(agent_b_archived - model.agent_b) / (atmos_adjacent_turfs + 1)
|
||||
|
||||
var/delta_temperature = (temperature_archived - model.temperature)
|
||||
|
||||
@@ -546,57 +452,54 @@ What are the archived variables for?
|
||||
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
|
||||
var/delta_air = delta_oxygen+delta_nitrogen
|
||||
var/delta_air = delta_oxygen + delta_nitrogen
|
||||
if(delta_air)
|
||||
var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air
|
||||
heat_transferred -= air_heat_capacity*model.temperature
|
||||
var/air_heat_capacity = SPECIFIC_HEAT_AIR * delta_air
|
||||
heat_transferred -= air_heat_capacity * model.temperature
|
||||
heat_capacity_transferred -= air_heat_capacity
|
||||
|
||||
if(delta_carbon_dioxide)
|
||||
var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide
|
||||
heat_transferred -= carbon_dioxide_heat_capacity*model.temperature
|
||||
var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO * delta_carbon_dioxide
|
||||
heat_transferred -= carbon_dioxide_heat_capacity * model.temperature
|
||||
heat_capacity_transferred -= carbon_dioxide_heat_capacity
|
||||
|
||||
if(delta_toxins)
|
||||
var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins
|
||||
heat_transferred -= toxins_heat_capacity*model.temperature
|
||||
var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN * delta_toxins
|
||||
heat_transferred -= toxins_heat_capacity * model.temperature
|
||||
heat_capacity_transferred -= toxins_heat_capacity
|
||||
|
||||
if(delta_sleeping_agent)
|
||||
var/sleeping_agent_heat_capacity = SPECIFIC_HEAT_N2O * delta_sleeping_agent
|
||||
heat_transferred -= sleeping_agent_heat_capacity * model.temperature
|
||||
heat_capacity_transferred -= sleeping_agent_heat_capacity
|
||||
|
||||
if(delta_agent_b)
|
||||
var/agent_b_heat_capacity = SPECIFIC_HEAT_AGENT_B * delta_agent_b
|
||||
heat_transferred -= agent_b_heat_capacity * model.temperature
|
||||
heat_capacity_transferred -= agent_b_heat_capacity
|
||||
|
||||
old_self_heat_capacity = heat_capacity()
|
||||
|
||||
oxygen -= delta_oxygen
|
||||
carbon_dioxide -= delta_carbon_dioxide
|
||||
nitrogen -= delta_nitrogen
|
||||
toxins -= delta_toxins
|
||||
sleeping_agent -= delta_sleeping_agent
|
||||
agent_b -= delta_agent_b
|
||||
|
||||
var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins)
|
||||
last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins)
|
||||
|
||||
if(trace_gases.len)
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
var/delta = 0
|
||||
|
||||
delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1)
|
||||
|
||||
trace_gas.moles -= delta
|
||||
|
||||
var/heat_cap_transferred = delta*trace_gas.specific_heat
|
||||
heat_transferred += heat_cap_transferred*temperature_archived
|
||||
heat_capacity_transferred += heat_cap_transferred
|
||||
moved_moles += delta
|
||||
moved_moles += abs(delta)
|
||||
var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins + delta_sleeping_agent + delta_agent_b)
|
||||
last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) + abs(delta_sleeping_agent) + abs(delta_agent_b)
|
||||
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred
|
||||
if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY)
|
||||
temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*temperature_archived)/new_self_heat_capacity
|
||||
temperature = (old_self_heat_capacity * temperature - heat_capacity_transferred * temperature_archived) / new_self_heat_capacity
|
||||
|
||||
temperature_mimic(model, model.thermal_conductivity)
|
||||
|
||||
if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
|
||||
var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins)
|
||||
return delta_pressure*R_IDEAL_GAS_EQUATION/volume
|
||||
var/delta_pressure = temperature_archived * (total_moles() + moved_moles) - model.temperature * (model.oxygen + model.carbon_dioxide + model.nitrogen + model.toxins + model.sleeping_agent + model.agent_b)
|
||||
return delta_pressure * R_IDEAL_GAS_EQUATION / volume
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -608,11 +511,11 @@ What are the archived variables for?
|
||||
var/sharer_heat_capacity = sharer.heat_capacity_archived()
|
||||
|
||||
if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
(self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity))
|
||||
var/heat = conduction_coefficient*delta_temperature * \
|
||||
(self_heat_capacity * sharer_heat_capacity / (self_heat_capacity + sharer_heat_capacity))
|
||||
|
||||
temperature -= heat/self_heat_capacity
|
||||
sharer.temperature += heat/sharer_heat_capacity
|
||||
temperature -= heat / self_heat_capacity
|
||||
sharer.temperature += heat / sharer_heat_capacity
|
||||
|
||||
/datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient)
|
||||
var/delta_temperature = (temperature - model.temperature)
|
||||
@@ -620,10 +523,10 @@ What are the archived variables for?
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
|
||||
if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
(self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity))
|
||||
var/heat = conduction_coefficient * delta_temperature * \
|
||||
(self_heat_capacity * model.heat_capacity / (self_heat_capacity + model.heat_capacity))
|
||||
|
||||
temperature -= heat/self_heat_capacity
|
||||
temperature -= heat / self_heat_capacity
|
||||
|
||||
/datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient)
|
||||
var/delta_temperature = (temperature_archived - sharer.temperature)
|
||||
@@ -631,52 +534,36 @@ What are the archived variables for?
|
||||
var/self_heat_capacity = heat_capacity()
|
||||
|
||||
if((sharer.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
(self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity))
|
||||
var/heat = conduction_coefficient * delta_temperature * \
|
||||
(self_heat_capacity * sharer.heat_capacity / (self_heat_capacity + sharer.heat_capacity))
|
||||
|
||||
temperature -= heat/self_heat_capacity
|
||||
sharer.temperature += heat/sharer.heat_capacity
|
||||
temperature -= heat / self_heat_capacity
|
||||
sharer.temperature += heat / sharer.heat_capacity
|
||||
|
||||
/datum/gas_mixture/compare(datum/gas_mixture/sample)
|
||||
if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen)))
|
||||
if((abs(oxygen - sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((oxygen < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.oxygen) || (oxygen > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.oxygen)))
|
||||
return 0
|
||||
if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen)))
|
||||
if((abs(nitrogen - sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((nitrogen < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.nitrogen) || (nitrogen > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.nitrogen)))
|
||||
return 0
|
||||
if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (carbon_dioxide > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide)))
|
||||
if((abs(carbon_dioxide - sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((carbon_dioxide < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.carbon_dioxide) || (carbon_dioxide > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.carbon_dioxide)))
|
||||
return 0
|
||||
if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins)))
|
||||
if((abs(toxins - sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((toxins < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.toxins) || (toxins > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.toxins)))
|
||||
return 0
|
||||
if((abs(sleeping_agent - sample.sleeping_agent) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((sleeping_agent < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.sleeping_agent) || (sleeping_agent > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.sleeping_agent)))
|
||||
return 0
|
||||
if((abs(agent_b - sample.agent_b) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((agent_b < (1 - MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.agent_b) || (agent_b > (1 + MINIMUM_AIR_RATIO_TO_SUSPEND) * sample.agent_b)))
|
||||
return 0
|
||||
|
||||
if(total_moles() > MINIMUM_AIR_TO_SUSPEND)
|
||||
if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
|
||||
((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature)))
|
||||
if((abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
|
||||
((temperature < (1 - MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND) * sample.temperature) || (temperature > (1 + MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND) * sample.temperature)))
|
||||
return 0
|
||||
|
||||
for(var/gas in sample.trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND)
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases
|
||||
if(corresponding)
|
||||
if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles)))
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
|
||||
for(var/gas in trace_gases)
|
||||
var/datum/gas/trace_gas = gas
|
||||
if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND)
|
||||
var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases
|
||||
if(corresponding)
|
||||
if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \
|
||||
((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles)))
|
||||
return 0
|
||||
else
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
@@ -691,12 +578,12 @@ What are the archived variables for?
|
||||
//Does handle trace gases!
|
||||
|
||||
/datum/gas_mixture/proc/get_breath_partial_pressure(gas_pressure)
|
||||
return (gas_pressure*R_IDEAL_GAS_EQUATION*temperature)/BREATH_VOLUME
|
||||
return (gas_pressure * R_IDEAL_GAS_EQUATION * temperature) / BREATH_VOLUME
|
||||
|
||||
|
||||
//Reverse of the above
|
||||
/datum/gas_mixture/proc/get_true_breath_pressure(breath_pp)
|
||||
return (breath_pp*BREATH_VOLUME)/(R_IDEAL_GAS_EQUATION*temperature)
|
||||
return (breath_pp * BREATH_VOLUME) / (R_IDEAL_GAS_EQUATION * temperature)
|
||||
|
||||
//Mathematical proofs:
|
||||
/*
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
var/datum/gas_mixture/A = F.air
|
||||
|
||||
// Can most things breathe?
|
||||
if(A.trace_gases.len)
|
||||
if(A.sleeping_agent)
|
||||
continue
|
||||
if(A.oxygen < 16)
|
||||
continue
|
||||
|
||||
+16
-5
@@ -39,7 +39,6 @@
|
||||
var/role_alt_title
|
||||
|
||||
var/datum/job/assigned_job
|
||||
var/list/kills = list()
|
||||
var/list/datum/objective/objectives = list()
|
||||
var/list/datum/objective/special_verbs = list()
|
||||
var/list/targets = list()
|
||||
@@ -90,6 +89,9 @@
|
||||
if(antag_datum.delete_on_mind_deletion)
|
||||
qdel(i)
|
||||
antag_datums = null
|
||||
current = null
|
||||
original = null
|
||||
soulOwner = null
|
||||
return ..()
|
||||
|
||||
/datum/mind/proc/transfer_to(mob/living/new_character)
|
||||
@@ -545,11 +547,20 @@
|
||||
if(objective&&(objective.type in objective_list) && objective:target)
|
||||
def_target = objective.target.current
|
||||
possible_targets = sortAtom(possible_targets)
|
||||
possible_targets += "Free objective"
|
||||
|
||||
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
|
||||
if(!new_target)
|
||||
return
|
||||
var/new_target
|
||||
if(length(possible_targets) > 0)
|
||||
if(alert(usr, "Do you want to pick the objective yourself? No will randomise it", "Pick objective", "Yes", "No") == "Yes")
|
||||
possible_targets += "Free objective"
|
||||
new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
|
||||
else
|
||||
new_target = pick(possible_targets)
|
||||
|
||||
if(!new_target)
|
||||
return
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>No possible target found. Defaulting to a Free objective.</span>")
|
||||
new_target = "Free objective"
|
||||
|
||||
var/objective_path = text2path("/datum/objective/[new_obj_type]")
|
||||
if(new_target == "Free objective")
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
if(user.client)
|
||||
user.client.images += bar
|
||||
|
||||
progress = Clamp(progress, 0, goal)
|
||||
progress = clamp(progress, 0, goal)
|
||||
bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]"
|
||||
if(!shown)
|
||||
user.client.images += bar
|
||||
|
||||
@@ -237,10 +237,10 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
if(action)
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr) //if recharge is started is important for the trigger spells
|
||||
/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr, make_attack_logs = TRUE) //if recharge is started is important for the trigger spells
|
||||
before_cast(targets)
|
||||
invocation()
|
||||
if(user && user.ckey)
|
||||
if(user && user.ckey && make_attack_logs)
|
||||
add_attack_logs(user, targets, "cast the spell [name]", ATKLOG_ALL)
|
||||
spawn(0)
|
||||
if(charge_type == "recharge" && recharge)
|
||||
|
||||
@@ -13,6 +13,11 @@
|
||||
action_icon_state = "knock"
|
||||
sound = 'sound/magic/knock.ogg'
|
||||
|
||||
// Knock doesn't need to generate an attack log for every turf, set `make_attack_logs` to FALSE and just create a custom one.
|
||||
/obj/effect/proc_holder/spell/aoe_turf/knock/perform(list/targets, recharge, mob/user)
|
||||
add_attack_logs(user, user, "cast the spell [name]", ATKLOG_ALL)
|
||||
return ..(targets, recharge, user, make_attack_logs = FALSE)
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets, mob/user = usr)
|
||||
for(var/turf/T in targets)
|
||||
for(var/obj/machinery/door/door in T.contents)
|
||||
@@ -30,8 +35,6 @@
|
||||
SC.locked = 0
|
||||
C.open()
|
||||
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/aoe_turf/knock/greater
|
||||
name = "Greater Knock"
|
||||
desc = "On first cast, will remove access restrictions on all airlocks on the station, and announce this spell's use to the station. On any further cast, will open all doors in sight. Cannot be refunded once bought!"
|
||||
|
||||
@@ -75,8 +75,6 @@
|
||||
B.transfer_identity(C)
|
||||
C.death()
|
||||
add_attack_logs(target, C, "Magically debrained INTENT: [uppertext(target.a_intent)]")*/
|
||||
if(C.stomach_contents && (item_to_retrieve in C.stomach_contents))
|
||||
C.stomach_contents -= item_to_retrieve
|
||||
for(var/X in C.bodyparts)
|
||||
var/obj/item/organ/external/part = X
|
||||
if(item_to_retrieve in part.embedded_objects)
|
||||
|
||||
@@ -423,7 +423,7 @@
|
||||
M.Weaken(stun_amt)
|
||||
to_chat(M, "<span class='userdanger'>You're thrown back by a mystical force!</span>")
|
||||
spawn(0)
|
||||
AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time.
|
||||
AM.throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time.
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/sacred_flame
|
||||
name = "Sacred Flame"
|
||||
|
||||
@@ -188,15 +188,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
item = /obj/item/storage/box/syndie_kit/fake_revolver
|
||||
cost = 1
|
||||
job = list("Clown")
|
||||
/*
|
||||
/datum/uplink_item/stealthy_weapons/romerol_kit
|
||||
name = "Romerol"
|
||||
reference = "ROM"
|
||||
desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. On death, these nodules take control of the dead body, causing limited revivification, along with slurred speech, aggression, and the ability to infect others with this agent."
|
||||
item = /obj/item/storage/box/syndie_kit/romerol
|
||||
cost = 25
|
||||
cant_discount = TRUE
|
||||
*/
|
||||
//mime
|
||||
/datum/uplink_item/jobspecific/caneshotgun
|
||||
name = "Cane Shotgun and Assassination Shells"
|
||||
@@ -247,6 +238,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
cost = 2
|
||||
job = list("Chef")
|
||||
|
||||
/datum/uplink_item/jobspecific/Chef_CQC
|
||||
name = " A chefs manual to CQC"
|
||||
desc = "An old manual teaching you how to bring your home advantage outside the kitchen."
|
||||
reference = "CCQC"
|
||||
item = /obj/item/CQC_manual/chef
|
||||
cost = 12
|
||||
job = list("Chef")
|
||||
|
||||
//Chaplain
|
||||
|
||||
/datum/uplink_item/jobspecific/voodoo
|
||||
|
||||
@@ -166,9 +166,9 @@
|
||||
//raises them if they are down (only if power's on)
|
||||
if(!A.locked)
|
||||
if(A.lock())
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", hearing_distance = 1)
|
||||
else if(A.unlock())
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", hearing_distance = 1)
|
||||
|
||||
if(AIRLOCK_WIRE_BACKUP_POWER1)
|
||||
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
|
||||
|
||||
@@ -29,8 +29,9 @@
|
||||
var/laname
|
||||
var/lakey
|
||||
if(H.lastattacker)
|
||||
laname = sanitizeSQL(H.lastattacker:real_name)
|
||||
lakey = sanitizeSQL(H.lastattacker:key)
|
||||
laname = sanitizeSQL(H.lastattacker)
|
||||
if(H.lastattackerckey)
|
||||
lakey = sanitizeSQL(H.lastattackerckey)
|
||||
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
|
||||
var/coord = "[H.x], [H.y], [H.z]"
|
||||
// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.getBrainLoss()], [H.getOxyLoss()])")
|
||||
@@ -64,8 +65,9 @@
|
||||
var/laname
|
||||
var/lakey
|
||||
if(H.lastattacker)
|
||||
laname = sanitizeSQL(H.lastattacker:real_name)
|
||||
lakey = sanitizeSQL(H.lastattacker:key)
|
||||
laname = sanitizeSQL(H.lastattacker)
|
||||
if(H.lastattackerckey)
|
||||
lakey = sanitizeSQL(H.lastattackerckey)
|
||||
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
|
||||
var/coord = "[H.x], [H.y], [H.z]"
|
||||
// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])")
|
||||
|
||||
@@ -70,7 +70,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
power_environ = FALSE
|
||||
valid_territory = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg')
|
||||
ambientsounds = SPACE_SOUNDS
|
||||
|
||||
/area/space/nearstation
|
||||
icon_state = "space_near"
|
||||
@@ -117,39 +117,33 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape
|
||||
name = "\improper Emergency Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle2"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
parallax_movedir = EAST
|
||||
|
||||
/area/shuttle/pod_4
|
||||
name = "\improper Escape Pod Four"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
parallax_movedir = EAST
|
||||
|
||||
/area/shuttle/escape_pod1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod1/station
|
||||
@@ -163,7 +157,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod2/station
|
||||
@@ -177,7 +170,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod3/station
|
||||
@@ -191,7 +183,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
|
||||
name = "\improper Escape Pod Five"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod5/station
|
||||
@@ -205,7 +196,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/mining
|
||||
name = "\improper Mining Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/transport
|
||||
@@ -246,7 +236,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/siberia
|
||||
name = "\improper Labor Camp Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/specops
|
||||
@@ -329,7 +318,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/research
|
||||
name = "\improper Research Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/research/station
|
||||
@@ -498,6 +486,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
nad_allowed = TRUE
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/syndicate_mothership/control
|
||||
name = "\improper Syndicate Control Room"
|
||||
@@ -519,6 +508,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
valid_territory = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/asteroid/cave // -- TLE
|
||||
name = "\improper Asteroid - Underground"
|
||||
@@ -633,7 +623,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Maintenance
|
||||
/area/maintenance
|
||||
ambientsounds = list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg')
|
||||
ambientsounds = MAINTENANCE_SOUNDS
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/maintenance/atmos_control
|
||||
@@ -803,12 +793,11 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/bridge
|
||||
name = "\improper Bridge"
|
||||
icon_state = "bridge"
|
||||
music = "signal"
|
||||
ambientsounds = list('sound/ambience/signal.ogg')
|
||||
|
||||
/area/bridge/meeting_room
|
||||
name = "\improper Heads of Staff Meeting Room"
|
||||
icon_state = "meeting"
|
||||
music = null
|
||||
|
||||
/area/crew_quarters/captain
|
||||
name = "\improper Captain's Office"
|
||||
@@ -969,10 +958,12 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "\improper Abandoned Library"
|
||||
icon_state = "library"
|
||||
|
||||
/area/chapel
|
||||
icon_state = "chapel"
|
||||
ambientsounds = HOLY_SOUNDS
|
||||
|
||||
/area/chapel/main
|
||||
name = "\improper Chapel"
|
||||
icon_state = "chapel"
|
||||
ambientsounds = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg')
|
||||
|
||||
/area/chapel/office
|
||||
name = "\improper Chapel Office"
|
||||
@@ -1107,7 +1098,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Engineering
|
||||
/area/engine
|
||||
ambientsounds = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg')
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/engine/engine_smes
|
||||
name = "\improper Engineering SMES"
|
||||
@@ -1161,6 +1152,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
valid_territory = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/solar/auxport
|
||||
name = "\improper Fore Port Solar Array"
|
||||
@@ -1227,18 +1219,17 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/teleporter
|
||||
name = "\improper Teleporter"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/gateway
|
||||
name = "\improper Gateway"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/AIsattele
|
||||
name = "\improper Abandoned Teleporter"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/signal.ogg')
|
||||
|
||||
/area/toxins/explab
|
||||
name = "\improper E.X.P.E.R.I-MENTOR Lab"
|
||||
@@ -1250,42 +1241,39 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//MedBay
|
||||
|
||||
/area/medical
|
||||
ambientsounds = MEDICAL_SOUNDS
|
||||
|
||||
/area/medical/medbay
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
//Medbay is a large area, these additional areas help level out APC load.
|
||||
/area/medical/medbay2
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay2"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/medbay3
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay3"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
|
||||
/area/medical/biostorage
|
||||
name = "\improper Medical Storage"
|
||||
icon_state = "medbaysecstorage"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/reception
|
||||
name = "\improper Medbay Reception"
|
||||
icon_state = "medbay"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/psych
|
||||
name = "\improper Psych Room"
|
||||
icon_state = "medbaypsych"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
ambientsounds = list('sound/ambience/aurora_caelus_short.ogg')
|
||||
|
||||
/area/medical/medbreak
|
||||
name = "\improper Break Room"
|
||||
icon_state = "medbaybreak"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/patients_rooms
|
||||
name = "\improper Patient's Rooms"
|
||||
@@ -1342,7 +1330,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/medical/morgue
|
||||
name = "\improper Morgue"
|
||||
icon_state = "morgue"
|
||||
ambientsounds = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg')
|
||||
ambientsounds = SPOOKY_SOUNDS
|
||||
|
||||
/area/medical/chemistry
|
||||
name = "\improper Chemistry"
|
||||
@@ -1390,6 +1378,9 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Security
|
||||
|
||||
/area/security
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/security/main
|
||||
name = "\improper Security Office"
|
||||
icon_state = "securityoffice"
|
||||
@@ -1522,6 +1513,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/security/detectives_office
|
||||
name = "\improper Detective's Office"
|
||||
icon_state = "detective"
|
||||
ambientsounds = list('sound/ambience/ambidet1.ogg', 'sound/ambience/ambidet2.ogg')
|
||||
|
||||
/area/security/range
|
||||
name = "\improper Firing Range"
|
||||
@@ -1865,84 +1857,12 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "Derelict Atmospherics"
|
||||
icon_state = "red"
|
||||
|
||||
//HALF-BUILT STATION (REPLACES DERELICT IN BAYCODE, ABOVE IS LEFT FOR DOWNSTREAM)
|
||||
|
||||
/area/shuttle/constructionsite
|
||||
name = "\improper Construction Site Shuttle"
|
||||
icon_state = "yellow"
|
||||
parallax_movedir = EAST
|
||||
|
||||
/area/shuttle/constructionsite/station
|
||||
name = "\improper Construction Site Shuttle"
|
||||
|
||||
/area/shuttle/constructionsite/site
|
||||
name = "\improper Construction Site Shuttle"
|
||||
|
||||
/area/constructionsite
|
||||
name = "\improper Construction Site"
|
||||
icon_state = "storage"
|
||||
|
||||
/area/constructionsite/storage
|
||||
name = "\improper Construction Site Storage Area"
|
||||
|
||||
/area/constructionsite/science
|
||||
name = "\improper Construction Site Research"
|
||||
icon_state = "medresearch"
|
||||
|
||||
/area/constructionsite/bridge
|
||||
name = "\improper Construction Site Bridge"
|
||||
icon_state = "bridge"
|
||||
|
||||
/area/constructionsite/hallway/center
|
||||
name = "\improper Construction Site Central Hallway"
|
||||
icon_state = "hallC"
|
||||
|
||||
/area/constructionsite/hallway/engcore
|
||||
name = "\improper Construction Site Eng Core"
|
||||
icon_state = "green"
|
||||
|
||||
/area/constructionsite/hallway/fore
|
||||
name = "\improper Construction Site Fore"
|
||||
icon_state = "green"
|
||||
|
||||
/area/constructionsite/hallway/port
|
||||
name = "\improper Construction Site Port"
|
||||
icon_state = "hallP"
|
||||
|
||||
/area/constructionsite/hallway/aft
|
||||
name = "\improper Construction Site Aft"
|
||||
icon_state = "hallA"
|
||||
|
||||
/area/constructionsite/hallway/starboard
|
||||
name = "\improper Construction Site Starboard"
|
||||
icon_state = "hallS"
|
||||
|
||||
/area/constructionsite/atmospherics
|
||||
name = "\improper Construction Site Atmospherics"
|
||||
icon_state = "atmos"
|
||||
|
||||
/area/constructionsite/medical
|
||||
name = "\improper Construction Site Medbay"
|
||||
icon_state = "medbay"
|
||||
|
||||
/area/constructionsite/ai
|
||||
name = "\improper Construction Computer Core"
|
||||
icon_state = "ai"
|
||||
|
||||
/area/constructionsite/engineering
|
||||
name = "\improper Construction Site Engine Bay"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/solar/constructionsite
|
||||
name = "\improper Construction Site Solars"
|
||||
icon_state = "panelsA"
|
||||
|
||||
|
||||
//Construction
|
||||
|
||||
/area/construction
|
||||
name = "\improper Construction Area"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/mining_construction
|
||||
name = "Auxillary Base Construction"
|
||||
@@ -2035,6 +1955,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/ai_monitored/storage/eva
|
||||
name = "EVA Storage"
|
||||
icon_state = "eva"
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/ai_monitored/storage/secure
|
||||
name = "Secure Storage"
|
||||
@@ -2045,7 +1966,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
icon_state = "storage"
|
||||
|
||||
/area/turret_protected/
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg')
|
||||
|
||||
/area/turret_protected/ai_upload
|
||||
name = "\improper AI Upload Chamber"
|
||||
@@ -2107,7 +2028,8 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
// Telecommunications Satellite
|
||||
|
||||
/area/tcommsat
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\
|
||||
'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg')
|
||||
|
||||
/area/tcommsat/chamber
|
||||
name = "\improper Telecoms Central Compartment"
|
||||
@@ -2155,6 +2077,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "\improper Strange Location"
|
||||
icon_state = "away"
|
||||
report_alerts = FALSE
|
||||
ambientsounds = AWAY_MISSION_SOUNDS
|
||||
|
||||
/area/awaymission/example
|
||||
name = "\improper Strange Station"
|
||||
@@ -2169,7 +2092,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
icon_state = "beach"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
requires_power = FALSE
|
||||
ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg')
|
||||
ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg', 'sound/ambience/seag2.ogg', 'sound/ambience/seag2.ogg', 'sound/ambience/ambiodd.ogg', 'sound/ambience/ambinice.ogg')
|
||||
|
||||
/area/awaymission/undersea
|
||||
name = "Undersea"
|
||||
|
||||
+13
-15
@@ -26,7 +26,6 @@
|
||||
var/power_equip = TRUE
|
||||
var/power_light = TRUE
|
||||
var/power_environ = TRUE
|
||||
var/music = null
|
||||
var/used_equip = FALSE
|
||||
var/used_light = FALSE
|
||||
var/used_environ = FALSE
|
||||
@@ -56,12 +55,7 @@
|
||||
var/global/global_uid = 0
|
||||
var/uid
|
||||
|
||||
var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\
|
||||
'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\
|
||||
'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\
|
||||
'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\
|
||||
'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\
|
||||
'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
var/list/ambientsounds = GENERIC_SOUNDS
|
||||
|
||||
var/fast_despawn = FALSE
|
||||
var/can_get_auto_cryod = TRUE
|
||||
@@ -379,20 +373,24 @@
|
||||
|
||||
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
|
||||
if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys
|
||||
L.client.ambience_playing = 1
|
||||
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)
|
||||
L.client.ambience_playing = TRUE
|
||||
SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = TRUE, wait = FALSE, volume = 35, channel = CHANNEL_BUZZ))
|
||||
else if(L && L.client && !(L.client.prefs.sound & SOUND_BUZZ))
|
||||
L.client.ambience_playing = 0
|
||||
L.client.ambience_playing = FALSE
|
||||
|
||||
if(prob(35) && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE))
|
||||
var/sound = pick(ambientsounds)
|
||||
|
||||
if(!L.client.played)
|
||||
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE)
|
||||
L.client.played = 1
|
||||
spawn(600) //ewww - this is very very bad
|
||||
if(L && L.client)
|
||||
L.client.played = 0
|
||||
SEND_SOUND(L, sound(sound, repeat = FALSE, wait = FALSE, volume = 25, channel = CHANNEL_AMBIENCE))
|
||||
L.client.played = TRUE
|
||||
addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600)
|
||||
|
||||
/**
|
||||
* Reset the played var to false on the client
|
||||
*/
|
||||
/client/proc/ResetAmbiencePlayed()
|
||||
played = FALSE
|
||||
|
||||
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)
|
||||
A.has_gravity = gravitystate
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
/area/mine/explored
|
||||
name = "Mine"
|
||||
icon_state = "explored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
@@ -15,7 +14,7 @@
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
flags = NONE
|
||||
|
||||
/area/mine/dangerous/explored/golem
|
||||
@@ -24,7 +23,6 @@
|
||||
/area/mine/unexplored
|
||||
name = "Mine"
|
||||
icon_state = "unexplored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
@@ -32,7 +30,7 @@
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
flags = NONE
|
||||
|
||||
/area/mine/lobby
|
||||
@@ -80,6 +78,7 @@
|
||||
/area/mine/laborcamp/security
|
||||
name = "Labor Camp Security"
|
||||
icon_state = "security"
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/mine/podbay
|
||||
name = "Mining Podbay"
|
||||
@@ -95,26 +94,24 @@
|
||||
/area/lavaland/surface
|
||||
name = "Lavaland"
|
||||
icon_state = "explored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
poweralm = FALSE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
requires_power = TRUE
|
||||
ambientsounds = list('sound/ambience/ambilava.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/lavaland/underground
|
||||
name = "Lavaland Caves"
|
||||
icon_state = "unexplored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
ambientsounds = list('sound/ambience/ambilava.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/lavaland/surface/outdoors
|
||||
name = "Lavaland Wastes"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
/area/ruin/powered/clownplanet
|
||||
icon_state = "dk_yellow"
|
||||
ambientsounds = list('sound/music/clown.ogg')
|
||||
|
||||
/area/ruin/powered/animal_hospital
|
||||
icon_state = "dk_yellow"
|
||||
@@ -38,7 +39,7 @@
|
||||
/area/ruin/unpowered/syndicate_lava_base
|
||||
name = "Secret Base"
|
||||
icon_state = "dk_yellow"
|
||||
ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg')
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
report_alerts = FALSE
|
||||
hide_attacklogs = TRUE
|
||||
|
||||
|
||||
+135
-85
@@ -14,21 +14,18 @@
|
||||
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
|
||||
var/simulated = TRUE //filter for actions - used by lighting overlays
|
||||
var/atom_say_verb = "says"
|
||||
var/dont_save = 0 // For atoms that are temporary by necessity - like lighting overlays
|
||||
|
||||
var/bubble_icon = "default" ///what icon the mob uses for speechbubbles
|
||||
var/dont_save = FALSE // For atoms that are temporary by necessity - like lighting overlays
|
||||
|
||||
///Chemistry.
|
||||
var/container_type = NONE
|
||||
var/datum/reagents/reagents = null
|
||||
|
||||
//This atom's HUD (med/sec, etc) images. Associative list.
|
||||
var/list/image/hud_list = list()
|
||||
var/list/image/hud_list
|
||||
//HUD images that this atom can provide.
|
||||
var/list/hud_possible
|
||||
|
||||
///Chemistry.
|
||||
|
||||
|
||||
//Value used to increment ex_act() if reactionary_explosions is on
|
||||
var/explosion_block = 0
|
||||
|
||||
@@ -38,9 +35,9 @@
|
||||
//Detective Work, used for allowing a given atom to leave its fibers on stuff. Allowed by default
|
||||
var/can_leave_fibers = TRUE
|
||||
|
||||
var/allow_spin = 1 //Set this to 1 for a _target_ that is being thrown at; if an atom has this set to 1 then atoms thrown AT it will not spin; currently used for the singularity. -Fox
|
||||
var/allow_spin = TRUE //Set this to 1 for a _target_ that is being thrown at; if an atom has this set to 1 then atoms thrown AT it will not spin; currently used for the singularity. -Fox
|
||||
|
||||
var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff.
|
||||
var/admin_spawned = FALSE //was this spawned by an admin? used for stat tracking stuff.
|
||||
|
||||
var/initialized = FALSE
|
||||
|
||||
@@ -67,7 +64,6 @@
|
||||
// we were deleted
|
||||
return
|
||||
|
||||
|
||||
//Called after New if the map is being loaded. mapload = TRUE
|
||||
//Called from base of New if the map is not being loaded. mapload = FALSE
|
||||
//This base must be called or derivatives must set initialized to TRUE
|
||||
@@ -101,7 +97,6 @@
|
||||
|
||||
return INITIALIZE_HINT_NORMAL
|
||||
|
||||
|
||||
//called if Initialize returns INITIALIZE_HINT_LATELOAD
|
||||
/atom/proc/LateInitialize()
|
||||
return
|
||||
@@ -114,34 +109,34 @@
|
||||
return
|
||||
|
||||
/atom/proc/onCentcom()
|
||||
. = FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return 0
|
||||
return
|
||||
|
||||
if(!is_admin_level(T.z))//if not, don't bother
|
||||
return 0
|
||||
return
|
||||
|
||||
//check for centcomm shuttles
|
||||
for(var/centcom_shuttle in list("emergency", "pod1", "pod2", "pod3", "pod4", "ferry"))
|
||||
var/obj/docking_port/mobile/M = SSshuttle.getShuttle(centcom_shuttle)
|
||||
if(T in M.areaInstance)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
//finally check for centcom itself
|
||||
return istype(T.loc,/area/centcom)
|
||||
return istype(T.loc, /area/centcom)
|
||||
|
||||
/atom/proc/onSyndieBase()
|
||||
. = FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return 0
|
||||
return
|
||||
|
||||
if(!is_admin_level(T.z))//if not, don't bother
|
||||
return 0
|
||||
return
|
||||
|
||||
if(istype(T.loc, /area/shuttle/syndicate_elite) || istype(T.loc, /area/syndicate_mothership))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
return TRUE
|
||||
|
||||
/atom/Destroy()
|
||||
if(alternate_appearances)
|
||||
@@ -164,6 +159,34 @@
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
|
||||
dir = newdir
|
||||
|
||||
/*
|
||||
Sets the atom's pixel locations based on the atom's `dir` variable, and what pixel offset arguments are passed into it
|
||||
If no arguments are supplied, `pixel_x` or `pixel_y` will be set to 0
|
||||
Used primarily for when players attach mountable frames to walls (APC frame, fire alarm frame, etc.)
|
||||
*/
|
||||
/atom/proc/set_pixel_offsets_from_dir(pixel_north = 0, pixel_south = 0, pixel_east = 0, pixel_west = 0)
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
pixel_y = pixel_north
|
||||
if(SOUTH)
|
||||
pixel_y = pixel_south
|
||||
if(EAST)
|
||||
pixel_x = pixel_east
|
||||
if(WEST)
|
||||
pixel_x = pixel_west
|
||||
if(NORTHEAST)
|
||||
pixel_y = pixel_north
|
||||
pixel_x = pixel_east
|
||||
if(NORTHWEST)
|
||||
pixel_y = pixel_north
|
||||
pixel_x = pixel_west
|
||||
if(SOUTHEAST)
|
||||
pixel_y = pixel_south
|
||||
pixel_x = pixel_east
|
||||
if(SOUTHWEST)
|
||||
pixel_y = pixel_south
|
||||
pixel_x = pixel_west
|
||||
|
||||
///Handle melee attack by a mech
|
||||
/atom/proc/mech_melee_attack(obj/mecha/M)
|
||||
return
|
||||
@@ -202,7 +225,7 @@
|
||||
else
|
||||
return null
|
||||
|
||||
/atom/proc/check_eye(user)
|
||||
/atom/proc/check_eye(mob/user)
|
||||
return
|
||||
|
||||
/atom/proc/on_reagent_change()
|
||||
@@ -217,11 +240,11 @@
|
||||
|
||||
/// Is this atom injectable into other atoms
|
||||
/atom/proc/is_injectable(mob/user, allowmobs = TRUE)
|
||||
return reagents && (container_type & (INJECTABLE | REFILLABLE))
|
||||
return reagents && (container_type & (INJECTABLE|REFILLABLE))
|
||||
|
||||
/// Can we draw from this atom with an injectable atom
|
||||
/atom/proc/is_drawable(mob/user, allowmobs = TRUE)
|
||||
return reagents && (container_type & (DRAWABLE | DRAINABLE))
|
||||
return reagents && (container_type & (DRAWABLE|DRAINABLE))
|
||||
|
||||
/// Can this atoms reagents be refilled
|
||||
/atom/proc/is_refillable()
|
||||
@@ -232,12 +255,12 @@
|
||||
return reagents && (container_type & DRAINABLE)
|
||||
|
||||
/atom/proc/CheckExit()
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/atom/proc/HasProximity(atom/movable/AM as mob|obj)
|
||||
return
|
||||
|
||||
/atom/proc/emp_act(var/severity)
|
||||
/atom/proc/emp_act(severity)
|
||||
return
|
||||
|
||||
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
|
||||
@@ -247,13 +270,13 @@
|
||||
/atom/proc/in_contents_of(container)//can take class or object instance as argument
|
||||
if(ispath(container))
|
||||
if(istype(src.loc, container))
|
||||
return 1
|
||||
return TRUE
|
||||
else if(src in container)
|
||||
return 1
|
||||
return
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/*
|
||||
* atom/proc/search_contents_for(path,list/filter_path=null)
|
||||
* atom/proc/search_contents_for(path, list/filter_path = null)
|
||||
* Recursevly searches all atom contens (including contents contents and so on).
|
||||
*
|
||||
* ARGS: path - search atom contents for atoms of this type
|
||||
@@ -262,7 +285,7 @@
|
||||
* RETURNS: list of found atoms
|
||||
*/
|
||||
|
||||
/atom/proc/search_contents_for(path,list/filter_path=null)
|
||||
/atom/proc/search_contents_for(path, list/filter_path = null)
|
||||
var/list/found = list()
|
||||
for(var/atom/A in src)
|
||||
if(istype(A, path))
|
||||
@@ -274,7 +297,7 @@
|
||||
if(!pass)
|
||||
continue
|
||||
if(A.contents.len)
|
||||
found += A.search_contents_for(path,filter_path)
|
||||
found += A.search_contents_for(path, filter_path)
|
||||
return found
|
||||
|
||||
|
||||
@@ -406,43 +429,47 @@
|
||||
/atom/proc/after_slip(mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/atom/proc/add_hiddenprint(mob/living/M as mob)
|
||||
if(isnull(M)) return
|
||||
if(isnull(M.key)) return
|
||||
/atom/proc/add_hiddenprint(mob/living/M)
|
||||
if(isnull(M))
|
||||
return
|
||||
if(isnull(M.key))
|
||||
return
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H.dna, /datum/dna))
|
||||
return 0
|
||||
return FALSE
|
||||
if(H.gloves)
|
||||
if(fingerprintslast != H.ckey)
|
||||
//Add the list if it does not exist.
|
||||
if(!fingerprintshidden)
|
||||
fingerprintshidden = list()
|
||||
fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||
fingerprintshidden += text("\[[time_stamp()]\] (Wearing gloves). Real name: [], Key: []", H.real_name, H.key)
|
||||
fingerprintslast = H.ckey
|
||||
return 0
|
||||
return FALSE
|
||||
if(!fingerprints)
|
||||
if(fingerprintslast != H.ckey)
|
||||
//Add the list if it does not exist.
|
||||
if(!fingerprintshidden)
|
||||
fingerprintshidden = list()
|
||||
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",H.real_name, H.key)
|
||||
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []", H.real_name, H.key)
|
||||
fingerprintslast = H.ckey
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
if(fingerprintslast != M.ckey)
|
||||
//Add the list if it does not exist.
|
||||
if(!fingerprintshidden)
|
||||
fingerprintshidden = list()
|
||||
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []",M.real_name, M.key)
|
||||
fingerprintshidden += text("\[[time_stamp()]\] Real name: [], Key: []", M.real_name, M.key)
|
||||
fingerprintslast = M.ckey
|
||||
return
|
||||
|
||||
|
||||
//Set ignoregloves to add prints irrespective of the mob having gloves on.
|
||||
/atom/proc/add_fingerprint(mob/living/M as mob, ignoregloves = 0)
|
||||
if(isnull(M)) return
|
||||
if(isnull(M.key)) return
|
||||
/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE)
|
||||
if(isnull(M))
|
||||
return
|
||||
if(isnull(M.key))
|
||||
return
|
||||
if(ishuman(M))
|
||||
//Add the list if it does not exist.
|
||||
if(!fingerprintshidden)
|
||||
@@ -456,7 +483,7 @@
|
||||
if(fingerprintslast != M.key)
|
||||
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
|
||||
fingerprintslast = M.key
|
||||
return 0 //Now, lets get to the dirty work.
|
||||
return FALSE //Now, lets get to the dirty work.
|
||||
//First, make sure their DNA makes sense.
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
|
||||
@@ -469,20 +496,20 @@
|
||||
if(H.gloves)
|
||||
var/obj/item/clothing/gloves/G = H.gloves
|
||||
if(G.transfer_prints)
|
||||
ignoregloves = 1
|
||||
ignoregloves = TRUE
|
||||
|
||||
//Now, deal with gloves.
|
||||
if(!ignoregloves)
|
||||
if(H.gloves && H.gloves != src)
|
||||
if(fingerprintslast != H.ckey)
|
||||
fingerprintshidden += text("\[[]\](Wearing gloves). Real name: [], Key: []",time_stamp(), H.real_name, H.key)
|
||||
fingerprintshidden += text("\[[]\](Wearing gloves). Real name: [], Key: []", time_stamp(), H.real_name, H.key)
|
||||
fingerprintslast = H.ckey
|
||||
H.gloves.add_fingerprint(M)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
//More adminstuffz
|
||||
if(fingerprintslast != H.ckey)
|
||||
fingerprintshidden += text("\[[]\]Real name: [], Key: []",time_stamp(), H.real_name, H.key)
|
||||
fingerprintshidden += text("\[[]\]Real name: [], Key: []", time_stamp(), H.real_name, H.key)
|
||||
fingerprintslast = H.ckey
|
||||
|
||||
//Make the list if it does not exist.
|
||||
@@ -495,18 +522,16 @@
|
||||
// Add the fingerprints
|
||||
fingerprints[full_print] = full_print
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
else
|
||||
//Smudge up dem prints some
|
||||
if(fingerprintslast != M.ckey)
|
||||
fingerprintshidden += text("\[[]\]Real name: [], Key: []",time_stamp(), M.real_name, M.key)
|
||||
fingerprintshidden += text("\[[]\]Real name: [], Key: []", time_stamp(), M.real_name, M.key)
|
||||
fingerprintslast = M.ckey
|
||||
|
||||
return
|
||||
|
||||
|
||||
/atom/proc/transfer_fingerprints_to(var/atom/A)
|
||||
|
||||
/atom/proc/transfer_fingerprints_to(atom/A)
|
||||
// Make sure everything are lists.
|
||||
if(!islist(A.fingerprints))
|
||||
A.fingerprints = list()
|
||||
@@ -553,7 +578,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
/atom/proc/transfer_mob_blood_dna(mob/living/L)
|
||||
var/new_blood_dna = L.get_blood_dna_list()
|
||||
if(!new_blood_dna)
|
||||
return 0
|
||||
return FALSE
|
||||
return transfer_blood_dna(new_blood_dna)
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter/transfer_mob_blood_dna(mob/living/L)
|
||||
@@ -581,14 +606,13 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
var/old_length = blood_DNA.len
|
||||
blood_DNA |= blood_dna
|
||||
if(blood_DNA.len > old_length)
|
||||
return 1//some new blood DNA was added
|
||||
|
||||
return TRUE//some new blood DNA was added
|
||||
|
||||
//to add blood from a mob onto something, and transfer their dna info
|
||||
/atom/proc/add_mob_blood(mob/living/M)
|
||||
var/list/blood_dna = M.get_blood_dna_list()
|
||||
if(!blood_dna)
|
||||
return 0
|
||||
return FALSE
|
||||
var/bloodcolor = "#A10808"
|
||||
var/list/b_data = M.get_blood_data(M.get_blood_id())
|
||||
if(b_data)
|
||||
@@ -598,7 +622,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
|
||||
//to add blood onto something, with blood dna info to include.
|
||||
/atom/proc/add_blood(list/blood_dna, color)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/add_blood(list/blood_dna, color)
|
||||
return transfer_blood_dna(blood_dna)
|
||||
@@ -606,10 +630,10 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
/obj/item/add_blood(list/blood_dna, color)
|
||||
var/blood_count = !blood_DNA ? 0 : blood_DNA.len
|
||||
if(!..())
|
||||
return 0
|
||||
return FALSE
|
||||
if(!blood_count)//apply the blood-splatter overlay if it isn't already in there
|
||||
add_blood_overlay(color)
|
||||
return 1 //we applied blood to the item
|
||||
return TRUE //we applied blood to the item
|
||||
|
||||
/obj/item/clothing/gloves/add_blood(list/blood_dna, color)
|
||||
. = ..()
|
||||
@@ -621,7 +645,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(src)
|
||||
B.transfer_blood_dna(blood_dna) //give blood info to the blood decal.
|
||||
B.basecolor = color
|
||||
return 1 //we bloodied the floor
|
||||
return TRUE //we bloodied the floor
|
||||
|
||||
/mob/living/carbon/human/add_blood(list/blood_dna, color)
|
||||
if(wear_suit)
|
||||
@@ -652,7 +676,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
verbs += /mob/living/carbon/human/proc/bloody_doodle
|
||||
|
||||
update_inv_gloves() //handles bloody hands overlays and updating
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/proc/add_blood_overlay(color)
|
||||
if(initial(icon) && initial(icon_state))
|
||||
@@ -690,7 +714,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
if(.)
|
||||
transfer_blood = 0
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/clean_blood()
|
||||
..()
|
||||
bloody_shoes = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0)
|
||||
@@ -699,23 +722,42 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
var/mob/M = loc
|
||||
M.update_inv_shoes()
|
||||
|
||||
|
||||
/mob/living/carbon/human/clean_blood()
|
||||
if(gloves)
|
||||
/mob/living/carbon/human/clean_blood(clean_hands = TRUE, clean_mask = TRUE, clean_feet = TRUE)
|
||||
if(w_uniform && !(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
if(w_uniform.clean_blood())
|
||||
update_inv_w_uniform()
|
||||
if(gloves && !(wear_suit && wear_suit.flags_inv & HIDEGLOVES))
|
||||
if(gloves.clean_blood())
|
||||
clean_blood()
|
||||
update_inv_gloves()
|
||||
gloves.germ_level = 0
|
||||
else
|
||||
..() // Clear the Blood_DNA list
|
||||
if(bloody_hands)
|
||||
bloody_hands = 0
|
||||
update_inv_gloves()
|
||||
gloves.germ_level = 0
|
||||
clean_hands = FALSE
|
||||
if(shoes && !(wear_suit && wear_suit.flags_inv & HIDESHOES))
|
||||
if(shoes.clean_blood())
|
||||
update_inv_shoes()
|
||||
clean_feet = FALSE
|
||||
if(s_store && !(wear_suit && wear_suit.flags_inv & HIDESUITSTORAGE))
|
||||
if(s_store.clean_blood())
|
||||
update_inv_s_store()
|
||||
if(lip_style && !(head && head.flags_inv & HIDEMASK))
|
||||
lip_style = null
|
||||
update_body()
|
||||
if(glasses && !(wear_mask && wear_mask.flags_inv & HIDEEYES))
|
||||
if(glasses.clean_blood())
|
||||
update_inv_glasses()
|
||||
if(l_ear && !(wear_mask && wear_mask.flags_inv & HIDEEARS))
|
||||
if(l_ear.clean_blood())
|
||||
update_inv_ears()
|
||||
if(r_ear && !(wear_mask && wear_mask.flags_inv & HIDEEARS))
|
||||
if(r_ear.clean_blood())
|
||||
update_inv_ears()
|
||||
if(belt)
|
||||
if(belt.clean_blood())
|
||||
update_inv_belt()
|
||||
..(clean_hands, clean_mask, clean_feet)
|
||||
update_icons() //apply the now updated overlays to the mob
|
||||
|
||||
|
||||
/atom/proc/add_vomit_floor(toxvomit = 0, green = FALSE)
|
||||
playsound(src, 'sound/effects/splat.ogg', 50, 1)
|
||||
/atom/proc/add_vomit_floor(toxvomit = FALSE, green = FALSE)
|
||||
playsound(src, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
if(!isspaceturf(src))
|
||||
var/type = green ? /obj/effect/decal/cleanable/vomit/green : /obj/effect/decal/cleanable/vomit
|
||||
var/vomit_reagent = green ? "green_vomit" : "vomit"
|
||||
@@ -728,23 +770,24 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
|
||||
// Make toxins vomit look different
|
||||
if(toxvomit)
|
||||
this.icon_state = "vomittox_[pick(1,4)]"
|
||||
this.icon_state = "vomittox_[pick(1, 4)]"
|
||||
|
||||
/atom/proc/get_global_map_pos()
|
||||
if(!islist(GLOB.global_map) || isemptylist(GLOB.global_map)) return
|
||||
if(!islist(GLOB.global_map) || isemptylist(GLOB.global_map))
|
||||
return
|
||||
var/cur_x = null
|
||||
var/cur_y = null
|
||||
var/list/y_arr = null
|
||||
for(cur_x=1,cur_x<=GLOB.global_map.len,cur_x++)
|
||||
for(cur_x in 1 to GLOB.global_map.len)
|
||||
y_arr = GLOB.global_map[cur_x]
|
||||
cur_y = y_arr.Find(src.z)
|
||||
if(cur_y)
|
||||
break
|
||||
// to_chat(world, "X = [cur_x]; Y = [cur_y]")
|
||||
if(cur_x && cur_y)
|
||||
return list("x"=cur_x,"y"=cur_y)
|
||||
return list("x" = cur_x, "y" = cur_y)
|
||||
else
|
||||
return 0
|
||||
return null
|
||||
|
||||
// Used to provide overlays when using this atom as a viewing focus
|
||||
// (cameras, locker tint, etc.)
|
||||
@@ -757,7 +800,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
return
|
||||
|
||||
/atom/proc/checkpass(passflag)
|
||||
return pass_flags&passflag
|
||||
return pass_flags & passflag
|
||||
|
||||
/atom/proc/isinspace()
|
||||
if(isspaceturf(get_turf(src)))
|
||||
@@ -798,9 +841,18 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
/atom/proc/atom_say(message)
|
||||
if(!message)
|
||||
return
|
||||
audible_message("<span class='game say'><span class='name'>[src]</span> [atom_say_verb], \"[message]\"</span>")
|
||||
var/list/speech_bubble_hearers = list()
|
||||
for(var/mob/M in get_mobs_in_view(7, src))
|
||||
M.show_message("<span class='game say'><span class='name'>[src]</span> [atom_say_verb], \"[message]\"</span>", 2, null, 1)
|
||||
if(M.client)
|
||||
speech_bubble_hearers += M.client
|
||||
|
||||
/atom/proc/speech_bubble(var/bubble_state = "",var/bubble_loc = src, var/list/bubble_recipients = list())
|
||||
if(length(speech_bubble_hearers))
|
||||
var/image/I = image('icons/mob/talk.dmi', src, "[bubble_icon][say_test(message)]", FLY_LAYER)
|
||||
I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
|
||||
INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, speech_bubble_hearers, 30)
|
||||
|
||||
/atom/proc/speech_bubble(bubble_state = "", bubble_loc = src, list/bubble_recipients = list())
|
||||
return
|
||||
|
||||
/atom/vv_edit_var(var_name, var_value)
|
||||
@@ -857,7 +909,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
atom_colours[colour_priority] = coloration
|
||||
update_atom_colour()
|
||||
|
||||
|
||||
/*
|
||||
Removes an instance of colour_type from the atom's atom_colours list
|
||||
*/
|
||||
@@ -872,7 +923,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
atom_colours[colour_priority] = null
|
||||
update_atom_colour()
|
||||
|
||||
|
||||
/*
|
||||
Resets the atom's color to null, and then sets it to the highest priority
|
||||
colour available
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user