mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 16:13:19 +01:00
Merge branch 'master' into overhaul-event-mob-selection
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
# GitHub action to autorender nanomaps outside the game
|
||||
# This kills off the awful verb we have that takes a full 50 seconds and hangs the whole server
|
||||
# The file names and locations are VERY important here
|
||||
# DO NOT EDIT THIS UNLESS YOU KNOW WHAT YOU ARE DOING
|
||||
# -aa
|
||||
name: 'Render Nanomaps'
|
||||
on:
|
||||
push:
|
||||
branches: master
|
||||
paths:
|
||||
- '_maps/map_files/**'
|
||||
|
||||
jobs:
|
||||
generate_maps:
|
||||
name: 'Generate NanoMaps'
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- name: 'Update Branch'
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: 'Generate Maps'
|
||||
run: './tools/github-actions/nanomap-renderer-invoker.sh'
|
||||
|
||||
- name: 'Commit Maps'
|
||||
run: |
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "NanoMap Generation"
|
||||
git pull origin master
|
||||
git commit -m "NanoMap Auto-Update (`date`)" -a || true
|
||||
- name: 'Push Maps'
|
||||
uses: ad-m/github-push-action@master
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -3,6 +3,7 @@
|
||||
[](http://isitmaintained.com/project/paradisess13/paradise "Average time to resolve an issue")
|
||||
[](http://isitmaintained.com/project/paradisess13/paradise "Percentage of issues still open")
|
||||
[](http://www.krihelinator.xyz)
|
||||

|
||||
|
||||
[](http://forthebadge.com)
|
||||
[](http://forthebadge.com)
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#define ORE_LEVEL "Mining"
|
||||
// Levels the AI can control bots on
|
||||
#define AI_OK "AI Allowed"
|
||||
/// Ruins will spawn on this z-level
|
||||
#define SPAWN_RUINS "Spawn Ruins"
|
||||
|
||||
// Level names
|
||||
#define MAIN_STATION "Main Station"
|
||||
|
||||
+3
-15
@@ -5,31 +5,19 @@ Old code checked for the number of the z-level (for example whether there are an
|
||||
currently it should check for the define (for example whether there are any revheads on any z-levels defined as STATION_LEVEL).
|
||||
z1 = station
|
||||
z2 = centcomm
|
||||
z3 = telecommunications center
|
||||
z4 = engineering ship
|
||||
z5 = mining
|
||||
z6 = russian derelict
|
||||
z7 = empty
|
||||
z3 = engineering stuff (called Z4, dont question it)
|
||||
z4 = lavaland
|
||||
*/
|
||||
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
#include "map_files\cyberiad\cyberiad.dmm"
|
||||
#include "map_files\cyberiad\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.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"
|
||||
|
||||
#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)),\
|
||||
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_2, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)))
|
||||
#define USING_MAP_DATUM /datum/map/cyberiad
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
+3
-14
@@ -5,11 +5,8 @@ Old code checked for the number of the z-level (for example whether there are an
|
||||
currently it should check for the define (for example whether there are any revheads on any z-levels defined as STATION_LEVEL).
|
||||
z1 = station
|
||||
z2 = centcomm
|
||||
z3 = telecommunications center
|
||||
z4 = engineering ship
|
||||
z5 = mining
|
||||
z6 = russian derelict
|
||||
z7 = empty
|
||||
z3 = space (empty)
|
||||
z4 = lavaland
|
||||
|
||||
Original design by Okand37 of TG Station
|
||||
Lovingly ported by Purpose2 to Paradise
|
||||
@@ -18,22 +15,14 @@ Lovingly ported by Purpose2 to Paradise
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
#include "map_files\delta\delta.dmm"
|
||||
#include "map_files\cyberiad\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.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"
|
||||
|
||||
#define MAP_FILE "delta.dmm"
|
||||
#define MAP_NAME "Kerberos"
|
||||
#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)),\
|
||||
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_2, CROSSLINKED, list(REACHABLE)))
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)))
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/delta
|
||||
|
||||
|
||||
+472
-1085
File diff suppressed because it is too large
Load Diff
@@ -12820,7 +12820,7 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/chickenstatue,
|
||||
/obj/structure/statue/chickenstatue,
|
||||
/turf/simulated/floor/wood,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"awO" = (
|
||||
@@ -12828,7 +12828,7 @@
|
||||
/turf/simulated/floor/wood,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"awP" = (
|
||||
/obj/structure/chickenstatue,
|
||||
/obj/structure/statue/chickenstatue,
|
||||
/turf/simulated/floor/wood,
|
||||
/area/crew_quarters/mrchangs)
|
||||
"awQ" = (
|
||||
@@ -58653,7 +58653,7 @@
|
||||
},
|
||||
/area/crew_quarters/kitchen)
|
||||
"bXn" = (
|
||||
/obj/machinery/icecream_vat,
|
||||
/obj/machinery/icemachine,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
|
||||
dir = 10
|
||||
},
|
||||
@@ -96666,6 +96666,15 @@
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"sDC" = (
|
||||
/obj/docking_port/stationary/whiteship{
|
||||
dir = 8;
|
||||
icon_state = "pinonfar";
|
||||
id = "whiteship_cerebron";
|
||||
name = "North of Cerebron"
|
||||
},
|
||||
/turf/space,
|
||||
/area/space)
|
||||
"sJe" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
@@ -128710,7 +128719,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
sDC
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"av" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aw" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -133,7 +133,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"ax" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -143,7 +143,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"ay" = (
|
||||
/obj/structure/stone_tile,
|
||||
@@ -157,7 +157,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"az" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -214,7 +214,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aH" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked,
|
||||
@@ -251,7 +251,7 @@
|
||||
},
|
||||
/obj/structure/stone_tile,
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aM" = (
|
||||
/obj/structure/stone_tile/cracked{
|
||||
@@ -307,7 +307,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aT" = (
|
||||
/obj/structure/stone_tile/block/cracked{
|
||||
@@ -333,7 +333,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"aY" = (
|
||||
/obj/structure/stone_tile,
|
||||
@@ -381,7 +381,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bd" = (
|
||||
/obj/structure/stone_tile/surrounding_tile/cracked{
|
||||
@@ -421,7 +421,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/stone_tile,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bh" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -519,7 +519,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bq" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -529,11 +529,11 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"br" = (
|
||||
/obj/structure/stone_tile/slab/cracked,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bs" = (
|
||||
/obj/structure/stone_tile/block/cracked{
|
||||
@@ -544,7 +544,7 @@
|
||||
},
|
||||
/obj/structure/stone_tile,
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bt" = (
|
||||
/obj/structure/stone_tile,
|
||||
@@ -558,7 +558,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bv" = (
|
||||
/obj/structure/stone_tile/cracked{
|
||||
@@ -632,7 +632,7 @@
|
||||
/obj/structure/stone_tile/block/cracked{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bC" = (
|
||||
/obj/structure/stone_tile/block/cracked{
|
||||
@@ -672,7 +672,7 @@
|
||||
},
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/turf/simulated/floor/indestructible/boss/air,
|
||||
/turf/simulated/floor/indestructible/boss,
|
||||
/area/ruin/unpowered/ash_walkers)
|
||||
"bI" = (
|
||||
/obj/structure/stone_tile/slab/cracked,
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
/area/ruin/unpowered)
|
||||
"p" = (
|
||||
/obj/machinery/door/airlock/hatch,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/unpowered)
|
||||
"q" = (
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
/area/ruin/powered/pride)
|
||||
"Y" = (
|
||||
/obj/machinery/door/airlock/diamond,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/simulated/floor/mineral/silver{
|
||||
blocks_air = 1
|
||||
},
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
/area/ruin/unpowered)
|
||||
"e" = (
|
||||
/obj/machinery/door/airlock/wood,
|
||||
/obj/structure/fans/tiny/invisible,
|
||||
/turf/simulated/floor/sepia{
|
||||
blocks_air = 0;
|
||||
slowdown = 10
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
"t" = (
|
||||
/obj/machinery/door/airlock/survival_pod/glass,
|
||||
/obj/effect/decal/cleanable/blood/tracks,
|
||||
/obj/structure/fans/tiny,
|
||||
/turf/simulated/floor/pod/dark,
|
||||
/area/ruin/powered)
|
||||
"v" = (
|
||||
|
||||
@@ -0,0 +1,311 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/simulated/wall/r_wall,
|
||||
/area/AIsattele)
|
||||
"c" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"d" = (
|
||||
/obj/structure/computerframe,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"e" = (
|
||||
/obj/machinery/teleport/station,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"f" = (
|
||||
/obj/machinery/teleport/hub,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"g" = (
|
||||
/obj/item/shard{
|
||||
icon_state = "medium"
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"h" = (
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"i" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/clothing/gloves/color/yellow,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"j" = (
|
||||
/obj/effect/spawner/window/reinforced{
|
||||
useFull = 0
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"k" = (
|
||||
/obj/item/stock_parts/cell,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"l" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"m" = (
|
||||
/obj/effect/decal/cleanable/blood/gibs/robot,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"n" = (
|
||||
/obj/machinery/atmospherics/unary/tank/oxygen_agent_b,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"o" = (
|
||||
/obj/machinery/door/airlock/external,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"p" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/flashlight,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"q" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/item/radio/beacon,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"r" = (
|
||||
/obj/machinery/atmospherics/unary/portables_connector{
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"s" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"t" = (
|
||||
/obj/effect/decal/cleanable/blood/old,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"u" = (
|
||||
/obj/effect/decal/cleanable/blood/oil,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"v" = (
|
||||
/obj/item/shard,
|
||||
/obj/item/apc_electronics,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"w" = (
|
||||
/obj/structure/closet,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"x" = (
|
||||
/obj/item/storage/toolbox/electrical{
|
||||
pixel_x = 1;
|
||||
pixel_y = -1
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"y" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/aicard,
|
||||
/obj/item/multitool,
|
||||
/obj/item/weldingtool,
|
||||
/obj/item/wrench,
|
||||
/obj/item/circuitboard/teleporter,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"z" = (
|
||||
/obj/structure/reagent_dispensers/fueltank,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
"A" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/AIsattele)
|
||||
"B" = (
|
||||
/obj/structure/girder,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/AIsattele)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
c
|
||||
a
|
||||
c
|
||||
a
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
c
|
||||
j
|
||||
o
|
||||
j
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
c
|
||||
c
|
||||
j
|
||||
h
|
||||
j
|
||||
c
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
c
|
||||
b
|
||||
b
|
||||
o
|
||||
b
|
||||
b
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
h
|
||||
h
|
||||
s
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
b
|
||||
b
|
||||
g
|
||||
k
|
||||
p
|
||||
t
|
||||
h
|
||||
b
|
||||
b
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
b
|
||||
d
|
||||
h
|
||||
l
|
||||
m
|
||||
h
|
||||
h
|
||||
y
|
||||
b
|
||||
c
|
||||
c
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
b
|
||||
e
|
||||
h
|
||||
h
|
||||
q
|
||||
u
|
||||
l
|
||||
h
|
||||
A
|
||||
c
|
||||
a
|
||||
c
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
b
|
||||
f
|
||||
h
|
||||
m
|
||||
h
|
||||
h
|
||||
h
|
||||
z
|
||||
h
|
||||
a
|
||||
a
|
||||
c
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
b
|
||||
b
|
||||
i
|
||||
l
|
||||
h
|
||||
v
|
||||
x
|
||||
b
|
||||
B
|
||||
c
|
||||
a
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
c
|
||||
b
|
||||
b
|
||||
n
|
||||
r
|
||||
w
|
||||
b
|
||||
b
|
||||
c
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,918 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/template_noop,
|
||||
/turf/simulated/shuttle/wall{
|
||||
dir = 2;
|
||||
icon_state = "swall_f6";
|
||||
tag = "icon-swall_f6"
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"c" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
tag = "icon-heater (NORTH)";
|
||||
icon_state = "heater";
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/space/nearstation)
|
||||
"d" = (
|
||||
/turf/template_noop,
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall_f10";
|
||||
icon_state = "swall_f10";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"e" = (
|
||||
/obj/machinery/door/unpowered/shuttle,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"f" = (
|
||||
/obj/item/broken_bottle,
|
||||
/obj/effect/mob_spawn/human/mime/corpse,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"g" = (
|
||||
/obj/item/shard,
|
||||
/obj/effect/mob_spawn/human/mime/corpse,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"h" = (
|
||||
/obj/item/shard{
|
||||
icon_state = "medium"
|
||||
},
|
||||
/obj/effect/mob_spawn/human/mime/corpse,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"i" = (
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall11";
|
||||
icon_state = "swall11";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"j" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"k" = (
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"l" = (
|
||||
/turf/simulated/shuttle/wall{
|
||||
icon_state = "swall7";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"m" = (
|
||||
/turf/simulated/mineral,
|
||||
/area/space/nearstation)
|
||||
"n" = (
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/area/space/nearstation)
|
||||
"o" = (
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/turf/simulated/shuttle/wall{
|
||||
icon_state = "swall_f5";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"p" = (
|
||||
/obj/item/shard{
|
||||
icon_state = "small"
|
||||
},
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/area/space/nearstation)
|
||||
"q" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/obj/item/stack/ore/tranquillite,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"r" = (
|
||||
/turf/template_noop,
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall_f9";
|
||||
icon_state = "swall_f9";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"s" = (
|
||||
/obj/item/shard,
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/area/space/nearstation)
|
||||
"t" = (
|
||||
/obj/effect/mob_spawn/human/mime/corpse{
|
||||
name = "Mime Pilot"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"u" = (
|
||||
/turf/simulated/shuttle/wall{
|
||||
icon_state = "swall3";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"v" = (
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall12";
|
||||
icon_state = "swall12";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"w" = (
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall_f9";
|
||||
icon_state = "swall_f9";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"x" = (
|
||||
/obj/effect/mob_spawn/human/clown/corpse,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"y" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"z" = (
|
||||
/obj/structure/closet/crate{
|
||||
icon_state = "crateopen";
|
||||
opened = 1
|
||||
},
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/grenade/bananade,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"A" = (
|
||||
/obj/structure/shuttle/engine/heater{
|
||||
tag = "icon-heater (EAST)";
|
||||
icon_state = "heater";
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/space/nearstation)
|
||||
"B" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4;
|
||||
icon_state = "propulsion_l";
|
||||
tag = "icon-propulsion_l (WEST)"
|
||||
},
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4;
|
||||
icon_state = "burst_r";
|
||||
tag = "icon-burst_r (WEST)"
|
||||
},
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/space/nearstation)
|
||||
"C" = (
|
||||
/obj/effect/mob_spawn/human/corpse/clownmili,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"D" = (
|
||||
/obj/item/stack/ore/bananium,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"E" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4;
|
||||
icon_state = "propulsion_l";
|
||||
tag = "icon-propulsion_l (WEST)"
|
||||
},
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/space/nearstation)
|
||||
"F" = (
|
||||
/obj/structure/computerframe/HONKputer,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"G" = (
|
||||
/obj/item/shard{
|
||||
icon_state = "medium"
|
||||
},
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plating/asteroid/airless,
|
||||
/area/space/nearstation)
|
||||
"H" = (
|
||||
/obj/effect/mob_spawn/human/clown/corpse{
|
||||
name = "Clown Pilot"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"I" = (
|
||||
/obj/item/paper/clownship,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"J" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"K" = (
|
||||
/obj/item/shard,
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"L" = (
|
||||
/obj/item/shard{
|
||||
icon_state = "medium"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"M" = (
|
||||
/turf/simulated/mineral/random/labormineral,
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall_f5";
|
||||
icon_state = "swall_f5";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"N" = (
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall_f10";
|
||||
icon_state = "swall_f10";
|
||||
dir = 2
|
||||
},
|
||||
/area/space/nearstation)
|
||||
"O" = (
|
||||
/obj/effect/mob_spawn/human/corpse/clownoff,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"P" = (
|
||||
/obj/item/pickaxe,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"Q" = (
|
||||
/obj/structure/closet/crate,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/obj/item/stack/ore/bananium,
|
||||
/turf/simulated/floor/plasteel/airless,
|
||||
/area/space/nearstation)
|
||||
"R" = (
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4;
|
||||
icon_state = "propulsion_l";
|
||||
tag = "icon-propulsion_l (WEST)"
|
||||
},
|
||||
/obj/structure/shuttle/engine/propulsion{
|
||||
dir = 4;
|
||||
icon_state = "propulsion_l";
|
||||
tag = "icon-propulsion_l (WEST)"
|
||||
},
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/space/nearstation)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
n
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
o
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
b
|
||||
e
|
||||
i
|
||||
i
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
n
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
c
|
||||
f
|
||||
j
|
||||
p
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
n
|
||||
n
|
||||
a
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
c
|
||||
g
|
||||
k
|
||||
q
|
||||
s
|
||||
n
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
n
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
c
|
||||
h
|
||||
j
|
||||
q
|
||||
t
|
||||
n
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
d
|
||||
e
|
||||
l
|
||||
l
|
||||
u
|
||||
m
|
||||
m
|
||||
n
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
m
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
a
|
||||
d
|
||||
r
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
n
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
m
|
||||
m
|
||||
J
|
||||
M
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
m
|
||||
F
|
||||
k
|
||||
v
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
m
|
||||
m
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
w
|
||||
m
|
||||
G
|
||||
K
|
||||
N
|
||||
M
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
m
|
||||
m
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
n
|
||||
p
|
||||
H
|
||||
k
|
||||
O
|
||||
v
|
||||
m
|
||||
m
|
||||
m
|
||||
n
|
||||
n
|
||||
n
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
x
|
||||
C
|
||||
k
|
||||
L
|
||||
P
|
||||
v
|
||||
m
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
k
|
||||
k
|
||||
I
|
||||
k
|
||||
k
|
||||
e
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(22,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
k
|
||||
k
|
||||
D
|
||||
x
|
||||
k
|
||||
e
|
||||
m
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(23,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
y
|
||||
k
|
||||
k
|
||||
k
|
||||
Q
|
||||
v
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(24,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
y
|
||||
k
|
||||
D
|
||||
k
|
||||
y
|
||||
v
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(25,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
z
|
||||
D
|
||||
k
|
||||
k
|
||||
y
|
||||
v
|
||||
m
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(26,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
v
|
||||
k
|
||||
k
|
||||
D
|
||||
D
|
||||
k
|
||||
v
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(27,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
d
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
A
|
||||
r
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(28,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
B
|
||||
E
|
||||
E
|
||||
E
|
||||
R
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,386 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/turf/simulated/mineral,
|
||||
/area/space/nearstation)
|
||||
"c" = (
|
||||
/obj/machinery/floodlight{
|
||||
in_use = 1
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"d" = (
|
||||
/obj/structure/closet/crate,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"e" = (
|
||||
/obj/structure/closet,
|
||||
/obj/item/clothing/head/bio_hood,
|
||||
/obj/item/clothing/suit/bio_suit,
|
||||
/obj/item/clothing/gloves/color/black,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"f" = (
|
||||
/obj/effect/decal/cleanable/blood/drip,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"g" = (
|
||||
/obj/effect/decal/cleanable/blood,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"h" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Crackden Airlock"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"i" = (
|
||||
/obj/item/grenade/chem_grenade/drugs,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"j" = (
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"k" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Plain Airlock"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"l" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/reagent_containers/food/snacks/chips,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"m" = (
|
||||
/obj/item/ammo_casing{
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"n" = (
|
||||
/obj/effect/decal/cleanable/blood/oil,
|
||||
/obj/item/ammo_casing{
|
||||
pixel_x = -4;
|
||||
pixel_y = -6
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"o" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/reagent_containers/glass/beaker/drugs/meth,
|
||||
/obj/item/reagent_containers/glass/beaker/drugs/meth,
|
||||
/obj/item/reagent_containers/glass/beaker/drugs/meth,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"p" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "0-2";
|
||||
pixel_y = 1;
|
||||
d2 = 2
|
||||
},
|
||||
/obj/machinery/power/apc{
|
||||
dir = 4;
|
||||
layer = 5;
|
||||
name = "east bump";
|
||||
pixel_x = 24
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"q" = (
|
||||
/obj/machinery/floodlight,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"r" = (
|
||||
/obj/machinery/chem_master,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"s" = (
|
||||
/obj/effect/decal/cleanable/blood/oil,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"t" = (
|
||||
/obj/machinery/power/port_gen/pacman,
|
||||
/obj/structure/cable,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"u" = (
|
||||
/obj/machinery/chem_dispenser,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"v" = (
|
||||
/obj/structure/chair,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"w" = (
|
||||
/obj/machinery/chem_heater,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"x" = (
|
||||
/obj/machinery/portable_atmospherics/canister/air,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
"y" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/kitchen_machine/microwave,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/exploration/methlab)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
l
|
||||
o
|
||||
r
|
||||
u
|
||||
w
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
i
|
||||
j
|
||||
j
|
||||
v
|
||||
j
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
d
|
||||
j
|
||||
j
|
||||
s
|
||||
j
|
||||
j
|
||||
y
|
||||
b
|
||||
b
|
||||
b
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
e
|
||||
j
|
||||
p
|
||||
t
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
f
|
||||
m
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
f
|
||||
n
|
||||
j
|
||||
i
|
||||
j
|
||||
x
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
g
|
||||
i
|
||||
j
|
||||
j
|
||||
j
|
||||
x
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
h
|
||||
b
|
||||
q
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
i
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
j
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
k
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,473 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/turf/template_noop,
|
||||
/area/template_noop)
|
||||
"b" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"c" = (
|
||||
/obj/item/stack/cable_coil/cut{
|
||||
amount = 1
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"d" = (
|
||||
/obj/item/shard,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"e" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/item/shard{
|
||||
icon_state = "small"
|
||||
},
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"f" = (
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"g" = (
|
||||
/turf/simulated/wall,
|
||||
/area/derelict/teleporter)
|
||||
"h" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 5;
|
||||
max_integrity = 1e+007
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"i" = (
|
||||
/obj/structure/grille{
|
||||
density = 0;
|
||||
icon_state = "brokengrille"
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"j" = (
|
||||
/turf/simulated/wall/rust,
|
||||
/area/derelict/teleporter)
|
||||
"k" = (
|
||||
/obj/structure/girder,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"l" = (
|
||||
/obj/item/rack_parts,
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"m" = (
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"n" = (
|
||||
/obj/effect/landmark/damageturf,
|
||||
/obj/item/shard{
|
||||
icon_state = "small"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"o" = (
|
||||
/obj/machinery/light_construct/small{
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/landmark/damageturf,
|
||||
/obj/structure/filingcabinet/chestdrawer,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
dir = 8;
|
||||
icon_state = "green"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"p" = (
|
||||
/obj/machinery/light_construct/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/atmospherics/unary/portables_connector{
|
||||
layer = 2
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"q" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/clipboard,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
dir = 8;
|
||||
icon_state = "green"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"r" = (
|
||||
/obj/machinery/computer/teleporter,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"s" = (
|
||||
/obj/machinery/teleport/station,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"t" = (
|
||||
/obj/machinery/teleport/hub,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"u" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/visible{
|
||||
dir = 5
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"v" = (
|
||||
/obj/structure/door_assembly/door_assembly_ext{
|
||||
name = "Broken External Airlock"
|
||||
},
|
||||
/turf/simulated/floor/plating/airless,
|
||||
/area/derelict/teleporter)
|
||||
"w" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/template_noop,
|
||||
/area/space/nearstation)
|
||||
"x" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/stock_parts/cell{
|
||||
charge = 100;
|
||||
maxcharge = 15000
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
dir = 8;
|
||||
icon_state = "green"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"y" = (
|
||||
/obj/effect/landmark/damageturf,
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"z" = (
|
||||
/obj/effect/landmark/damageturf,
|
||||
/obj/item/twohanded/required/kirbyplants/dead{
|
||||
desc = "A dead potted plant. Must have died from lack of EVA equipment.";
|
||||
item_state = "plant-dead";
|
||||
name = "potted plant"
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
dir = 6;
|
||||
icon_state = "green"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
"A" = (
|
||||
/obj/structure/sign/vacuum,
|
||||
/turf/simulated/wall,
|
||||
/area/derelict/teleporter)
|
||||
"B" = (
|
||||
/obj/machinery/power/apc/noalarm{
|
||||
dir = 0;
|
||||
name = "Worn-out APC";
|
||||
pixel_y = -24
|
||||
},
|
||||
/turf/simulated/floor/plasteel/airless{
|
||||
icon_state = "floorgrime"
|
||||
},
|
||||
/area/derelict/teleporter)
|
||||
|
||||
(1,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
g
|
||||
h
|
||||
h
|
||||
h
|
||||
g
|
||||
a
|
||||
"}
|
||||
(6,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
g
|
||||
g
|
||||
o
|
||||
q
|
||||
x
|
||||
j
|
||||
g
|
||||
"}
|
||||
(7,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
e
|
||||
b
|
||||
g
|
||||
l
|
||||
m
|
||||
m
|
||||
y
|
||||
f
|
||||
g
|
||||
"}
|
||||
(8,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
f
|
||||
h
|
||||
f
|
||||
m
|
||||
r
|
||||
f
|
||||
B
|
||||
g
|
||||
"}
|
||||
(9,1,1) = {"
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
f
|
||||
i
|
||||
m
|
||||
m
|
||||
s
|
||||
m
|
||||
m
|
||||
g
|
||||
"}
|
||||
(10,1,1) = {"
|
||||
a
|
||||
d
|
||||
b
|
||||
b
|
||||
f
|
||||
i
|
||||
n
|
||||
m
|
||||
t
|
||||
m
|
||||
m
|
||||
g
|
||||
"}
|
||||
(11,1,1) = {"
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
f
|
||||
j
|
||||
m
|
||||
m
|
||||
m
|
||||
m
|
||||
f
|
||||
f
|
||||
"}
|
||||
(12,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
k
|
||||
f
|
||||
p
|
||||
u
|
||||
z
|
||||
g
|
||||
k
|
||||
"}
|
||||
(13,1,1) = {"
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
b
|
||||
f
|
||||
f
|
||||
g
|
||||
v
|
||||
A
|
||||
g
|
||||
a
|
||||
"}
|
||||
(14,1,1) = {"
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
b
|
||||
f
|
||||
b
|
||||
b
|
||||
f
|
||||
k
|
||||
a
|
||||
a
|
||||
"}
|
||||
(15,1,1) = {"
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
b
|
||||
f
|
||||
b
|
||||
b
|
||||
f
|
||||
k
|
||||
a
|
||||
a
|
||||
"}
|
||||
(16,1,1) = {"
|
||||
c
|
||||
b
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(17,1,1) = {"
|
||||
b
|
||||
b
|
||||
a
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
c
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(18,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
w
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(19,1,1) = {"
|
||||
a
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(20,1,1) = {"
|
||||
b
|
||||
b
|
||||
b
|
||||
a
|
||||
b
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
(21,1,1) = {"
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
b
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
"}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6142,7 +6142,7 @@
|
||||
},
|
||||
/area/awaymission/centcomAway/thunderdome)
|
||||
"oN" = (
|
||||
/obj/machinery/icecream_vat,
|
||||
/obj/machinery/icemachine,
|
||||
/turf/simulated/floor/plasteel{
|
||||
tag = "icon-barber (WEST)";
|
||||
icon_state = "barber";
|
||||
|
||||
+2319
-2168
File diff suppressed because it is too large
Load Diff
+1849
-1864
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -38,7 +38,7 @@
|
||||
/area/shuttle/escape)
|
||||
"ah" = (
|
||||
/obj/machinery/computer/security{
|
||||
network = list("SS13","Research Outpost","Mining Outpost","Telecomms")
|
||||
network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
|
||||
},
|
||||
/turf/simulated/shuttle/floor,
|
||||
/area/shuttle/escape)
|
||||
@@ -192,9 +192,7 @@
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/area/shuttle/escape)
|
||||
"aF" = (
|
||||
/obj/structure/grille,
|
||||
@@ -214,33 +212,6 @@
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"aH" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/firstaid/regular{
|
||||
pixel_x = 2;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/storage/firstaid/regular{
|
||||
pixel_x = -2;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/bodybag{
|
||||
pixel_x = 5
|
||||
},
|
||||
/obj/item/radio/intercom{
|
||||
dir = 4;
|
||||
name = "station intercom (General)";
|
||||
pixel_x = 28
|
||||
},
|
||||
/obj/item/storage/firstaid/o2{
|
||||
layer = 2.8;
|
||||
pixel_x = 4;
|
||||
pixel_y = 6
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"aI" = (
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
@@ -311,10 +282,6 @@
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"aO" = (
|
||||
/obj/machinery/recharge_station,
|
||||
/turf/simulated/shuttle/floor,
|
||||
/area/shuttle/escape)
|
||||
"aP" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
aiControlDisabled = 1;
|
||||
@@ -346,10 +313,11 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"aT" = (
|
||||
/obj/machinery/door/airlock/medical/glass{
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
aiControlDisabled = 1;
|
||||
hackProof = 1;
|
||||
id_tag = null;
|
||||
name = "Escape Shuttle Infirmary";
|
||||
req_access_txt = "0"
|
||||
name = "Shuttle Cargo Hatch"
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
@@ -363,11 +331,12 @@
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"aV" = (
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
name = "Escape Shuttle Cell";
|
||||
req_access_txt = "2"
|
||||
/obj/machinery/door/airlock/medical/glass{
|
||||
id_tag = null;
|
||||
name = "Escape Shuttle Infirmary";
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/turf/simulated/shuttle/floor,
|
||||
/area/shuttle/escape)
|
||||
"aW" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
@@ -376,14 +345,12 @@
|
||||
id_tag = "s_docking_airlock";
|
||||
name = "Shuttle Hatch"
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"aX" = (
|
||||
/obj/structure/bed/roller,
|
||||
/obj/structure/closet/crate,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"aZ" = (
|
||||
@@ -394,30 +361,19 @@
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/area/shuttle/escape)
|
||||
"bb" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/cardboard,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"bc" = (
|
||||
/obj/structure/bed/roller,
|
||||
/obj/machinery/vending/wallmed{
|
||||
layer = 3.3;
|
||||
name = "Emergency NanoMed";
|
||||
pixel_x = 28;
|
||||
pixel_y = 0;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/machinery/light/spot{
|
||||
tag = "icon-tube1 (EAST)";
|
||||
icon_state = "tube1";
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"bd" = (
|
||||
@@ -430,7 +386,9 @@
|
||||
icon_state = "tube1";
|
||||
dir = 8
|
||||
},
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"be" = (
|
||||
/obj/item/radio/intercom{
|
||||
@@ -438,16 +396,17 @@
|
||||
name = "station intercom (General)";
|
||||
pixel_x = 28
|
||||
},
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/area/shuttle/escape)
|
||||
"bf" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/bed/roller,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"bf" = (
|
||||
/obj/machinery/mech_bay_recharge_port,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"bh" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 1
|
||||
@@ -492,6 +451,124 @@
|
||||
/obj/structure/shuttle/engine/propulsion,
|
||||
/turf/simulated/shuttle/plating,
|
||||
/area/shuttle/escape)
|
||||
"db" = (
|
||||
/obj/machinery/door/airlock/security/glass{
|
||||
name = "Escape Shuttle Cell";
|
||||
req_access_txt = "2"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/area/shuttle/escape)
|
||||
"ev" = (
|
||||
/obj/machinery/sleeper{
|
||||
tag = "icon-sleeper (NORTH)";
|
||||
icon_state = "sleeper";
|
||||
dir = 1
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"iM" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/firstaid/o2{
|
||||
layer = 2.8;
|
||||
pixel_x = 4;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/storage/firstaid/regular{
|
||||
pixel_x = 2;
|
||||
pixel_y = 6
|
||||
},
|
||||
/obj/item/storage/firstaid/regular{
|
||||
pixel_x = -2;
|
||||
pixel_y = 4
|
||||
},
|
||||
/obj/item/bodybag{
|
||||
pixel_x = 5
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"kP" = (
|
||||
/turf/simulated/shuttle/wall{
|
||||
tag = "icon-swall7";
|
||||
icon_state = "swall7";
|
||||
dir = 2
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"lJ" = (
|
||||
/obj/structure/chair/comfy/shuttle{
|
||||
dir = 4
|
||||
},
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/area/shuttle/escape)
|
||||
"mk" = (
|
||||
/obj/machinery/status_display{
|
||||
pixel_y = 30
|
||||
},
|
||||
/obj/machinery/light/spot{
|
||||
tag = "icon-tube1 (NORTH)";
|
||||
icon_state = "tube1";
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/chair/comfy/shuttle,
|
||||
/turf/simulated/shuttle/floor4,
|
||||
/area/shuttle/escape)
|
||||
"rj" = (
|
||||
/obj/machinery/vending/wallmed{
|
||||
layer = 3.3;
|
||||
name = "Emergency NanoMed";
|
||||
pixel_x = 28;
|
||||
pixel_y = 0;
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/obj/structure/bed/roller,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"xo" = (
|
||||
/obj/machinery/recharge_station,
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"zT" = (
|
||||
/obj/structure/noticeboard,
|
||||
/turf/simulated/shuttle/wall{
|
||||
icon_state = "swall12";
|
||||
dir = 2
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"Bs" = (
|
||||
/obj/machinery/door/airlock/shuttle{
|
||||
aiControlDisabled = 1;
|
||||
hackProof = 1;
|
||||
id_tag = "s_docking_airlock";
|
||||
name = "Shuttle Hatch"
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"DZ" = (
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor2"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"OC" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/full/shuttle{
|
||||
icon_state = "15"
|
||||
},
|
||||
/turf/simulated/shuttle/floor{
|
||||
icon_state = "floor3"
|
||||
},
|
||||
/area/shuttle/escape)
|
||||
"XL" = (
|
||||
/turf/simulated/floor/mech_bay_recharge_floor,
|
||||
/area/shuttle/escape)
|
||||
|
||||
(1,1,1) = {"
|
||||
aa
|
||||
@@ -504,7 +581,7 @@ ab
|
||||
ar
|
||||
ar
|
||||
aW
|
||||
ar
|
||||
kP
|
||||
ak
|
||||
ar
|
||||
aD
|
||||
@@ -512,8 +589,8 @@ aF
|
||||
aJ
|
||||
ar
|
||||
aP
|
||||
ar
|
||||
aW
|
||||
kP
|
||||
Bs
|
||||
ac
|
||||
ar
|
||||
bi
|
||||
@@ -527,10 +604,10 @@ aa
|
||||
aa
|
||||
aa
|
||||
aw
|
||||
aA
|
||||
lJ
|
||||
aE
|
||||
aI
|
||||
aA
|
||||
ba
|
||||
aw
|
||||
an
|
||||
aL
|
||||
aA
|
||||
@@ -538,8 +615,8 @@ aA
|
||||
aA
|
||||
aN
|
||||
an
|
||||
aR
|
||||
aI
|
||||
aw
|
||||
DZ
|
||||
bb
|
||||
bf
|
||||
az
|
||||
@@ -553,7 +630,10 @@ aa
|
||||
ab
|
||||
ar
|
||||
ax
|
||||
aB
|
||||
mk
|
||||
ba
|
||||
ba
|
||||
aw
|
||||
an
|
||||
an
|
||||
an
|
||||
@@ -561,13 +641,10 @@ an
|
||||
an
|
||||
an
|
||||
an
|
||||
an
|
||||
an
|
||||
an
|
||||
aS
|
||||
aI
|
||||
aI
|
||||
aI
|
||||
zT
|
||||
DZ
|
||||
DZ
|
||||
XL
|
||||
bj
|
||||
bo
|
||||
"}
|
||||
@@ -579,10 +656,10 @@ ac
|
||||
ae
|
||||
as
|
||||
aw
|
||||
aC
|
||||
aC
|
||||
aC
|
||||
aC
|
||||
aZ
|
||||
ba
|
||||
bh
|
||||
aw
|
||||
an
|
||||
aC
|
||||
aC
|
||||
@@ -591,9 +668,9 @@ aC
|
||||
an
|
||||
an
|
||||
aT
|
||||
aI
|
||||
aI
|
||||
aI
|
||||
DZ
|
||||
DZ
|
||||
xo
|
||||
bj
|
||||
bo
|
||||
"}
|
||||
@@ -605,10 +682,10 @@ al
|
||||
ap
|
||||
at
|
||||
aw
|
||||
aD
|
||||
aF
|
||||
aF
|
||||
aJ
|
||||
aZ
|
||||
ba
|
||||
bh
|
||||
aw
|
||||
an
|
||||
aD
|
||||
aF
|
||||
@@ -616,10 +693,10 @@ aF
|
||||
aJ
|
||||
an
|
||||
an
|
||||
ac
|
||||
aw
|
||||
aX
|
||||
bc
|
||||
aH
|
||||
xo
|
||||
bj
|
||||
bo
|
||||
"}
|
||||
@@ -631,10 +708,10 @@ ai
|
||||
an
|
||||
an
|
||||
aw
|
||||
aA
|
||||
aA
|
||||
aA
|
||||
aA
|
||||
ac
|
||||
db
|
||||
aD
|
||||
OC
|
||||
an
|
||||
aA
|
||||
aA
|
||||
@@ -721,9 +798,9 @@ aJ
|
||||
an
|
||||
an
|
||||
ac
|
||||
aZ
|
||||
iM
|
||||
bd
|
||||
bh
|
||||
ev
|
||||
bm
|
||||
bo
|
||||
"}
|
||||
@@ -747,9 +824,9 @@ aA
|
||||
an
|
||||
an
|
||||
aV
|
||||
ba
|
||||
ba
|
||||
bh
|
||||
aI
|
||||
aI
|
||||
aI
|
||||
bm
|
||||
bo
|
||||
"}
|
||||
@@ -773,9 +850,9 @@ an
|
||||
an
|
||||
an
|
||||
aR
|
||||
aZ
|
||||
ba
|
||||
bh
|
||||
aI
|
||||
aI
|
||||
ev
|
||||
bm
|
||||
bo
|
||||
"}
|
||||
@@ -796,12 +873,12 @@ aM
|
||||
aC
|
||||
aC
|
||||
aC
|
||||
aO
|
||||
aO
|
||||
an
|
||||
an
|
||||
aS
|
||||
aZ
|
||||
rj
|
||||
be
|
||||
bh
|
||||
aI
|
||||
az
|
||||
bn
|
||||
"}
|
||||
|
||||
@@ -16,22 +16,14 @@ z7 = empty space
|
||||
#if !defined(USING_MAP_DATUM)
|
||||
#include "map_files\MetaStation\MetaStation.v41A.II.dmm"
|
||||
#include "map_files\MetaStation\z2.dmm"
|
||||
#include "map_files\generic\tcommsat-blown.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"
|
||||
|
||||
#define MAP_FILE "MetaStation.v41A.II.dmm"
|
||||
#define MAP_NAME "MetaStation"
|
||||
#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)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, 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)))
|
||||
DECLARE_LEVEL(MINING, SELFLOOPING, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)))
|
||||
|
||||
#define USING_MAP_DATUM /datum/map/metastation
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
else return 1
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/proc/burst()
|
||||
src.visible_message("<span class='danger'>\The [src] bursts!</span>");
|
||||
src.visible_message("<span class='danger'>\The [src] bursts!</span>")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
|
||||
var/datum/effect_system/smoke_spread/smoke = new
|
||||
smoke.set_up(1,0, src.loc, 0)
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#define GAMEMODE_IS_NUCLEAR (SSticker && istype(SSticker.mode, /datum/game_mode/nuclear))
|
||||
#define GAMEMODE_IS_REVOLUTION (SSticker && istype(SSticker.mode, /datum/game_mode/revolution))
|
||||
#define GAMEMODE_IS_WIZARD (SSticker && istype(SSticker.mode, /datum/game_mode/wizard))
|
||||
#define GAMEMODE_IS_RAGIN_MAGES (SSticker && istype(SSticker.mode, /datum/game_mode/wizard/raginmages))
|
||||
|
||||
//special roles
|
||||
// Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
// Subsystem init_order, from highest priority to lowest priority
|
||||
// Subsystems shutdown in the reverse of the order they initialize in
|
||||
// The numbers just define the ordering, they are meaningless otherwise.
|
||||
|
||||
#define INIT_ORDER_TITLE 100 // This **MUST** load first or people will se blank lobby screens
|
||||
#define INIT_ORDER_GARBAGE 19
|
||||
#define INIT_ORDER_DBCORE 18
|
||||
#define INIT_ORDER_BLACKBOX 17
|
||||
|
||||
@@ -23,6 +23,14 @@
|
||||
|
||||
init_subtypes(/datum/surgery_step, GLOB.surgery_steps)
|
||||
|
||||
// Different bodies
|
||||
__init_body_accessory(/datum/body_accessory/body)
|
||||
// Different tails
|
||||
__init_body_accessory(/datum/body_accessory/tail)
|
||||
|
||||
// Setup species:accessory relations
|
||||
initialize_body_accessory_by_species()
|
||||
|
||||
for(var/path in (subtypesof(/datum/surgery)))
|
||||
GLOB.surgeries_list += new path()
|
||||
|
||||
@@ -30,6 +38,7 @@
|
||||
init_datum_subtypes(/datum/superheroes, GLOB.all_superheroes, null, "name")
|
||||
init_datum_subtypes(/datum/language, GLOB.all_languages, null, "name")
|
||||
|
||||
// Setup languages
|
||||
for(var/language_name in GLOB.all_languages)
|
||||
var/datum/language/L = GLOB.all_languages[language_name]
|
||||
if(!(L.flags & NONGLOBAL))
|
||||
@@ -54,7 +63,61 @@
|
||||
var/datum/pipes/P = D
|
||||
if(P.rpd_dispensable)
|
||||
GLOB.rpd_pipe_list += list(list("pipe_name" = P.pipe_name, "pipe_id" = P.pipe_id, "pipe_type" = P.pipe_type, "pipe_category" = P.pipe_category, "orientations" = P.orientations, "pipe_icon" = P.pipe_icon, "bendy" = P.bendy))
|
||||
return 1
|
||||
|
||||
// Setup PAI software
|
||||
for(var/type in subtypesof(/datum/pai_software))
|
||||
var/datum/pai_software/P = new type()
|
||||
if(GLOB.pai_software_by_key[P.id])
|
||||
var/datum/pai_software/O = GLOB.pai_software_by_key[P.id]
|
||||
to_chat(world, "<span class='warning'>pAI software module [P.name] has the same key as [O.name]!</span>")
|
||||
continue
|
||||
GLOB.pai_software_by_key[P.id] = P
|
||||
if(P.default)
|
||||
GLOB.default_pai_software[P.id] = P
|
||||
|
||||
// Setup loadout gear
|
||||
for(var/geartype in subtypesof(/datum/gear))
|
||||
var/datum/gear/G = geartype
|
||||
|
||||
var/use_name = initial(G.display_name)
|
||||
var/use_category = initial(G.sort_category)
|
||||
|
||||
if(G == initial(G.subtype_path))
|
||||
continue
|
||||
|
||||
if(!use_name)
|
||||
error("Loadout - Missing display name: [G]")
|
||||
continue
|
||||
if(!initial(G.cost))
|
||||
error("Loadout - Missing cost: [G]")
|
||||
continue
|
||||
if(!initial(G.path))
|
||||
error("Loadout - Missing path definition: [G]")
|
||||
continue
|
||||
|
||||
if(!GLOB.loadout_categories[use_category])
|
||||
GLOB.loadout_categories[use_category] = new /datum/loadout_category(use_category)
|
||||
var/datum/loadout_category/LC = GLOB.loadout_categories[use_category]
|
||||
GLOB.gear_datums[use_name] = new geartype
|
||||
LC.gear[use_name] = GLOB.gear_datums[use_name]
|
||||
|
||||
GLOB.loadout_categories = sortAssoc(GLOB.loadout_categories)
|
||||
for(var/loadout_category in GLOB.loadout_categories)
|
||||
var/datum/loadout_category/LC = GLOB.loadout_categories[loadout_category]
|
||||
LC.gear = sortAssoc(LC.gear)
|
||||
|
||||
|
||||
// Setup a list of robolimbs
|
||||
GLOB.basic_robolimb = new()
|
||||
for(var/limb_type in typesof(/datum/robolimb))
|
||||
var/datum/robolimb/R = new limb_type()
|
||||
GLOB.all_robolimbs[R.company] = R
|
||||
if(!R.unavailable_at_chargen)
|
||||
if(R != "head" && R != "chest" && R != "groin" ) //Part of the method that ensures only IPCs can access head, chest and groin prosthetics.
|
||||
if(R.has_subtypes) //Ensures solos get added to the list as well be incorporating has_subtypes == 1 and has_subtypes == 2.
|
||||
GLOB.chargen_robolimbs[R.company] = R //List only main brands and solo parts.
|
||||
if(R.selectable)
|
||||
GLOB.selectable_robolimbs[R.company] = R
|
||||
|
||||
/* // Uncomment to debug chemical reaction list.
|
||||
/client/verb/debug_chemical_list()
|
||||
|
||||
@@ -616,3 +616,34 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list())
|
||||
chosen = pick(mob_spawn_meancritters)
|
||||
var/mob/living/simple_animal/C = new chosen(spawn_location)
|
||||
return C
|
||||
|
||||
//determines the job of a mob, taking into account job transfers
|
||||
/proc/determine_role(mob/living/P)
|
||||
var/datum/mind/M = P.mind
|
||||
if(!M)
|
||||
return
|
||||
return M.playtime_role ? M.playtime_role : M.assigned_role //returns current role
|
||||
|
||||
/** checks the security force on station and returns a list of numbers, of the form:
|
||||
* total, active, dead, antag
|
||||
* where active is defined as conscious (STAT = 0) and not an antag
|
||||
*/
|
||||
/proc/check_active_security_force()
|
||||
var/sec_positions = GLOB.security_positions - "Magistrate" - "Brig Physician"
|
||||
var/total = 0
|
||||
var/active = 0
|
||||
var/dead = 0
|
||||
var/antag = 0
|
||||
for(var/p in GLOB.human_list) //contains only human mobs, so no type check needed
|
||||
var/mob/living/carbon/human/player = p //need to tell it what type it is or we can't access stat without the dreaded :
|
||||
if(determine_role(player) in sec_positions)
|
||||
total++
|
||||
if(player.stat == DEAD)
|
||||
dead++
|
||||
continue
|
||||
if(isAntag(player))
|
||||
antag++
|
||||
continue
|
||||
if(player.stat == CONSCIOUS)
|
||||
active++
|
||||
return list(total, active, dead, antag)
|
||||
|
||||
+2
-21
@@ -11,25 +11,6 @@
|
||||
|
||||
#define TICKS2DS(T) ((T) TICKS)
|
||||
|
||||
#define TimeOfGame (get_game_time())
|
||||
#define TimeOfTick (world.tick_usage*0.01*world.tick_lag)
|
||||
|
||||
/proc/get_game_time()
|
||||
var/global/time_offset = 0
|
||||
var/global/last_time = 0
|
||||
var/global/last_usage = 0
|
||||
|
||||
var/wtime = world.time
|
||||
var/wusage = world.tick_usage * 0.01
|
||||
|
||||
if(last_time < wtime && last_usage > 1)
|
||||
time_offset += last_usage - 1
|
||||
|
||||
last_time = wtime
|
||||
last_usage = wusage
|
||||
|
||||
return wtime + (time_offset + wusage) * world.tick_lag
|
||||
|
||||
/* This proc should only be used for world/Topic.
|
||||
* If you want to display the time for which dream daemon has been running ("round time") use worldtime2text.
|
||||
* If you want to display the canonical station "time" (aka the in-character time of the station) use station_time_timestamp
|
||||
@@ -98,14 +79,14 @@ proc/isDay(var/month, var/day)
|
||||
* Returns "watch handle" (really just a timestamp :V)
|
||||
*/
|
||||
/proc/start_watch()
|
||||
return TimeOfGame
|
||||
return REALTIMEOFDAY
|
||||
|
||||
/**
|
||||
* Returns number of seconds elapsed.
|
||||
* @param wh number The "Watch Handle" from start_watch(). (timestamp)
|
||||
*/
|
||||
/proc/stop_watch(wh)
|
||||
return round(0.1 * (TimeOfGame - wh), 0.1)
|
||||
return round(0.1 * (REALTIMEOFDAY - wh), 0.1)
|
||||
|
||||
/proc/numberToMonthName(number)
|
||||
return GLOB.month_names.Find(number)
|
||||
|
||||
@@ -2019,3 +2019,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
/proc/CallAsync(datum/source, proctype, list/arguments)
|
||||
set waitfor = FALSE
|
||||
return call(source, proctype)(arglist(arguments))
|
||||
|
||||
/// Waits at a line of code until X is true
|
||||
#define UNTIL(X) while(!(X)) stoplag()
|
||||
|
||||
@@ -55,3 +55,7 @@ GLOBAL_LIST_EMPTY(space_ruins_templates)
|
||||
GLOBAL_LIST_EMPTY(lava_ruins_templates)
|
||||
GLOBAL_LIST_EMPTY(shelter_templates)
|
||||
GLOBAL_LIST_EMPTY(shuttle_templates)
|
||||
|
||||
// Teleport locations
|
||||
GLOBAL_LIST_EMPTY(teleportlocs)
|
||||
GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
@@ -89,7 +89,7 @@ GLOBAL_VAR_INIT(copier_items_printed_logged, FALSE)
|
||||
|
||||
GLOBAL_VAR(map_name) // Self explanatory
|
||||
|
||||
GLOBAL_DATUM(data_core, /datum/datacore) // Station datacore, manifest, etc
|
||||
GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) // Station datacore, manifest, etc
|
||||
|
||||
GLOBAL_VAR_INIT(panic_bunker_enabled, FALSE) // Is the panic bunker enabled
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -200,8 +200,8 @@
|
||||
var/disable_away_missions = 0 // disable away missions
|
||||
var/disable_space_ruins = 0 //disable space ruins
|
||||
|
||||
var/extra_space_ruin_levels_min = 2
|
||||
var/extra_space_ruin_levels_max = 4
|
||||
var/extra_space_ruin_levels_min = 4
|
||||
var/extra_space_ruin_levels_max = 8
|
||||
|
||||
var/ooc_allowed = 1
|
||||
var/looc_allowed = 1
|
||||
@@ -265,6 +265,11 @@
|
||||
src.votable_modes += "secret"
|
||||
|
||||
/datum/configuration/proc/load(filename, type = "config") //the type can also be game_options, in which case it uses a different switch. not making it separate to not copypaste code - Urist
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Config reload blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to reload configuration via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to reload configuration via advanced proc-call")
|
||||
return
|
||||
var/list/Lines = file2list(filename)
|
||||
|
||||
for(var/t in Lines)
|
||||
@@ -808,6 +813,11 @@
|
||||
log_config("Unknown setting in configuration: '[name]'")
|
||||
|
||||
/datum/configuration/proc/loadsql(filename) // -- TLE
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>SQL configuration reload blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to reload SQL configuration via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to reload SQL configuration via advanced proc-call")
|
||||
return
|
||||
var/list/Lines = file2list(filename)
|
||||
for(var/t in Lines)
|
||||
if(!t) continue
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/**
|
||||
* Startup hook.
|
||||
* Called in world.dm when the server starts.
|
||||
*/
|
||||
/hook/startup
|
||||
|
||||
/**
|
||||
* Roundstart hook.
|
||||
* Called in gameticker.dm when a round starts.
|
||||
*/
|
||||
/hook/roundstart
|
||||
@@ -1,39 +0,0 @@
|
||||
/**
|
||||
* @file hooks.dm
|
||||
* Implements hooks, a simple way to run code on pre-defined events.
|
||||
*/
|
||||
|
||||
/** @page hooks Code hooks
|
||||
* @section hooks Hooks
|
||||
* A hook is defined under /hook in the type tree.
|
||||
*
|
||||
* To add some code to be called by the hook, define a proc under the type, as so:
|
||||
* @code
|
||||
/hook/foo/proc/bar()
|
||||
if(1)
|
||||
return 1 //Sucessful
|
||||
else
|
||||
return 0 //Error, or runtime.
|
||||
* @endcode
|
||||
* All hooks must return nonzero on success, as runtimes will force return null.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Calls a hook, executing every piece of code that's attached to it.
|
||||
* @param hook Identifier of the hook to call.
|
||||
* @returns 1 if all hooked code runs successfully, 0 otherwise.
|
||||
*/
|
||||
/proc/callHook(hook, list/args=null)
|
||||
var/hook_path = text2path("/hook/[hook]")
|
||||
if(!hook_path)
|
||||
error("Invalid hook '/hook/[hook]' called.")
|
||||
return 0
|
||||
|
||||
var/caller = new hook_path
|
||||
var/status = 1
|
||||
for(var/P in typesof("[hook_path]/proc"))
|
||||
if(!call(caller, P)(arglist(args)))
|
||||
error("Hook '[P]' failed or runtimed.")
|
||||
status = 0
|
||||
|
||||
return status
|
||||
@@ -212,38 +212,38 @@ SUBSYSTEM_DEF(events)
|
||||
|
||||
if(href_list["toggle_report"])
|
||||
report_at_round_end = !report_at_round_end
|
||||
admin_log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
|
||||
log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
|
||||
else if(href_list["dec_timer"])
|
||||
var/datum/event_container/EC = locate(href_list["event"])
|
||||
var/decrease = (60 * RaiseToPower(10, text2num(href_list["dec_timer"])))
|
||||
EC.next_event_time -= decrease
|
||||
admin_log_and_message_admins("decreased timer for [GLOB.severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
|
||||
log_and_message_admins("decreased timer for [GLOB.severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
|
||||
else if(href_list["inc_timer"])
|
||||
var/datum/event_container/EC = locate(href_list["event"])
|
||||
var/increase = (60 * RaiseToPower(10, text2num(href_list["inc_timer"])))
|
||||
EC.next_event_time += increase
|
||||
admin_log_and_message_admins("increased timer for [GLOB.severity_to_string[EC.severity]] events by [increase/600] minute(s).")
|
||||
log_and_message_admins("increased timer for [GLOB.severity_to_string[EC.severity]] events by [increase/600] minute(s).")
|
||||
else if(href_list["select_event"])
|
||||
var/datum/event_container/EC = locate(href_list["select_event"])
|
||||
var/datum/event_meta/EM = EC.SelectEvent()
|
||||
if(EM)
|
||||
admin_log_and_message_admins("has queued the [GLOB.severity_to_string[EC.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has queued the [GLOB.severity_to_string[EC.severity]] event '[EM.name]'.")
|
||||
else if(href_list["pause"])
|
||||
var/datum/event_container/EC = locate(href_list["pause"])
|
||||
EC.delayed = !EC.delayed
|
||||
admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [GLOB.severity_to_string[EC.severity]] events.")
|
||||
log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [GLOB.severity_to_string[EC.severity]] events.")
|
||||
else if(href_list["interval"])
|
||||
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
|
||||
if(delay && delay > 0)
|
||||
var/datum/event_container/EC = locate(href_list["interval"])
|
||||
EC.delay_modifier = delay
|
||||
admin_log_and_message_admins("has set the interval modifier for [GLOB.severity_to_string[EC.severity]] events to [EC.delay_modifier].")
|
||||
log_and_message_admins("has set the interval modifier for [GLOB.severity_to_string[EC.severity]] events to [EC.delay_modifier].")
|
||||
else if(href_list["stop"])
|
||||
if(alert("Stopping an event may have unintended side-effects. Continue?","Stopping Event!","Yes","No") != "Yes")
|
||||
return
|
||||
var/datum/event/E = locate(href_list["stop"])
|
||||
var/datum/event_meta/EM = E.event_meta
|
||||
admin_log_and_message_admins("has stopped the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has stopped the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
E.kill()
|
||||
else if(href_list["view_events"])
|
||||
selected_event_container = locate(href_list["view_events"])
|
||||
@@ -265,23 +265,23 @@ SUBSYSTEM_DEF(events)
|
||||
var/datum/event_meta/EM = locate(href_list["set_weight"])
|
||||
EM.weight = weight
|
||||
if(EM != new_event)
|
||||
admin_log_and_message_admins("has changed the weight of the [GLOB.severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].")
|
||||
log_and_message_admins("has changed the weight of the [GLOB.severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].")
|
||||
else if(href_list["toggle_oneshot"])
|
||||
var/datum/event_meta/EM = locate(href_list["toggle_oneshot"])
|
||||
EM.one_shot = !EM.one_shot
|
||||
if(EM != new_event)
|
||||
admin_log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["toggle_enabled"])
|
||||
var/datum/event_meta/EM = locate(href_list["toggle_enabled"])
|
||||
EM.enabled = !EM.enabled
|
||||
admin_log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["remove"])
|
||||
if(alert("This will remove the event from rotation. Continue?","Removing Event!","Yes","No") != "Yes")
|
||||
return
|
||||
var/datum/event_meta/EM = locate(href_list["remove"])
|
||||
var/datum/event_container/EC = locate(href_list["EC"])
|
||||
EC.available_events -= EM
|
||||
admin_log_and_message_admins("has removed the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
log_and_message_admins("has removed the [GLOB.severity_to_string[EM.severity]] event '[EM.name]'.")
|
||||
else if(href_list["add"])
|
||||
if(!new_event.name || !new_event.event_type)
|
||||
return
|
||||
@@ -289,12 +289,12 @@ SUBSYSTEM_DEF(events)
|
||||
return
|
||||
new_event.severity = selected_event_container.severity
|
||||
selected_event_container.available_events += new_event
|
||||
admin_log_and_message_admins("has added \a [GLOB.severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].")
|
||||
log_and_message_admins("has added \a [GLOB.severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].")
|
||||
new_event = new
|
||||
else if(href_list["clear"])
|
||||
var/datum/event_container/EC = locate(href_list["clear"])
|
||||
if(EC.next_event)
|
||||
admin_log_and_message_admins("has dequeued the [GLOB.severity_to_string[EC.severity]] event '[EC.next_event.name]'.")
|
||||
log_and_message_admins("has dequeued the [GLOB.severity_to_string[EC.severity]] event '[EC.next_event.name]'.")
|
||||
EC.next_event = null
|
||||
|
||||
Interact(usr)
|
||||
|
||||
@@ -19,8 +19,18 @@ SUBSYSTEM_DEF(icon_smooth)
|
||||
can_fire = 0
|
||||
|
||||
/datum/controller/subsystem/icon_smooth/Initialize()
|
||||
smooth_zlevel(1,TRUE)
|
||||
smooth_zlevel(2,TRUE)
|
||||
log_startup_progress("Smoothing atoms...")
|
||||
// Smooth EVERYTHING in the world
|
||||
for(var/turf/T in world)
|
||||
if(T.smooth)
|
||||
smooth_icon(T)
|
||||
for(var/A in T)
|
||||
var/atom/AA = A
|
||||
if(AA.smooth)
|
||||
smooth_icon(AA)
|
||||
CHECK_TICK
|
||||
|
||||
// Incase any new atoms were added to the smoothing queue for whatever reason
|
||||
var/queue = smooth_queue
|
||||
smooth_queue = list()
|
||||
for(var/V in queue)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -11,24 +11,57 @@ SUBSYSTEM_DEF(mapping)
|
||||
createRandomZlevel()
|
||||
// Seed space ruins
|
||||
if(!config.disable_space_ruins)
|
||||
var/timer = start_watch()
|
||||
log_startup_progress("Creating random space levels...")
|
||||
seedRuins(list(level_name_to_num(EMPTY_AREA)), rand(0, 3), /area/space, GLOB.space_ruins_templates)
|
||||
log_startup_progress("Loaded random space levels in [stop_watch(timer)]s.")
|
||||
|
||||
// load in extra levels of space ruins
|
||||
|
||||
var/load_zlevels_timer = start_watch()
|
||||
log_startup_progress("Creating random space levels...")
|
||||
var/num_extra_space = rand(config.extra_space_ruin_levels_min, config.extra_space_ruin_levels_max)
|
||||
for(var/i = 1, i <= num_extra_space, i++)
|
||||
var/zlev = GLOB.space_manager.add_new_zlevel("[EMPTY_AREA] #[i]", linkage = CROSSLINKED, traits = list(REACHABLE))
|
||||
seedRuins(list(zlev), rand(0, 3), /area/space, GLOB.space_ruins_templates)
|
||||
GLOB.space_manager.add_new_zlevel("Ruin Area #[i]", linkage = CROSSLINKED, traits = list(REACHABLE, SPAWN_RUINS))
|
||||
log_startup_progress("Loaded random space levels in [stop_watch(load_zlevels_timer)]s.")
|
||||
|
||||
// Now spawn ruins, random budget between 20 and 30 for all zlevels combined.
|
||||
// While this may seem like a high number, the amount of ruin Z levels can be anywhere between 3 and 7.
|
||||
// Note that this budget is not split evenly accross all zlevels
|
||||
log_startup_progress("Seeding ruins...")
|
||||
var/seed_ruins_timer = start_watch()
|
||||
seedRuins(levels_by_trait(SPAWN_RUINS), rand(20, 30), /area/space, GLOB.space_ruins_templates)
|
||||
log_startup_progress("Successfully seeded ruins in [stop_watch(seed_ruins_timer)]s.")
|
||||
|
||||
// Makes a blank space level for the sake of randomness
|
||||
GLOB.space_manager.add_new_zlevel("Empty Area", linkage = CROSSLINKED, traits = list(REACHABLE))
|
||||
|
||||
|
||||
// Setup the Z-level linkage
|
||||
GLOB.space_manager.do_transition_setup()
|
||||
|
||||
// Spawn Lavaland ruins and rivers.
|
||||
log_startup_progress("Populating lavaland...")
|
||||
var/lavaland_setup_timer = start_watch()
|
||||
seedRuins(list(level_name_to_num(MINING)), config.lavaland_budget, /area/lavaland/surface/outdoors/unexplored, GLOB.lava_ruins_templates)
|
||||
spawn_rivers(list(level_name_to_num(MINING)))
|
||||
log_startup_progress("Successfully populated lavaland in [stop_watch(lavaland_setup_timer)]s.")
|
||||
|
||||
// Now we make a list of areas for teleport locs
|
||||
// TOOD: Make these locs into lists on the SS itself, not globs
|
||||
for(var/area/AR in world)
|
||||
if(AR.no_teleportlocs)
|
||||
continue
|
||||
if(GLOB.teleportlocs[AR.name])
|
||||
continue
|
||||
var/turf/picked = safepick(get_area_turfs(AR.type))
|
||||
if(picked && is_station_level(picked.z))
|
||||
GLOB.teleportlocs[AR.name] = AR
|
||||
|
||||
GLOB.teleportlocs = sortAssoc(GLOB.teleportlocs)
|
||||
|
||||
for(var/area/AR in world)
|
||||
if(GLOB.ghostteleportlocs[AR.name])
|
||||
continue
|
||||
var/list/turfs = get_area_turfs(AR.type)
|
||||
if(turfs.len)
|
||||
GLOB.ghostteleportlocs[AR.name] = AR
|
||||
|
||||
GLOB.ghostteleportlocs = sortAssoc(GLOB.ghostteleportlocs)
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -180,7 +180,14 @@ SUBSYSTEM_DEF(ticker)
|
||||
current_state = GAME_STATE_PLAYING
|
||||
Master.SetRunLevel(RUNLEVEL_GAME)
|
||||
|
||||
callHook("roundstart")
|
||||
// Generate the list of playable AI cores in the world
|
||||
for(var/obj/effect/landmark/start/S in GLOB.landmarks_list)
|
||||
if(S.name != "AI")
|
||||
continue
|
||||
if(locate(/mob/living) in S.loc)
|
||||
continue
|
||||
GLOB.empty_playable_ai_cores += new /obj/structure/AIcore/deactivated(get_turf(S))
|
||||
|
||||
|
||||
//here to initialize the random events nicely at round start
|
||||
setup_economy()
|
||||
@@ -279,10 +286,22 @@ SUBSYSTEM_DEF(ticker)
|
||||
for(var/mob/new_player/N in GLOB.mob_list)
|
||||
if(N.client)
|
||||
N.new_player_panel_proc()
|
||||
|
||||
// Now that every other piece of the round has initialized, lets setup player job scaling
|
||||
var/playercount = length(GLOB.clients)
|
||||
var/highpop_trigger = 80
|
||||
|
||||
if(playercount >= highpop_trigger)
|
||||
log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - loading highpop job config")
|
||||
SSjobs.LoadJobs("config/jobs_highpop.txt")
|
||||
else
|
||||
log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - keeping standard job config")
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
RunUnitTests()
|
||||
#endif
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/station_explosion_cinematic(station_missed = 0, override = null)
|
||||
if(cinematic)
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets)
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets/New()
|
||||
NEW_SS_GLOBAL(SSmentor_tickets);
|
||||
PreInit();
|
||||
NEW_SS_GLOBAL(SSmentor_tickets)
|
||||
PreInit()
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets
|
||||
name = "Mentor Tickets"
|
||||
@@ -15,7 +15,7 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
|
||||
message_mentorTicket(msg)
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets/Initialize()
|
||||
close_messages = list("<font color='red' size='3'><b>- [ticket_name] Closed -</b></font>",
|
||||
"<span class='boldmessage'>Please try to be as descriptive as possible in mentor helps. Mentors do not know the full situation you're in and need more information to give you a helpful response.</span>",
|
||||
close_messages = list("<font color='red' size='3'><b>- [ticket_name] Closed -</b></font>",
|
||||
"<span class='boldmessage'>Please try to be as descriptive as possible in mentor helps. Mentors do not know the full situation you're in and need more information to give you a helpful response.</span>",
|
||||
"<span class='[span_class]'>Your [ticket_name] has now been closed.</span>")
|
||||
return ..()
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
/hook/startup/proc/setup_title_screen()
|
||||
SUBSYSTEM_DEF(title)
|
||||
name = "Title Screen"
|
||||
flags = SS_NO_FIRE
|
||||
init_order = INIT_ORDER_TITLE
|
||||
|
||||
/datum/controller/subsystem/title/Initialize()
|
||||
var/list/provisional_title_screens = flist("config/title_screens/images/")
|
||||
var/list/title_screens = list()
|
||||
var/use_rare_screens = prob(1)
|
||||
@@ -29,5 +34,5 @@
|
||||
|
||||
for(var/turf/unsimulated/wall/splashscreen/splash in world)
|
||||
splash.icon = icon
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return ..()
|
||||
@@ -367,7 +367,7 @@ SUBSYSTEM_DEF(vote)
|
||||
var/votedesc = capitalize(mode)
|
||||
if(mode == "custom")
|
||||
votedesc += " ([question])"
|
||||
admin_log_and_message_admins("cancelled the running [votedesc] vote.")
|
||||
log_and_message_admins("cancelled the running [votedesc] vote.")
|
||||
reset()
|
||||
if("toggle_restart")
|
||||
if(admin)
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
/hook/startup/proc/createDatacore()
|
||||
GLOB.data_core = new /datum/datacore()
|
||||
return 1
|
||||
|
||||
/datum/datacore
|
||||
var/list/medical = list()
|
||||
var/list/general = list()
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
// reference: /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
|
||||
|
||||
/**
|
||||
* Proc to check if a datum allows proc calls on it
|
||||
*
|
||||
* Returns TRUE if you can call a proc on the datum, FALSE if you cant
|
||||
*
|
||||
*/
|
||||
/datum/proc/CanProcCall(procname)
|
||||
return TRUE
|
||||
|
||||
/datum/proc/can_vv_get(var_name)
|
||||
return TRUE
|
||||
|
||||
@@ -1232,22 +1241,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
|
||||
|
||||
|
||||
@@ -69,10 +69,10 @@
|
||||
|
||||
/datum/construction/proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one.
|
||||
for(var/i=1;i<=steps.len;i++)
|
||||
var/list/L = steps[i];
|
||||
var/list/L = steps[i]
|
||||
if(do_tool_or_atom_check(used_atom, L["key"]) && custom_action(i, used_atom, user))
|
||||
steps[i]=null;//stupid byond list from list removal...
|
||||
listclearnulls(steps);
|
||||
listclearnulls(steps)
|
||||
if(!steps.len)
|
||||
spawn_result(user)
|
||||
return 1
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
name = rename
|
||||
|
||||
/datum/map_template/proc/preload_size(path)
|
||||
var/bounds = GLOB.maploader.load_map(file(path), 1, 1, 1, cropMap = 0, measureOnly = 1)
|
||||
var/bounds = GLOB.maploader.load_map(file(path), 1, 1, 1, shouldCropMap = FALSE, measureOnly = TRUE)
|
||||
if(bounds)
|
||||
width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1
|
||||
height = bounds[MAP_MAXY]
|
||||
@@ -49,7 +49,7 @@
|
||||
// if given a multi-z template
|
||||
// it might need to be adapted for that when that time comes
|
||||
GLOB.space_manager.add_dirt(placement.z)
|
||||
var/list/bounds = GLOB.maploader.load_map(get_file(), min_x, min_y, placement.z, cropMap = 1)
|
||||
var/list/bounds = GLOB.maploader.load_map(get_file(), min_x, min_y, placement.z, shouldCropMap = TRUE)
|
||||
if(!bounds)
|
||||
return 0
|
||||
if(bot_left == null || top_right == null)
|
||||
|
||||
+13
-26
@@ -47,7 +47,6 @@
|
||||
|
||||
var/miming = 0 // Mime's vow of silence
|
||||
var/list/antag_datums
|
||||
var/speech_span // What span any body this mind has talks in.
|
||||
var/datum/changeling/changeling //changeling holder
|
||||
var/linglink
|
||||
var/datum/vampire/vampire //vampire holder
|
||||
@@ -65,8 +64,6 @@
|
||||
var/isblessed = FALSE // is this person blessed by a chaplain?
|
||||
var/num_blessed = 0 // for prayers
|
||||
|
||||
// the world.time since the mob has been brigged, or -1 if not at all
|
||||
var/brigged_since = -1
|
||||
var/suicided = FALSE
|
||||
|
||||
//put this here for easier tracking ingame
|
||||
@@ -547,11 +544,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")
|
||||
@@ -1584,25 +1590,6 @@
|
||||
L = agent_landmarks[team]
|
||||
H.forceMove(L.loc)
|
||||
|
||||
|
||||
// check whether this mind's mob has been brigged for the given duration
|
||||
// have to call this periodically for the duration to work properly
|
||||
/datum/mind/proc/is_brigged(duration)
|
||||
var/turf/T = current.loc
|
||||
if(!istype(T))
|
||||
brigged_since = -1
|
||||
return 0
|
||||
|
||||
var/is_currently_brigged = current.is_in_brig()
|
||||
if(!is_currently_brigged)
|
||||
brigged_since = -1
|
||||
return 0
|
||||
|
||||
if(brigged_since == -1)
|
||||
brigged_since = world.time
|
||||
|
||||
return (duration <= world.time - brigged_since)
|
||||
|
||||
/datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S)
|
||||
spell_list += S
|
||||
S.action.Grant(current)
|
||||
|
||||
@@ -175,6 +175,7 @@
|
||||
description = "The crew of a space station awaken one hundred years after a crisis. Awaking to a derelict space station on the verge of collapse, and a hostile force of invading \
|
||||
hivebots. Can the surviving crew overcome the odds and survive and rebuild, or will the cold embrace of the stars become their new home?"
|
||||
cost = 2
|
||||
allow_duplicates = FALSE
|
||||
|
||||
/datum/map_template/ruin/space/wizardcrash
|
||||
id = "wizardcrash"
|
||||
@@ -182,3 +183,68 @@
|
||||
name = "Crashed Wizard Shuttle"
|
||||
description = "A shuttle of the Wizard Federation, sent out to crush some wandless scum. Unfortunately, the pilot suffered a magic-related accident and the shuttle crashed into a nearby asteroid."
|
||||
cost = 2
|
||||
|
||||
/datum/map_template/ruin/space/abandonedtele
|
||||
id = "abandonedtele"
|
||||
suffix = "abandonedtele.dmm"
|
||||
name = "Abandoned Teleporter"
|
||||
description = "An old teleporter, seemingly part of what used to be a larger satellite."
|
||||
|
||||
/datum/map_template/ruin/space/blowntcommsat
|
||||
id = "blowntcommsat"
|
||||
suffix = "blowntcommsat.dmm"
|
||||
name = "Blown-out Telecommunications Satellite"
|
||||
description = "The remains of an old telecommunications satellite once utilised by NanoTrasen. It lays derelict, with quite a few pieces missing."
|
||||
cost = 5 // This is a chonky boy
|
||||
allow_duplicates = FALSE // Absolutely huge, also has its own APC and the area isnt set to allow many
|
||||
|
||||
/datum/map_template/ruin/space/clownmime
|
||||
id = "clownmime"
|
||||
suffix = "clownmime.dmm"
|
||||
name = "Clown & Mime Mineral Deposits"
|
||||
description = "A crash site of two opposing factions, both trying to complete mining trips for their own valuable minerals. While all the crew have long perished, the minerals are likely intact."
|
||||
|
||||
/datum/map_template/ruin/space/dj
|
||||
id = "dj"
|
||||
suffix = "dj.dmm"
|
||||
name = "Russian DJ Station"
|
||||
description = "An old russian listening station, long since defunct and lifeless, however the equipment is likely still in working condition."
|
||||
cost = 2
|
||||
|
||||
/datum/map_template/ruin/space/druglab
|
||||
id = "druglab"
|
||||
suffix = "druglab.dmm"
|
||||
name = "Drug Lab"
|
||||
description = "An old abandoned \"Chemistry\" site, which has a strong aura of amphetamines around it."
|
||||
|
||||
/datum/map_template/ruin/space/syndiedepot
|
||||
id = "syndiedepot"
|
||||
suffix = "syndiedepot.dmm"
|
||||
name = "Suspicious Supply Depot"
|
||||
description = "A syndicate supply depot, heavily stocked, but heavily guarded with an assortment of shields, sentry bots, armed operatives and more."
|
||||
allow_duplicates = FALSE // One of these is enough
|
||||
always_place = TRUE // This is on the always spawn list because of the shielding chance
|
||||
cost = 0 // Force spawned so shouldnt have a cost
|
||||
|
||||
/datum/map_template/ruin/space/ussp_tele
|
||||
id = "ussp_tele"
|
||||
suffix = "ussp_tele.dmm"
|
||||
name = "USSP Teleporter"
|
||||
description = "An old, almost fully destroyed teleporter, seemingly part of what used to be a much larger structure."
|
||||
|
||||
/datum/map_template/ruin/space/ussp
|
||||
id = "ussp"
|
||||
suffix = "ussp.dmm"
|
||||
name = "USSP"
|
||||
description = "A decript station of seemingly russian origin. The last contact had with this station was a distress signal, and the rest was dark."
|
||||
allow_duplicates = FALSE // One of these has enough loot
|
||||
cost = 5 // This ruin is 100x100 tiles, so we dont want it to be treated like a 10x10 meteor
|
||||
|
||||
/datum/map_template/ruin/space/whiteship
|
||||
id = "whiteship"
|
||||
suffix = "whiteship.dmm"
|
||||
name = "NT Medical Ship"
|
||||
description = "An old, abandoned NT medical ship. Its computer can navigate to other landmarks within space with ease."
|
||||
allow_duplicates = FALSE // I dont even want to think about what happens if you have 2 shuttles with the same ID. Likely scary stuff.
|
||||
always_place = TRUE // Its designed to make exploring other space ruins more accessible
|
||||
cost = 0 // Force spawned so shouldnt have a cost
|
||||
|
||||
@@ -238,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
|
||||
|
||||
@@ -15,16 +15,16 @@
|
||||
switch(index)
|
||||
if(BORG_WIRE_MAIN_POWER)
|
||||
return "Main Power"
|
||||
|
||||
|
||||
if(BORG_WIRE_LOCKED_DOWN)
|
||||
return "Lockdown"
|
||||
|
||||
|
||||
if(BORG_WIRE_CAMERA)
|
||||
return "Camera"
|
||||
|
||||
|
||||
if(BORG_WIRE_AI_CONTROL)
|
||||
return "AI Control"
|
||||
|
||||
|
||||
if(BORG_WIRE_LAWCHECK)
|
||||
return "Law Check"
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control
|
||||
if(!mended)
|
||||
if(R.connected_ai)
|
||||
R.connected_ai = null
|
||||
R.disconnect_from_ai()
|
||||
|
||||
if(BORG_WIRE_CAMERA)
|
||||
if(!isnull(R.camera) && !R.scrambledcodes)
|
||||
@@ -74,8 +74,7 @@
|
||||
switch(index)
|
||||
if(BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI
|
||||
if(!R.emagged)
|
||||
R.connected_ai = select_active_ai()
|
||||
R.notify_ai(1)
|
||||
R.connect_to_ai(select_active_ai())
|
||||
|
||||
if(BORG_WIRE_CAMERA)
|
||||
if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes)
|
||||
|
||||
@@ -96,7 +96,6 @@
|
||||
if(BOMB_WIRE_ACTIVATE)
|
||||
if(!mended && B.active)
|
||||
holder.visible_message("<span class='notice'>[bicon(B)] The timer stops! The bomb has been defused!</span>")
|
||||
B.active = FALSE
|
||||
B.defused = TRUE
|
||||
B.update_icon()
|
||||
..()
|
||||
|
||||
@@ -83,10 +83,6 @@
|
||||
var/message = "[key_name(whom, 0)][isAntag(whom) ? "(ANTAG)" : ""][isLivingSSD(whom) ? "(SSD!)": ""]"
|
||||
return message
|
||||
|
||||
/proc/log_and_message_admins(var/message as text)
|
||||
/proc/log_and_message_admins(message)
|
||||
log_admin("[key_name(usr)] " + message)
|
||||
message_admins("[key_name_admin(usr)] " + message)
|
||||
|
||||
/proc/admin_log_and_message_admins(var/message as text)
|
||||
log_admin("[key_name(usr)] " + message)
|
||||
message_admins("[key_name_admin(usr)] " + message, 1)
|
||||
|
||||
@@ -72,12 +72,21 @@ DBConnection/proc/NewQuery(sql_query,cursor_handler=src.default_cursor) return n
|
||||
|
||||
|
||||
DBQuery/New(sql_query,DBConnection/connection_handler,cursor_handler)
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>DB query blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to create a DB query via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to create a DB query via advanced proc-call")
|
||||
return
|
||||
if(sql_query) src.sql = sql_query
|
||||
if(connection_handler) src.db_connection = connection_handler
|
||||
if(cursor_handler) src.default_cursor = cursor_handler
|
||||
_db_query = _dm_db_new_query()
|
||||
return ..()
|
||||
|
||||
DBQuery/CanProcCall()
|
||||
// dont even try it
|
||||
return FALSE
|
||||
|
||||
|
||||
DBQuery
|
||||
var/sql // The sql query being executed.
|
||||
|
||||
@@ -13,35 +13,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
|
||||
*/
|
||||
|
||||
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
|
||||
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
|
||||
GLOBAL_LIST_EMPTY(teleportlocs)
|
||||
/hook/startup/proc/process_teleport_locs()
|
||||
for(var/area/AR in world)
|
||||
if(AR.no_teleportlocs) continue
|
||||
if(GLOB.teleportlocs.Find(AR.name)) continue
|
||||
var/turf/picked = safepick(get_area_turfs(AR.type))
|
||||
if(picked && is_station_level(picked.z))
|
||||
GLOB.teleportlocs += AR.name
|
||||
GLOB.teleportlocs[AR.name] = AR
|
||||
|
||||
GLOB.teleportlocs = sortAssoc(GLOB.teleportlocs)
|
||||
|
||||
return 1
|
||||
|
||||
GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/hook/startup/proc/process_ghost_teleport_locs()
|
||||
for(var/area/AR in world)
|
||||
if(GLOB.ghostteleportlocs.Find(AR.name)) continue
|
||||
var/list/turfs = get_area_turfs(AR.type)
|
||||
if(turfs.len)
|
||||
GLOB.ghostteleportlocs += AR.name
|
||||
GLOB.ghostteleportlocs[AR.name] = AR
|
||||
|
||||
GLOB.ghostteleportlocs = sortAssoc(GLOB.ghostteleportlocs)
|
||||
|
||||
return 1
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -555,6 +526,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/exploration/methlab
|
||||
name = "\improper Abandoned Drug Lab"
|
||||
icon_state = "green"
|
||||
there_can_be_many = TRUE
|
||||
|
||||
//Abductors
|
||||
/area/abductor_ship
|
||||
@@ -678,10 +650,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "Engineering Maintenance"
|
||||
icon_state = "amaint"
|
||||
|
||||
/area/maintenance/engi_shuttle
|
||||
name = "Engineering Shuttle Access"
|
||||
icon_state = "maint_e_shuttle"
|
||||
|
||||
/area/maintenance/storage
|
||||
name = "Atmospherics Maintenance"
|
||||
icon_state = "green"
|
||||
@@ -1230,6 +1198,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "\improper Abandoned Teleporter"
|
||||
icon_state = "teleporter"
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/signal.ogg')
|
||||
there_can_be_many = TRUE
|
||||
|
||||
/area/toxins/explab
|
||||
name = "\improper E.X.P.E.R.I-MENTOR Lab"
|
||||
@@ -1740,6 +1709,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/djstation
|
||||
name = "\improper Ruskie DJ Station"
|
||||
icon_state = "DJ"
|
||||
there_can_be_many = TRUE
|
||||
|
||||
/area/djstation/solars
|
||||
name = "\improper Ruskie DJ Station Solars"
|
||||
@@ -1816,6 +1786,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/derelict/teleporter
|
||||
name = "\improper Derelict Teleporter"
|
||||
icon_state = "teleporter"
|
||||
there_can_be_many = TRUE
|
||||
|
||||
/area/derelict/eva
|
||||
name = "Derelict EVA Storage"
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
if(!reactor.has_overloaded)
|
||||
reactor.overload(containment_failure)
|
||||
else
|
||||
log_debug("Depot: [src] called activate_self_destruct with no reactor.");
|
||||
log_debug("Depot: [src] called activate_self_destruct with no reactor.")
|
||||
message_admins("<span class='adminnotice'>Syndicate Depot lacks reactor to initiate self-destruct. Must be destroyed manually.</span>")
|
||||
updateicon()
|
||||
|
||||
|
||||
@@ -118,17 +118,15 @@
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
eject_occupant()
|
||||
|
||||
eject_occupant(usr)
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/dna_scannernew/Destroy()
|
||||
eject_occupant()
|
||||
eject_occupant(null, TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/eject_occupant()
|
||||
go_out()
|
||||
/obj/machinery/dna_scannernew/proc/eject_occupant(user, force)
|
||||
go_out(user, force)
|
||||
for(var/obj/O in src)
|
||||
if(!istype(O,/obj/item/circuitboard/clonescanner) && \
|
||||
!istype(O,/obj/item/stock_parts) && \
|
||||
@@ -271,15 +269,15 @@
|
||||
|
||||
occupant.notify_ghost_cloning(source = src)
|
||||
|
||||
/obj/machinery/dna_scannernew/proc/go_out()
|
||||
/obj/machinery/dna_scannernew/proc/go_out(mob/user, force)
|
||||
if(!occupant)
|
||||
to_chat(usr, "<span class='warning'>The scanner is empty!</span>")
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The scanner is empty!</span>")
|
||||
return
|
||||
|
||||
if(locked)
|
||||
to_chat(usr, "<span class='warning'>The scanner is locked!</span>")
|
||||
if(locked && !force)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>The scanner is locked!</span>")
|
||||
return
|
||||
|
||||
occupant.forceMove(loc)
|
||||
occupant = null
|
||||
icon_state = "scanner_open"
|
||||
@@ -489,7 +487,7 @@
|
||||
occupantData["uniqueIdentity"] = connected.occupant.dna.uni_identity
|
||||
occupantData["structuralEnzymes"] = connected.occupant.dna.struc_enzymes
|
||||
occupantData["radiationLevel"] = connected.occupant.radiation
|
||||
data["occupant"] = occupantData;
|
||||
data["occupant"] = occupantData
|
||||
|
||||
data["isBeakerLoaded"] = connected.beaker ? 1 : 0
|
||||
data["beakerLabel"] = null
|
||||
@@ -751,7 +749,7 @@
|
||||
return TRUE
|
||||
|
||||
if(href_list["ejectOccupant"])
|
||||
connected.eject_occupant()
|
||||
connected.eject_occupant(usr)
|
||||
return TRUE
|
||||
|
||||
// Transfer Buffer Management
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life()
|
||||
..()
|
||||
var/obj/item/organ/internal/eyes/E = owner.get_int_organ(/obj/item/organ/internal/eyes)
|
||||
if(owner.eye_blind || owner.eye_blurry || (BLINDNESS in owner.mutations) || (NEARSIGHTED in owner.mutations) || (E.damage > 0))
|
||||
if(owner.eye_blind || owner.eye_blurry || (BLINDNESS in owner.mutations) || (NEARSIGHTED in owner.mutations) || (E && E.damage > 0))
|
||||
owner.reagents.add_reagent("oculine", 1)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat()
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
if(loc == summoner)
|
||||
if(toggle)
|
||||
a_intent = INTENT_HARM
|
||||
hud_used.action_intent.icon_state = a_intent;
|
||||
hud_used.action_intent.icon_state = a_intent
|
||||
speed = 0
|
||||
damage_transfer = 0.7
|
||||
if(adminseal)
|
||||
@@ -76,7 +76,7 @@
|
||||
toggle = FALSE
|
||||
else
|
||||
a_intent = INTENT_HELP
|
||||
hud_used.action_intent.icon_state = a_intent;
|
||||
hud_used.action_intent.icon_state = a_intent
|
||||
speed = 1
|
||||
damage_transfer = 1
|
||||
if(adminseal)
|
||||
|
||||
@@ -1,5 +1,21 @@
|
||||
/datum/controller/subsystem/ticker/proc/scoreboard()
|
||||
|
||||
//Thresholds for Score Ratings
|
||||
#define SINGULARITY_DESERVES_BETTER -3500
|
||||
#define SINGULARITY_FODDER -3000
|
||||
#define ALL_FIRED -2500
|
||||
#define WASTE_OF_OXYGEN -2000
|
||||
#define HEAP_OF_SCUM -1500
|
||||
#define LAB_MONKEYS -1000
|
||||
#define UNDESIREABLES -500
|
||||
#define SERVANTS_OF_SCIENCE 500
|
||||
#define GOOD_BUNCH 1000
|
||||
#define MACHINE_THIRTEEN 1500
|
||||
#define PROMOTIONS_FOR_EVERYONE 2000
|
||||
#define AMBASSADORS_OF_DISCOVERY 3000
|
||||
#define PRIDE_OF_SCIENCE 4000
|
||||
#define NANOTRANSEN_FINEST 5000
|
||||
|
||||
//Print a list of antagonists to the server log
|
||||
var/list/total_antagonists = list()
|
||||
//Look into all mobs in world, dead or alive
|
||||
@@ -93,15 +109,14 @@
|
||||
|
||||
|
||||
// Bonus Modifiers
|
||||
//var/traitorwins = score_traitorswon
|
||||
var/deathpoints = GLOB.score_deadcrew * 25 //done
|
||||
var/researchpoints = GLOB.score_researchdone * 30
|
||||
var/eventpoints = GLOB.score_eventsendured * 50
|
||||
var/escapoints = GLOB.score_escapees * 25 //done
|
||||
var/harvests = GLOB.score_stuffharvested * 5 //done
|
||||
var/harvests = GLOB.score_stuffharvested * 5
|
||||
var/shipping = GLOB.score_stuffshipped * 5
|
||||
var/mining = GLOB.score_oremined * 2 //done
|
||||
var/meals = GLOB.score_meals * 5 //done, but this only counts cooked meals, not drinks served
|
||||
var/mining = GLOB.score_oremined * 2 //done, might want polishing
|
||||
var/meals = GLOB.score_meals * 5
|
||||
var/power = GLOB.score_powerloss * 20
|
||||
var/messpoints
|
||||
if(GLOB.score_mess != 0)
|
||||
@@ -121,13 +136,9 @@
|
||||
GLOB.score_crewscore += 2500
|
||||
GLOB.score_powerbonus = 1
|
||||
|
||||
if(GLOB.score_mess == 0)
|
||||
GLOB.score_crewscore += 3000
|
||||
GLOB.score_messbonus = 1
|
||||
|
||||
|
||||
GLOB.score_crewscore += meals
|
||||
if(GLOB.score_allarrested)
|
||||
if(GLOB.score_allarrested) // This only seems to be implemented for Rev and Nukies. -DaveKorhal
|
||||
GLOB.score_crewscore *= 3 // This needs to be here for the bonus to be applied properly
|
||||
|
||||
|
||||
@@ -177,26 +188,19 @@
|
||||
|
||||
dat += {"
|
||||
<b><u>General Statistics</u></b><br>
|
||||
<u>The Good:</u><br>
|
||||
|
||||
<b>Useful Items Shipped:</b> [GLOB.score_stuffshipped] ([GLOB.score_stuffshipped * 5] Points)<br>
|
||||
<b>Hydroponics Harvests:</b> [GLOB.score_stuffharvested] ([GLOB.score_stuffharvested * 5] Points)<br>
|
||||
<b>Ore Mined:</b> [GLOB.score_oremined] ([GLOB.score_oremined * 2] Points)<br>
|
||||
<b>Refreshments Prepared:</b> [GLOB.score_meals] ([GLOB.score_meals * 5] Points)<br>
|
||||
<b>Research Completed:</b> [GLOB.score_researchdone] ([GLOB.score_researchdone * 30] Points)<br>"}
|
||||
<u>The Good</u><br>
|
||||
<b>Ore Mined:</b> [GLOB.score_oremined] ([GLOB.score_oremined * 2] Points)<br>"}
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_ENDGAME) dat += "<b>Shuttle Escapees:</b> [GLOB.score_escapees] ([GLOB.score_escapees * 25] Points)<br>"
|
||||
dat += {"<b>Random Events Endured:</b> [GLOB.score_eventsendured] ([GLOB.score_eventsendured * 50] Points)<br>
|
||||
<b>Whole Station Powered:</b> [GLOB.score_powerbonus ? "Yes" : "No"] ([GLOB.score_powerbonus * 2500] Points)<br>
|
||||
<b>Ultra-Clean Station:</b> [GLOB.score_mess ? "No" : "Yes"] ([GLOB.score_messbonus * 3000] Points)<br><br>
|
||||
<U>The bad:</U><br>
|
||||
dat += {"
|
||||
<b>Whole Station Powered:</b> [GLOB.score_powerbonus ? "Yes" : "No"] ([GLOB.score_powerbonus * 2500] Points)<br><br>
|
||||
|
||||
<U>The Bad</U><br>
|
||||
<b>Dead bodies on Station:</b> [GLOB.score_deadcrew] (-[GLOB.score_deadcrew * 25] Points)<br>
|
||||
<b>Uncleaned Messes:</b> [GLOB.score_mess] (-[GLOB.score_mess] Points)<br>
|
||||
<b>Station Power Issues:</b> [GLOB.score_powerloss] (-[GLOB.score_powerloss * 20] Points)<br>
|
||||
<b>Rampant Diseases:</b> [GLOB.score_disease] (-[GLOB.score_disease * 30] Points)<br>
|
||||
<b>AI Destroyed:</b> [GLOB.score_deadaipenalty ? "Yes" : "No"] (-[GLOB.score_deadaipenalty * 250] Points)<br><br>
|
||||
<U>The Weird</U><br>
|
||||
|
||||
<U>The Weird</U><br>
|
||||
<b>Food Eaten:</b> [GLOB.score_foodeaten] bites/sips<br>
|
||||
<b>Times a Clown was Abused:</b> [GLOB.score_clownabuse]<br><br>
|
||||
"}
|
||||
@@ -218,22 +222,36 @@
|
||||
|
||||
var/score_rating = "The Aristocrats!"
|
||||
switch(GLOB.score_crewscore)
|
||||
if(-99999 to -50000) score_rating = "Even the Singularity Deserves Better"
|
||||
if(-49999 to -5000) score_rating = "Singularity Fodder"
|
||||
if(-4999 to -1000) score_rating = "You're All Fired"
|
||||
if(-999 to -500) score_rating = "A Waste of Perfectly Good Oxygen"
|
||||
if(-499 to -250) score_rating = "A Wretched Heap of Scum and Incompetence"
|
||||
if(-249 to -100) score_rating = "Outclassed by Lab Monkeys"
|
||||
if(-99 to -21) score_rating = "The Undesirables"
|
||||
if(-20 to 20) score_rating = "Ambivalently Average"
|
||||
if(21 to 99) score_rating = "Not Bad, but Not Good"
|
||||
if(100 to 249) score_rating = "Skillful Servants of Science"
|
||||
if(250 to 499) score_rating = "Best of a Good Bunch"
|
||||
if(500 to 999) score_rating = "Lean Mean Machine Thirteen"
|
||||
if(1000 to 4999) score_rating = "Promotions for Everyone"
|
||||
if(5000 to 9999) score_rating = "Ambassadors of Discovery"
|
||||
if(10000 to 49999) score_rating = "The Pride of Science Itself"
|
||||
if(50000 to INFINITY) score_rating = "Nanotrasen's Finest"
|
||||
if(-99999 to SINGULARITY_DESERVES_BETTER) score_rating = "Even the Singularity Deserves Better"
|
||||
if(SINGULARITY_DESERVES_BETTER+1 to SINGULARITY_FODDER) score_rating = "Singularity Fodder"
|
||||
if(SINGULARITY_FODDER+1 to ALL_FIRED) score_rating = "You're All Fired"
|
||||
if(ALL_FIRED+1 to WASTE_OF_OXYGEN) score_rating = "A Waste of Perfectly Good Oxygen"
|
||||
if(WASTE_OF_OXYGEN+1 to HEAP_OF_SCUM) score_rating = "A Wretched Heap of Scum and Incompetence"
|
||||
if(HEAP_OF_SCUM+1 to LAB_MONKEYS) score_rating = "Outclassed by Lab Monkeys"
|
||||
if(LAB_MONKEYS+1 to UNDESIREABLES) score_rating = "The Undesirables"
|
||||
if(UNDESIREABLES+1 to SERVANTS_OF_SCIENCE-1) score_rating = "Ambivalently Average"
|
||||
if(SERVANTS_OF_SCIENCE to GOOD_BUNCH-1) score_rating = "Skillful Servants of Science"
|
||||
if(GOOD_BUNCH to MACHINE_THIRTEEN-1) score_rating = "Best of a Good Bunch"
|
||||
if(MACHINE_THIRTEEN to PROMOTIONS_FOR_EVERYONE-1) score_rating = "Lean Mean Machine Thirteen"
|
||||
if(PROMOTIONS_FOR_EVERYONE to AMBASSADORS_OF_DISCOVERY-1) score_rating = "Promotions for Everyone"
|
||||
if(AMBASSADORS_OF_DISCOVERY to PRIDE_OF_SCIENCE-1) score_rating = "Ambassadors of Discovery"
|
||||
if(PRIDE_OF_SCIENCE to NANOTRANSEN_FINEST-1) score_rating = "The Pride of Science Itself"
|
||||
if(NANOTRANSEN_FINEST to INFINITY) score_rating = "Nanotrasen's Finest"
|
||||
|
||||
dat += "<b><u>RATING:</u></b> [score_rating]"
|
||||
src << browse(dat, "window=roundstats;size=500x600")
|
||||
|
||||
#undef SINGULARITY_DESERVES_BETTER
|
||||
#undef SINGULARITY_FODDER
|
||||
#undef ALL_FIRED
|
||||
#undef WASTE_OF_OXYGEN
|
||||
#undef HEAP_OF_SCUM
|
||||
#undef LAB_MONKEYS
|
||||
#undef UNDESIREABLES
|
||||
#undef SERVANTS_OF_SCIENCE
|
||||
#undef GOOD_BUNCH
|
||||
#undef MACHINE_THIRTEEN
|
||||
#undef PROMOTIONS_FOR_EVERYONE
|
||||
#undef AMBASSADORS_OF_DISCOVERY
|
||||
#undef PRIDE_OF_SCIENCE
|
||||
#undef NANOTRANSEN_FINEST
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
/datum/spellbook_entry
|
||||
var/name = "Entry Name"
|
||||
|
||||
var/is_ragin_restricted = FALSE // FALSE if this is buyable on ragin mages, TRUE if it's not.
|
||||
var/spell_type = null
|
||||
var/desc = ""
|
||||
var/category = "Offensive"
|
||||
var/log_name = "XX" //What it shows up as in logs
|
||||
var/cost = 2
|
||||
var/refundable = TRUE
|
||||
var/surplus = -1 // -1 for infinite, not used by anything atm
|
||||
var/obj/effect/proc_holder/spell/S = null //Since spellbooks can be used by only one person anyway we can track the actual spell
|
||||
var/buy_word = "Learn"
|
||||
var/limit //used to prevent a spellbook_entry from being bought more than X times with one wizard spellbook
|
||||
|
||||
/datum/spellbook_entry/proc/IsSpellAvailable() // For config prefs / gamemode restrictions - these are round applied
|
||||
return TRUE
|
||||
|
||||
/datum/spellbook_entry/proc/CanBuy(mob/living/carbon/human/user, obj/item/spellbook/book) // Specific circumstances
|
||||
if(book.uses < cost || limit == 0)
|
||||
return FALSE
|
||||
@@ -218,12 +214,7 @@
|
||||
spell_type = /obj/effect/proc_holder/spell/targeted/lichdom
|
||||
log_name = "LD"
|
||||
category = "Defensive"
|
||||
|
||||
/datum/spellbook_entry/lichdom/IsSpellAvailable()
|
||||
if(SSticker.mode.name == "ragin' mages")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/datum/spellbook_entry/magicm
|
||||
name = "Magic Missile"
|
||||
@@ -325,14 +316,7 @@
|
||||
desc = "Spook the crew out by making them see dead people. Be warned, ghosts are capricious and occasionally vindicative, and some will use their incredibly minor abilities to frustrate you."
|
||||
cost = 0
|
||||
log_name = "SGH"
|
||||
|
||||
/datum/spellbook_entry/summon/ghosts/IsSpellAvailable()
|
||||
if(!SSticker.mode) // In case spellbook is placed on map
|
||||
return FALSE
|
||||
if(SSticker.mode.name == "ragin' mages")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/datum/spellbook_entry/summon/ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
|
||||
new /datum/event/wizard/ghost()
|
||||
@@ -345,14 +329,7 @@
|
||||
name = "Summon Guns"
|
||||
desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. There is a good chance that they will shoot each other first."
|
||||
log_name = "SG"
|
||||
|
||||
/datum/spellbook_entry/summon/guns/IsSpellAvailable()
|
||||
if(!SSticker.mode) // In case spellbook is placed on map
|
||||
return FALSE
|
||||
if(SSticker.mode.name == "ragin' mages")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/datum/spellbook_entry/summon/guns/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
|
||||
feedback_add_details("wizard_spell_learned", log_name)
|
||||
@@ -366,14 +343,7 @@
|
||||
name = "Summon Magic"
|
||||
desc = "Share the wonders of magic with the crew and show them why they aren't to be trusted with it at the same time."
|
||||
log_name = "SU"
|
||||
|
||||
/datum/spellbook_entry/summon/magic/IsSpellAvailable()
|
||||
if(!SSticker.mode) // In case spellbook is placed on map
|
||||
return FALSE
|
||||
if(SSticker.mode.name == "ragin' mages")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/datum/spellbook_entry/summon/magic/Buy(mob/living/carbon/human/user, obj/item/spellbook/book)
|
||||
feedback_add_details("wizard_spell_learned", log_name)
|
||||
@@ -400,8 +370,6 @@
|
||||
dat += "<b>[name]</b>"
|
||||
dat += " Cost:[cost]<br>"
|
||||
dat += "<i>[desc]</i><br>"
|
||||
if(surplus>=0)
|
||||
dat += "[surplus] left.<br>"
|
||||
return dat
|
||||
|
||||
//Artefacts
|
||||
@@ -642,11 +610,12 @@
|
||||
var/entry_types = subtypesof(/datum/spellbook_entry) - /datum/spellbook_entry/item - /datum/spellbook_entry/summon - /datum/spellbook_entry/loadout
|
||||
for(var/T in entry_types)
|
||||
var/datum/spellbook_entry/E = new T
|
||||
if(E.IsSpellAvailable())
|
||||
entries |= E
|
||||
categories |= E.category
|
||||
else
|
||||
if(GAMEMODE_IS_WIZARD && E.is_ragin_restricted)
|
||||
qdel(E)
|
||||
continue
|
||||
entries |= E
|
||||
categories |= E.category
|
||||
|
||||
main_tab = main_categories[1]
|
||||
tab = categories[1]
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
log_name = "DL"
|
||||
spells_path = list(/obj/effect/proc_holder/spell/targeted/lichdom, /obj/effect/proc_holder/spell/targeted/ethereal_jaunt, /obj/effect/proc_holder/spell/fireball, \
|
||||
/obj/effect/proc_holder/spell/targeted/rod_form, /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech, /obj/effect/proc_holder/spell/targeted/forcewall/greater)
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/datum/spellbook_entry/loadout/wands
|
||||
name = "Utility Focus : Wands"
|
||||
@@ -63,6 +64,7 @@
|
||||
/obj/effect/proc_holder/spell/targeted/summonitem, /obj/effect/proc_holder/spell/noclothes, /obj/effect/proc_holder/spell/targeted/lichdom/gunslinger)
|
||||
category = "Unique"
|
||||
destroy_spellbook = TRUE
|
||||
is_ragin_restricted = TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/lichdom/gunslinger/equip_lich(mob/living/carbon/human/H)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit)
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/hook/roundstart/proc/jobscaling()
|
||||
sleep(10 SECONDS) // give everyone time to finish spawning, and the lag to die down
|
||||
var/playercount = length(GLOB.clients)
|
||||
var/highpop_trigger = 80
|
||||
|
||||
if(playercount >= highpop_trigger)
|
||||
log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - loading highpop job config");
|
||||
SSjobs.LoadJobs("config/jobs_highpop.txt")
|
||||
else
|
||||
log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - keeping standard job config");
|
||||
return 1
|
||||
@@ -2,10 +2,11 @@
|
||||
|
||||
GLOBAL_LIST_EMPTY(whitelist)
|
||||
|
||||
/hook/startup/proc/loadWhitelist()
|
||||
/proc/init_whitelists()
|
||||
if(config.usewhitelist)
|
||||
load_whitelist()
|
||||
return 1
|
||||
if(config.usealienwhitelist)
|
||||
load_alienwhitelist()
|
||||
|
||||
/proc/load_whitelist()
|
||||
GLOB.whitelist = file2list(WHITELISTFILE)
|
||||
@@ -48,11 +49,6 @@ GLOBAL_LIST_EMPTY(whitelist)
|
||||
|
||||
GLOBAL_LIST_EMPTY(alien_whitelist)
|
||||
|
||||
/hook/startup/proc/loadAlienWhitelist()
|
||||
if(config.usealienwhitelist)
|
||||
load_alienwhitelist()
|
||||
return 1
|
||||
|
||||
/proc/load_alienwhitelist()
|
||||
var/text = file2text("config/alienwhitelist.txt")
|
||||
if(!text)
|
||||
|
||||
@@ -346,6 +346,22 @@
|
||||
return
|
||||
// HOLOFLOOR DOES NOT GIVE A FUCK
|
||||
|
||||
/turf/simulated/floor/holofloor/space
|
||||
name = "\proper space"
|
||||
icon = 'icons/turf/space.dmi'
|
||||
icon_state = "0"
|
||||
plane = PLANE_SPACE
|
||||
|
||||
/turf/simulated/floor/holofloor/space/Initialize(mapload)
|
||||
icon_state = SPACE_ICON_STATE // so realistic
|
||||
. = ..()
|
||||
|
||||
/turf/simulated/floor/holofloor/space/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
|
||||
underlay_appearance.icon = 'icons/turf/space.dmi'
|
||||
underlay_appearance.icon_state = SPACE_ICON_STATE
|
||||
underlay_appearance.plane = PLANE_SPACE
|
||||
return TRUE
|
||||
|
||||
/obj/structure/table/holotable
|
||||
flags = NODECONSTRUCT
|
||||
canSmoothWith = list(/obj/structure/table/holotable)
|
||||
|
||||
@@ -153,6 +153,9 @@
|
||||
to_chat(user, "<span class='notice'>You screw the circuit board into place.</span>")
|
||||
state = SCREWED_CORE
|
||||
if(GLASS_CORE)
|
||||
var/area/R = get_area(src)
|
||||
message_admins("[key_name_admin(usr)] has completed an AI core in [R]: [ADMIN_COORDJMP(loc)].")
|
||||
log_game("[key_name(usr)] has completed an AI core in [R]: [COORD(loc)].")
|
||||
to_chat(user, "<span class='notice'>You connect the monitor.</span>")
|
||||
if(!brain)
|
||||
var/open_for_latejoin = alert(user, "Would you like this core to be open for latejoining AIs?", "Latejoin", "Yes", "Yes", "No") == "Yes"
|
||||
|
||||
@@ -52,7 +52,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
|
||||
//This is used to keep track of opened positions for jobs to allow instant closing
|
||||
//Assoc array: "JobName" = (int)<Opened Positions>
|
||||
var/list/opened_positions = list();
|
||||
var/list/opened_positions = list()
|
||||
|
||||
/obj/machinery/computer/card/proc/is_centcom()
|
||||
return istype(src, /obj/machinery/computer/card/centcom)
|
||||
|
||||
@@ -424,8 +424,6 @@
|
||||
else
|
||||
return menu_state
|
||||
|
||||
/proc/enable_prison_shuttle(var/mob/user);
|
||||
|
||||
/proc/call_shuttle_proc(var/mob/user, var/reason)
|
||||
if(GLOB.sent_strike_team == 1)
|
||||
to_chat(user, "<span class='warning'>Central Command will not allow the shuttle to be called. Consider all contracts terminated.</span>")
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
occupantData["toxLoss"] = occupant.getToxLoss()
|
||||
occupantData["fireLoss"] = occupant.getFireLoss()
|
||||
occupantData["bodyTemperature"] = occupant.bodytemperature
|
||||
data["occupant"] = occupantData;
|
||||
data["occupant"] = occupantData
|
||||
|
||||
data["cellTemperature"] = round(air_contents.temperature)
|
||||
data["cellTemperatureStatus"] = "good"
|
||||
|
||||
@@ -80,6 +80,7 @@ GLOBAL_LIST_EMPTY(airlock_overlays)
|
||||
var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock
|
||||
var/normal_integrity = AIRLOCK_INTEGRITY_N
|
||||
var/prying_so_hard = FALSE
|
||||
var/paintable = TRUE // If the airlock type can be painted with an airlock painter
|
||||
|
||||
var/image/old_frame_overlay //keep those in order to prevent unnecessary updating
|
||||
var/image/old_filling_overlay
|
||||
@@ -192,10 +193,10 @@ About the new airlock wires panel:
|
||||
return wires.IsIndexCut(wireIndex)
|
||||
|
||||
/obj/machinery/door/airlock/proc/canAIControl()
|
||||
return ((aiControlDisabled!=1) && (!isAllPowerLoss()));
|
||||
return ((aiControlDisabled!=1) && (!isAllPowerLoss()))
|
||||
|
||||
/obj/machinery/door/airlock/proc/canAIHack()
|
||||
return ((aiControlDisabled==1) && (!hackProof) && (!isAllPowerLoss()));
|
||||
return ((aiControlDisabled==1) && (!hackProof) && (!isAllPowerLoss()))
|
||||
|
||||
/obj/machinery/door/airlock/proc/arePowerSystemsOn()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
@@ -502,6 +503,36 @@ About the new airlock wires panel:
|
||||
sleep(6)
|
||||
update_icon(AIRLOCK_CLOSED)
|
||||
|
||||
|
||||
/// Called when a player uses an airlock painter on this airlock
|
||||
/obj/machinery/door/airlock/proc/change_paintjob(obj/item/airlock_painter/painter, mob/user)
|
||||
if((!in_range(src, user) && loc != user)) // user should be adjacent to the airlock.
|
||||
return
|
||||
|
||||
if(!painter.paint_setting)
|
||||
to_chat(user, "<span class='warning'>You need to select a paintjob first.</span>")
|
||||
return
|
||||
|
||||
if(!paintable)
|
||||
to_chat(user, "<span class='warning'>This type of airlock cannot be painted.</span>")
|
||||
return
|
||||
|
||||
var/obj/machinery/door/airlock/airlock = painter.available_paint_jobs["[painter.paint_setting]"] // get the airlock type path associated with the airlock name the user just chose
|
||||
var/obj/structure/door_assembly/assembly = initial(airlock.assemblytype)
|
||||
|
||||
if(airlock_material == "glass" && initial(assembly.noglass)) // prevents painting glass airlocks with a paint job that doesn't have a glass version, such as the freezer
|
||||
to_chat(user, "<span class='warning'>This paint job can only be applied to non-glass airlocks.</span>")
|
||||
return
|
||||
|
||||
if(do_after(user, 20, target = src))
|
||||
// applies the user-chosen airlock's icon, overlays and assemblytype to the src airlock
|
||||
painter.paint(user)
|
||||
icon = initial(airlock.icon)
|
||||
overlays_file = initial(airlock.overlays_file)
|
||||
assemblytype = initial(airlock.assemblytype)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/examine(mob/user)
|
||||
. = ..()
|
||||
if(emagged)
|
||||
@@ -882,6 +913,8 @@ About the new airlock wires panel:
|
||||
user.visible_message("<span class='notice'>[user] pins [C] to [src].</span>", "<span class='notice'>You pin [C] to [src].</span>")
|
||||
note = C
|
||||
update_icon()
|
||||
else if(istype(C, /obj/item/airlock_painter))
|
||||
change_paintjob(C, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@
|
||||
name = "gold airlock"
|
||||
icon = 'icons/obj/doors/airlocks/station/gold.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_gold
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/gold/glass
|
||||
opacity = 0
|
||||
@@ -124,6 +125,7 @@
|
||||
name = "silver airlock"
|
||||
icon = 'icons/obj/doors/airlocks/station/silver.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_silver
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/silver/glass
|
||||
opacity = 0
|
||||
@@ -135,6 +137,7 @@
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_diamond
|
||||
normal_integrity = 1000
|
||||
explosion_block = 2
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/diamond/glass
|
||||
normal_integrity = 950
|
||||
@@ -146,6 +149,7 @@
|
||||
desc = "And they said I was crazy."
|
||||
icon = 'icons/obj/doors/airlocks/station/uranium.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_uranium
|
||||
paintable = FALSE
|
||||
var/event_step = 20
|
||||
|
||||
/obj/machinery/door/airlock/uranium/New()
|
||||
@@ -169,6 +173,7 @@
|
||||
desc = "No way this can end badly."
|
||||
icon = 'icons/obj/doors/airlocks/station/plasma.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_plasma
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
..()
|
||||
@@ -214,6 +219,7 @@
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_bananium
|
||||
doorOpen = 'sound/items/bikehorn.ogg'
|
||||
doorClose = 'sound/items/bikehorn.ogg'
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/bananium/glass
|
||||
opacity = 0
|
||||
@@ -227,11 +233,13 @@
|
||||
doorDeni = null
|
||||
boltUp = null
|
||||
boltDown = null
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/sandstone
|
||||
name = "sandstone airlock"
|
||||
icon = 'icons/obj/doors/airlocks/station/sandstone.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_sandstone
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/sandstone/glass
|
||||
opacity = 0
|
||||
@@ -241,6 +249,7 @@
|
||||
name = "wooden airlock"
|
||||
icon = 'icons/obj/doors/airlocks/station/wood.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_wood
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/wood/glass
|
||||
opacity = 0
|
||||
@@ -252,6 +261,7 @@
|
||||
icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi'
|
||||
normal_integrity = 400
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/titanium/glass
|
||||
normal_integrity = 350
|
||||
@@ -317,6 +327,7 @@
|
||||
explosion_block = 2
|
||||
normal_integrity = 400 // reverse engieneerd: 400 * 1.5 (sec lvl 6) = 600 = original
|
||||
security_level = 6
|
||||
paintable = FALSE
|
||||
|
||||
//////////////////////////////////
|
||||
/*
|
||||
@@ -329,6 +340,7 @@
|
||||
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
|
||||
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_hatch
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/hatch/syndicate
|
||||
name = "syndicate hatch"
|
||||
@@ -400,6 +412,7 @@
|
||||
overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
|
||||
note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_mhatch
|
||||
paintable = FALSE
|
||||
|
||||
//////////////////////////////////
|
||||
/*
|
||||
@@ -415,6 +428,7 @@
|
||||
normal_integrity = 500
|
||||
security_level = 1
|
||||
damage_deflection = 30
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/highsecurity/red
|
||||
name = "secure armory airlock"
|
||||
@@ -457,6 +471,7 @@
|
||||
icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi'
|
||||
overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/door_assembly_shuttle
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/shuttle/glass
|
||||
opacity = 0
|
||||
@@ -475,6 +490,7 @@
|
||||
aiControlDisabled = 1
|
||||
normal_integrity = 700
|
||||
security_level = 1
|
||||
paintable = FALSE
|
||||
|
||||
//////////////////////////////////
|
||||
/*
|
||||
@@ -489,6 +505,7 @@
|
||||
damage_deflection = 10
|
||||
hackProof = TRUE
|
||||
aiControlDisabled = TRUE
|
||||
paintable = FALSE
|
||||
var/openingoverlaytype = /obj/effect/temp_visual/cult/door
|
||||
var/friendly = FALSE
|
||||
|
||||
@@ -575,6 +592,7 @@
|
||||
overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi'
|
||||
note_overlay_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi'
|
||||
assemblytype = /obj/structure/door_assembly/multi_tile
|
||||
paintable = FALSE
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/narsie_act()
|
||||
return
|
||||
|
||||
@@ -195,7 +195,7 @@ GLOBAL_LIST_EMPTY(holopads)
|
||||
for(var/mob/living/silicon/ai/AI in GLOB.ai_list)
|
||||
if(!AI.client)
|
||||
continue
|
||||
to_chat(AI, "<span class='info'>Your presence is requested at <a href='?src=\ref[AI];jumptoholopad=[UID()]'>\the [area]</a>.</span>")
|
||||
to_chat(AI, "<span class='info'>Your presence is requested at <a href='?src=[AI.UID()];jumptoholopad=[UID()]'>\the [area]</a>.</span>")
|
||||
else
|
||||
temp = "A request for AI presence was already sent recently.<br>"
|
||||
temp += "<a href='?src=[UID()];mainmenu=1'>Main Menu</a>"
|
||||
|
||||
@@ -59,7 +59,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
|
||||
var/announceAuth = 0 //Will be set to 1 when you authenticate yourself for announcements
|
||||
var/msgVerified = "" //Will contain the name of the person who varified it
|
||||
var/msgStamped = "" //If a message is stamped, this will contain the stamp name
|
||||
var/message = "";
|
||||
var/message = ""
|
||||
var/recipient = ""; //the department which will be receiving the message
|
||||
var/priority = -1 ; //Priority of the message being sent
|
||||
light_range = 0
|
||||
|
||||
@@ -20,6 +20,12 @@
|
||||
account = null
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/slot_machine/wrench_act(mob/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!I.tool_use_check(user, 0))
|
||||
return
|
||||
default_unfasten_wrench(user, I)
|
||||
|
||||
/obj/machinery/slot_machine/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
|
||||
@@ -77,11 +77,10 @@
|
||||
update_icon()
|
||||
try_detonate(TRUE)
|
||||
//Counter terrorists win
|
||||
else if(!active || defused)
|
||||
if(defused && (payload in src))
|
||||
else if(defused)
|
||||
active = FALSE
|
||||
if(payload in src)
|
||||
payload.defuse()
|
||||
countdown.stop()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/machinery/syndicatebomb/New()
|
||||
wires = new(src)
|
||||
|
||||
@@ -57,6 +57,9 @@
|
||||
* * zlevel - The input z level to test
|
||||
*/
|
||||
/obj/machinery/tcomms/core/proc/zlevel_reachable(zlevel)
|
||||
// Nothing is reachable if the core is offline, unpowered, or ion'd
|
||||
if(!active || (stat & NOPOWER) || ion)
|
||||
return FALSE
|
||||
if(zlevel in reachable_zlevels)
|
||||
return TRUE
|
||||
else
|
||||
@@ -113,7 +116,7 @@
|
||||
// Add all the linked relays in
|
||||
for(var/obj/machinery/tcomms/relay/R in linked_relays)
|
||||
// Only if the relay is active
|
||||
if(R.active)
|
||||
if(R.active && !(R.stat & NOPOWER))
|
||||
reachable_zlevels |= R.loc.z
|
||||
|
||||
|
||||
|
||||
@@ -76,6 +76,16 @@
|
||||
linked_core = null
|
||||
linked = FALSE
|
||||
|
||||
/**
|
||||
* Power Change Handler
|
||||
*
|
||||
* Proc which ensures the host core has its zlevels updated (icons are updated by parent call)
|
||||
*/
|
||||
/obj/machinery/tcomms/relay/power_change()
|
||||
..()
|
||||
if(linked_core)
|
||||
linked_core.refresh_zlevels()
|
||||
|
||||
//////////////
|
||||
// UI STUFF //
|
||||
//////////////
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
var/lights_power = 6
|
||||
var/emagged = FALSE
|
||||
var/frozen = FALSE
|
||||
var/repairing = FALSE
|
||||
|
||||
//inner atmos
|
||||
var/use_internal_tank = 0
|
||||
@@ -839,7 +840,11 @@
|
||||
if((obj_integrity >= max_integrity) && !internal_damage)
|
||||
to_chat(user, "<span class='notice'>[src] is at full integrity!</span>")
|
||||
return
|
||||
if(repairing)
|
||||
to_chat(user, "<span class='notice'>[src] is currently being repaired!</span>")
|
||||
return
|
||||
WELDER_ATTEMPT_REPAIR_MESSAGE
|
||||
repairing = TRUE
|
||||
if(I.use_tool(src, user, 15, volume = I.tool_volume))
|
||||
if(internal_damage & MECHA_INT_TANK_BREACH)
|
||||
clearInternalDamage(MECHA_INT_TANK_BREACH)
|
||||
@@ -849,6 +854,7 @@
|
||||
obj_integrity += min(10, max_integrity - obj_integrity)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] is at full integrity!</span>")
|
||||
repairing = FALSE
|
||||
|
||||
/obj/mecha/mech_melee_attack(obj/mecha/M)
|
||||
if(!has_charge(melee_energy_drain))
|
||||
|
||||
@@ -1134,7 +1134,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/foamedmetal/attack_alien(mob/living/carbon/alien/humanoid/M)
|
||||
M.visible_message("<span class='danger'>[M] tears apart \the [src]!</span>");
|
||||
M.visible_message("<span class='danger'>[M] tears apart \the [src]!</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5)
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
// Airlock painter
|
||||
|
||||
/obj/item/airlock_painter
|
||||
name = "airlock painter"
|
||||
desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on a completed airlock to change its paintjob."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "airlock_painter"
|
||||
item_state = "airlock_painter"
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
usesound = 'sound/effects/spray2.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
|
||||
var/paint_setting
|
||||
|
||||
// All the different paint jobs that an airlock painter can apply.
|
||||
// If the airlock you're using it on is glass, the new paint job will also be glass
|
||||
var/list/available_paint_jobs = list(
|
||||
"Atmospherics" = /obj/machinery/door/airlock/atmos,
|
||||
"Command" = /obj/machinery/door/airlock/command,
|
||||
"Engineering" = /obj/machinery/door/airlock/engineering,
|
||||
"External" = /obj/machinery/door/airlock/external,
|
||||
"External Maintenance"= /obj/machinery/door/airlock/maintenance/external,
|
||||
"Freezer" = /obj/machinery/door/airlock/freezer,
|
||||
"Maintenance" = /obj/machinery/door/airlock/maintenance,
|
||||
"Medical" = /obj/machinery/door/airlock/medical,
|
||||
"Mining" = /obj/machinery/door/airlock/mining,
|
||||
"Public" = /obj/machinery/door/airlock/public,
|
||||
"Research" = /obj/machinery/door/airlock/research,
|
||||
"Science" = /obj/machinery/door/airlock/science,
|
||||
"Security" = /obj/machinery/door/airlock/security,
|
||||
"Standard" = /obj/machinery/door/airlock,
|
||||
)
|
||||
|
||||
//Only call this if you are certain that the painter will be used right after this check!
|
||||
/obj/item/airlock_painter/proc/paint(mob/user)
|
||||
playsound(loc, usesound, 30, TRUE)
|
||||
return TRUE
|
||||
|
||||
/obj/item/airlock_painter/attack_self(mob/user)
|
||||
paint_setting = input(user, "Please select a paintjob for this airlock.") as null|anything in available_paint_jobs
|
||||
if(!paint_setting)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>The [paint_setting] paint setting has been selected.</span>")
|
||||
|
||||
/obj/item/airlock_painter/suicide_act(mob/user)
|
||||
|
||||
var/obj/item/organ/internal/lungs/L = user.get_organ_slot("lungs")
|
||||
var/lungs_name = "\improper[L.name]"
|
||||
|
||||
if(L)
|
||||
user.visible_message("<span class='suicide'>[user] is inhaling toner from [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
// Once you've inhaled the toner, you throw up your lungs
|
||||
// and then die.
|
||||
|
||||
// they managed to lose their lungs between then and now. Good job.
|
||||
if(!L)
|
||||
return FALSE
|
||||
|
||||
L.remove(user)
|
||||
|
||||
// make some colorful reagent, and apply it to the lungs
|
||||
L.create_reagents(10)
|
||||
L.reagents.add_reagent("colorful_reagent", 10)
|
||||
L.reagents.reaction(L, REAGENT_TOUCH, 1)
|
||||
|
||||
user.emote("scream")
|
||||
user.visible_message("<span class='suicide'>[user] vomits out [user.p_their()] [lungs_name]!</span>")
|
||||
playsound(user.loc, 'sound/effects/splat.ogg', 50, TRUE)
|
||||
|
||||
// make some vomit under the player, and apply colorful reagent
|
||||
var/obj/effect/decal/cleanable/vomit/V = new(get_turf(user))
|
||||
V.create_reagents(10)
|
||||
V.reagents.add_reagent("colorful_reagent", 10)
|
||||
V.reagents.reaction(V, REAGENT_TOUCH, 1)
|
||||
|
||||
L.forceMove(get_turf(user))
|
||||
|
||||
return OXYLOSS
|
||||
else
|
||||
return SHAME
|
||||
@@ -33,8 +33,6 @@
|
||||
if(H && H.mind && H.mind.miming)
|
||||
to_chat(user, "<span class='warning'>Your vow of silence prevents you from speaking.</span>")
|
||||
return
|
||||
if(H.mind)
|
||||
span = H.mind.speech_span
|
||||
if((COMIC in H.mutations) || H.get_int_organ(/obj/item/organ/internal/cyberimp/brain/clown_voice))
|
||||
span = "sans"
|
||||
if(spamcheck)
|
||||
|
||||
@@ -272,7 +272,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
|
||||
tcm.sender_job = "Automated Announcement"
|
||||
tcm.vname = "synthesized voice"
|
||||
tcm.data = SIGNALTYPE_AINOTRACK
|
||||
// Datum radios dont have a location (obviously
|
||||
// Datum radios dont have a location (obviously)
|
||||
if(loc && loc.z)
|
||||
tcm.source_level = loc.z // For anyone that reads this: This used to pull from a LIST from the CONFIG DATUM. WHYYYYYYYYY!!!!!!!! -aa
|
||||
else
|
||||
|
||||
@@ -253,7 +253,16 @@
|
||||
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
|
||||
var/datum/ai_laws/laws_to_give
|
||||
if(M.syndiemmi)
|
||||
aisync = FALSE
|
||||
lawsync = FALSE
|
||||
laws_to_give = new /datum/ai_laws/syndicate_override
|
||||
|
||||
if(!aisync)
|
||||
lawsync = FALSE
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1, ai_to_sync_to = forced_ai)
|
||||
if(!O)
|
||||
return
|
||||
|
||||
@@ -263,24 +272,15 @@
|
||||
if(istype(task))
|
||||
task.unit_completed()
|
||||
|
||||
if(M.syndiemmi)
|
||||
aisync = 0
|
||||
lawsync = 0
|
||||
O.laws = new /datum/ai_laws/syndicate_override
|
||||
|
||||
O.invisibility = 0
|
||||
//Transfer debug settings to new mob
|
||||
O.custom_name = created_name
|
||||
O.rename_character(O.real_name, O.get_default_name())
|
||||
O.locked = panel_locked
|
||||
if(!aisync)
|
||||
lawsync = 0
|
||||
O.connected_ai = null
|
||||
else
|
||||
O.notify_ai(1)
|
||||
if(forced_ai)
|
||||
O.connected_ai = forced_ai
|
||||
if(!lawsync && !M.syndiemmi)
|
||||
|
||||
if(laws_to_give)
|
||||
O.laws = laws_to_give
|
||||
else if(!lawsync)
|
||||
O.lawupdate = 0
|
||||
O.make_laws()
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
if(..())
|
||||
return
|
||||
if(!R.allow_rename)
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>");
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>")
|
||||
return 0
|
||||
R.notify_ai(3, R.name, heldname)
|
||||
R.name = heldname
|
||||
@@ -196,7 +196,7 @@
|
||||
if(R.emagged)
|
||||
return
|
||||
if(R.weapons_unlock)
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>");
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>")
|
||||
return
|
||||
R.emagged = 1
|
||||
return TRUE
|
||||
|
||||
@@ -31,6 +31,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
var/smoketime = 150
|
||||
var/chem_volume = 60
|
||||
var/list/list_reagents = list("nicotine" = 40)
|
||||
var/first_puff = TRUE // the first puff is a bit more reagents ingested
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
@@ -194,8 +195,9 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
if(reagents && reagents.total_volume) // check if it has any reagents at all
|
||||
if(is_being_smoked) // if it's being smoked, transfer reagents to the mob
|
||||
var/mob/living/carbon/C = loc
|
||||
for (var/datum/reagent/R in reagents.reagent_list)
|
||||
reagents.trans_id_to(C, R.id, max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
reagents.trans_id_to(C, R.id, first_puff ? 1 : max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem
|
||||
first_puff = FALSE
|
||||
if(!reagents.total_volume) // There were reagents, but now they're gone
|
||||
to_chat(C, "<span class='notice'>Your [name] loses its flavor.</span>")
|
||||
else // else just remove some of the reagents
|
||||
@@ -377,6 +379,7 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
to_chat(user, "<span class='notice'>You refill the pipe with tobacco.</span>")
|
||||
reagents.add_reagent("nicotine", chem_volume)
|
||||
smoketime = initial(smoketime)
|
||||
first_puff = TRUE
|
||||
|
||||
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/reagent_containers))
|
||||
|
||||
@@ -230,7 +230,7 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/structure/closet/attack_ai(mob/user)
|
||||
if(isrobot(user) && Adjacent(user)) //Robots can open/close it, but not the AI
|
||||
if(isrobot(user) && Adjacent(user) && !istype(user.loc, /obj/machinery/atmospherics)) //Robots can open/close it, but not the AI
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/closet/relaymove(mob/user)
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
food_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
break
|
||||
if(!success)
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/reagent_containers/food/drinks))
|
||||
@@ -51,7 +51,7 @@
|
||||
drink_slots[s]=I
|
||||
update_icon()
|
||||
success = 1
|
||||
break;
|
||||
break
|
||||
if(!success)
|
||||
to_chat(user, fail_msg)
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
|
||||
@@ -69,9 +69,9 @@
|
||||
if(isliving(G.affecting))
|
||||
if(!has_buckled_mobs())
|
||||
if(do_mob(user, src, 120))
|
||||
if(spike(G.affecting))
|
||||
G.affecting.visible_message("<span class='danger'>[user] slams [G.affecting] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
|
||||
qdel(G)
|
||||
var/mob/living/affected = G.affecting
|
||||
if(spike(affected))
|
||||
affected.visible_message("<span class='danger'>[user] slams [affected] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user