mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
Merge branch 'master' into character-slot-clearing
This commit is contained in:
@@ -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
@@ -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";
|
||||
|
||||
+2312
-2161
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)
|
||||
|
||||
@@ -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,11 @@
|
||||
|
||||
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)
|
||||
|
||||
for(var/path in (subtypesof(/datum/surgery)))
|
||||
GLOB.surgeries_list += new path()
|
||||
|
||||
@@ -30,6 +35,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 +60,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()
|
||||
|
||||
+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)
|
||||
|
||||
@@ -2016,3 +2016,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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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 ..()
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -182,3 +182,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
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -487,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
|
||||
|
||||
@@ -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,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"
|
||||
|
||||
@@ -192,10 +192,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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 //
|
||||
//////////////
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/floor/indestructible/necropolis/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -52,8 +53,8 @@
|
||||
icon_state = "necro[rand(2,3)]"
|
||||
|
||||
/turf/simulated/floor/indestructible/necropolis/air
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
oxygen = MOLES_O2STANDARD
|
||||
nitrogen = MOLES_N2STANDARD
|
||||
temperature = T20C
|
||||
|
||||
/turf/simulated/floor/indestructible/boss //you put stone tiles on this and use it as a base
|
||||
@@ -64,6 +65,7 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/floor/indestructible/boss/air
|
||||
oxygen = MOLES_O2STANDARD
|
||||
@@ -77,6 +79,7 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
smooth = SMOOTH_TRUE
|
||||
|
||||
/turf/simulated/floor/indestructible/hierophant/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
|
||||
|
||||
@@ -111,6 +111,7 @@
|
||||
oxygen = 14
|
||||
nitrogen = 23
|
||||
temperature = 300
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/simulated/floor/lubed
|
||||
name = "slippery floor"
|
||||
|
||||
@@ -67,19 +67,6 @@
|
||||
|
||||
return INITIALIZE_HINT_NORMAL
|
||||
|
||||
/hook/startup/proc/smooth_world()
|
||||
var/watch = start_watch()
|
||||
log_startup_progress("Smoothing atoms...")
|
||||
for(var/turf/T in world)
|
||||
if(T.smooth)
|
||||
queue_smooth(T)
|
||||
for(var/A in T)
|
||||
var/atom/AA = A
|
||||
if(AA.smooth)
|
||||
queue_smooth(AA)
|
||||
log_startup_progress(" Smoothed atoms in [stop_watch(watch)]s.")
|
||||
return TRUE
|
||||
|
||||
/turf/Destroy(force)
|
||||
. = QDEL_HINT_IWILLGC
|
||||
if(!changing_turf)
|
||||
|
||||
+16
-15
@@ -9,10 +9,14 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG)
|
||||
enable_debugger() // Enable the extools debugger
|
||||
log_world("World loaded at [time_stamp()]")
|
||||
log_world("[GLOB.vars.len - GLOB.gvars_datum_in_built_vars.len] global variables")
|
||||
connectDB() // This NEEDS TO HAPPEN EARLY. I CANNOT STRESS THIS ENOUGH!!!!!!! -aa
|
||||
load_admins() // Same here
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
log_world("Unit Tests Are Enabled!")
|
||||
#endif
|
||||
|
||||
|
||||
if(byond_version < MIN_COMPILER_VERSION || byond_build < MIN_COMPILER_BUILD)
|
||||
log_world("Your server's byond version does not meet the recommended requirements for this code. Please update BYOND")
|
||||
|
||||
@@ -22,8 +26,7 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG)
|
||||
|
||||
GLOB.timezoneOffset = text2num(time2text(0, "hh")) * 36000
|
||||
|
||||
makeDatumRefLists()
|
||||
callHook("startup")
|
||||
startup_procs() // Call procs that need to occur on startup (Generate lists, load MOTD, etc)
|
||||
|
||||
src.update_status()
|
||||
|
||||
@@ -31,9 +34,6 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG)
|
||||
|
||||
. = ..()
|
||||
|
||||
// Create robolimbs for chargen.
|
||||
populate_robolimb_list()
|
||||
|
||||
Master.Initialize(10, FALSE)
|
||||
|
||||
#ifdef UNIT_TESTS
|
||||
@@ -42,6 +42,16 @@ GLOBAL_LIST_INIT(map_transition_config, MAP_TRANSITION_CONFIG)
|
||||
|
||||
return
|
||||
|
||||
// This is basically a replacement for hook/startup. Please dont shove random bullshit here
|
||||
// If it doesnt need to happen IMMEDIATELY on world load, make a subsystem for it
|
||||
/world/proc/startup_procs()
|
||||
LoadBans() // Load up who is banned and who isnt. DONT PUT THIS IN A SUBSYSTEM IT WILL TAKE TOO LONG TO BE CALLED
|
||||
jobban_loadbanfile() // Load up jobbans. Again, DO NOT PUT THIS IN A SUBSYSTEM IT WILL TAKE TOO LONG TO BE CALLED
|
||||
load_motd() // Loads up the MOTD (Welcome message players see when joining the server)
|
||||
load_mode() // Loads up the gamemode
|
||||
investigate_reset() // This is part of the admin investigate system. PLEASE DONT SS THIS EITHER
|
||||
makeDatumRefLists() // Setups up lists of datums and their subtypes
|
||||
|
||||
//world/Topic(href, href_list[])
|
||||
// to_chat(world, "Received a Topic() call!")
|
||||
// to_chat(world, "[href]")
|
||||
@@ -335,11 +345,6 @@ GLOBAL_VAR_INIT(world_topic_spam_protect_time, world.timeofday)
|
||||
else
|
||||
..(0)
|
||||
|
||||
|
||||
/hook/startup/proc/loadMode()
|
||||
world.load_mode()
|
||||
return 1
|
||||
|
||||
/world/proc/load_mode()
|
||||
var/list/Lines = file2list("data/mode.txt")
|
||||
if(Lines.len)
|
||||
@@ -352,10 +357,6 @@ GLOBAL_VAR_INIT(world_topic_spam_protect_time, world.timeofday)
|
||||
fdel(F)
|
||||
F << the_mode
|
||||
|
||||
/hook/startup/proc/loadMOTD()
|
||||
world.load_motd()
|
||||
return 1
|
||||
|
||||
/world/proc/load_motd()
|
||||
GLOB.join_motd = file2text("config/motd.txt")
|
||||
GLOB.join_tos = file2text("config/tos.txt")
|
||||
@@ -444,7 +445,7 @@ GLOBAL_VAR_INIT(failed_old_db_connections, 0)
|
||||
fdel(GLOB.config_error_log)
|
||||
|
||||
|
||||
/hook/startup/proc/connectDB()
|
||||
/world/proc/connectDB()
|
||||
if(!setup_database_connection())
|
||||
log_world("Your server failed to establish a connection with the feedback database.")
|
||||
else
|
||||
|
||||
@@ -211,7 +211,7 @@ datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "")
|
||||
query.Execute()
|
||||
while(query.NextRow())
|
||||
ban_id = query.item[1]
|
||||
ban_number++;
|
||||
ban_number++
|
||||
|
||||
if(ban_number == 0)
|
||||
to_chat(usr, "<span class='warning'>Database update failed due to no bans fitting the search criteria. If this is not a legacy ban you should contact the database admin.</span>")
|
||||
@@ -314,7 +314,7 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
|
||||
query.Execute()
|
||||
while(query.NextRow())
|
||||
pckey = query.item[1]
|
||||
ban_number++;
|
||||
ban_number++
|
||||
|
||||
if(ban_number == 0)
|
||||
to_chat(usr, "<span class='warning'>Database update failed due to a ban id not being present in the database.</span>")
|
||||
|
||||
@@ -58,9 +58,6 @@ GLOBAL_PROTECT(banlist_savefile) // Obvious reasons
|
||||
GLOB.CMinutes = (world.realtime / 10) / 60
|
||||
return 1
|
||||
|
||||
/hook/startup/proc/loadBans()
|
||||
return LoadBans()
|
||||
|
||||
/proc/LoadBans()
|
||||
|
||||
GLOB.banlist_savefile = new("data/banlist.bdb")
|
||||
|
||||
@@ -11,10 +11,6 @@
|
||||
/proc/investigate_subject2file(var/subject)
|
||||
return file("[INVESTIGATE_DIR][subject].html")
|
||||
|
||||
/hook/startup/proc/resetInvestigate()
|
||||
investigate_reset()
|
||||
return 1
|
||||
|
||||
/proc/investigate_reset()
|
||||
if(fdel(INVESTIGATE_DIR)) return 1
|
||||
return 0
|
||||
|
||||
@@ -56,11 +56,12 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons
|
||||
testing(msg)
|
||||
#endif
|
||||
|
||||
/hook/startup/proc/loadAdmins()
|
||||
load_admins()
|
||||
return 1
|
||||
|
||||
/proc/load_admins()
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Admin reload blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to reload admins via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to reload admins via advanced proc-call")
|
||||
return
|
||||
//clear the datums references
|
||||
GLOB.admin_datums.Cut()
|
||||
for(var/client/C in GLOB.admins)
|
||||
|
||||
@@ -56,10 +56,6 @@ DEBUG
|
||||
jobban_loadbanfile()
|
||||
*/
|
||||
|
||||
/hook/startup/proc/loadJobBans()
|
||||
jobban_loadbanfile()
|
||||
return 1
|
||||
|
||||
/proc/jobban_loadbanfile()
|
||||
if(config.ban_legacy_system)
|
||||
var/savefile/S=new("data/job_full.ban")
|
||||
|
||||
@@ -16,6 +16,11 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma
|
||||
var/admincaster_signature //What you'll sign the newsfeeds as
|
||||
|
||||
/datum/admins/New(initial_rank = "Temporary Admin", initial_rights = 0, ckey)
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Admin rank creation blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to create a new admin rank via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to edit feedback a new admin rank via advanced proc-call")
|
||||
return
|
||||
if(!ckey)
|
||||
error("Admin datum created without a ckey argument. Datum has been deleted")
|
||||
qdel(src)
|
||||
@@ -26,10 +31,20 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma
|
||||
GLOB.admin_datums[ckey] = src
|
||||
|
||||
/datum/admins/Destroy()
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Admin rank deletion blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to delete an admin rank via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to delete an admin rank via advanced proc-call")
|
||||
return
|
||||
..()
|
||||
return QDEL_HINT_HARDDEL_NOW
|
||||
|
||||
/datum/admins/proc/associate(client/C)
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Rank association blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to associate an admin rank to a new client via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to associate an admin rank to a new client via advanced proc-call")
|
||||
return
|
||||
if(istype(C))
|
||||
owner = C
|
||||
owner.holder = src
|
||||
@@ -39,6 +54,11 @@ GLOBAL_PROTECT(admin_datums) // This is protected because we dont want people ma
|
||||
GLOB.admins |= C
|
||||
|
||||
/datum/admins/proc/disassociate()
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Rank disassociation blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to disassociate an admin rank from a client via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to disassociate an admin rank from a client via advanced proc-call")
|
||||
return
|
||||
if(owner)
|
||||
GLOB.admins -= owner
|
||||
owner.remove_admin_verbs()
|
||||
@@ -88,6 +108,11 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself.
|
||||
return 0
|
||||
|
||||
/client/proc/deadmin()
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Deadmin blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to de-admin a client via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to de-admin a client via advanced proc-call")
|
||||
return
|
||||
GLOB.admin_datums -= ckey
|
||||
if(holder)
|
||||
holder.disassociate()
|
||||
|
||||
@@ -102,6 +102,11 @@
|
||||
to_chat(usr, "<span class='notice'>Admin rank changed.</span>")
|
||||
|
||||
/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission)
|
||||
if(IsAdminAdvancedProcCall())
|
||||
to_chat(usr, "<span class='boldannounce'>Admin edit blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to edit admin ranks via advanced proc-call")
|
||||
log_admin("[key_name(usr)] attempted to edit admin ranks via advanced proc-call")
|
||||
return
|
||||
if(config.admin_legacy_system)
|
||||
return
|
||||
|
||||
|
||||
@@ -3475,9 +3475,9 @@
|
||||
hunter_mind.objectives += protect_objective
|
||||
SSticker.mode.traitors |= hunter_mob.mind
|
||||
to_chat(hunter_mob, "<span class='danger'>ATTENTION:</span> You are now on a mission!")
|
||||
to_chat(hunter_mob, "<B>Goal: <span class='danger'>[killthem ? "MURDER" : "PROTECT"] [H.real_name]</span>, currently in [get_area(H.loc)]. </B>");
|
||||
to_chat(hunter_mob, "<B>Goal: <span class='danger'>[killthem ? "MURDER" : "PROTECT"] [H.real_name]</span>, currently in [get_area(H.loc)]. </B>")
|
||||
if(killthem)
|
||||
to_chat(hunter_mob, "<B>If you kill [H.p_them()], [H.p_they()] cannot be revived.</B>");
|
||||
to_chat(hunter_mob, "<B>If you kill [H.p_them()], [H.p_they()] cannot be revived.</B>")
|
||||
hunter_mob.mind.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/datum/atom_hud/antag/tatorhud = GLOB.huds[ANTAG_HUD_TRAITOR]
|
||||
tatorhud.join_hud(hunter_mob)
|
||||
|
||||
@@ -444,9 +444,9 @@
|
||||
|
||||
if(object == world) // Global proc.
|
||||
procname = "/proc/[procname]"
|
||||
return call(procname)(arglist(new_args))
|
||||
return (WrapAdminProcCall(GLOBAL_PROC, procname, new_args))
|
||||
|
||||
return call(object, procname)(arglist(new_args))
|
||||
return (WrapAdminProcCall(object, procname, new_args))
|
||||
|
||||
/proc/SDQL2_tokenize(query_text)
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown","the","a","an","of","mo
|
||||
var/admin_number_ignored = 0 //Holds the number of admins without +BAN (so admins who are not really admins)
|
||||
var/admin_number_decrease = 0 //Holds the number of admins with are afk, ignored or both
|
||||
for(var/client/X in GLOB.admins)
|
||||
admin_number_total++;
|
||||
admin_number_total++
|
||||
var/invalid = 0
|
||||
if(requiredflags != 0 && !check_rights_for(X, requiredflags))
|
||||
admin_number_ignored++
|
||||
|
||||
@@ -85,18 +85,80 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
return
|
||||
message_admins("[key_name_admin(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc
|
||||
else
|
||||
//this currently has no hascall protection. wasn't able to get it working.
|
||||
message_admins("[key_name_admin(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]")
|
||||
log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]")
|
||||
returnval = call(procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc
|
||||
|
||||
to_chat(usr, "<font color='blue'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</font>")
|
||||
feedback_add_details("admin_verb","APC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
// All these vars are related to proc call protection
|
||||
// If you add more of these, for the love of fuck, protect them
|
||||
|
||||
/// Who is currently calling procs
|
||||
GLOBAL_VAR(AdminProcCaller)
|
||||
GLOBAL_PROTECT(AdminProcCaller)
|
||||
/// How many procs have been called
|
||||
GLOBAL_VAR_INIT(AdminProcCallCount, 0)
|
||||
GLOBAL_PROTECT(AdminProcCallCount)
|
||||
/// UID of the admin who last called
|
||||
GLOBAL_VAR(LastAdminCalledTargetUID)
|
||||
GLOBAL_PROTECT(LastAdminCalledTargetUID)
|
||||
/// Last target to have a proc called on it
|
||||
GLOBAL_VAR(LastAdminCalledTarget)
|
||||
GLOBAL_PROTECT(LastAdminCalledTarget)
|
||||
/// Last proc called
|
||||
GLOBAL_VAR(LastAdminCalledProc)
|
||||
GLOBAL_PROTECT(LastAdminCalledProc)
|
||||
/// List to handle proc call spam prevention
|
||||
GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention)
|
||||
GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
|
||||
// Wrapper for proccalls where the datum is flagged as vareditted
|
||||
/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target && procname == "Del")
|
||||
to_chat(usr, "Calling Del() is not allowed")
|
||||
return
|
||||
|
||||
if(target != GLOBAL_PROC && !target.CanProcCall(procname))
|
||||
to_chat(usr, "Proccall on [target.type]/proc/[procname] is disallowed!")
|
||||
return
|
||||
var/current_caller = GLOB.AdminProcCaller
|
||||
var/ckey = usr ? usr.client.ckey : GLOB.AdminProcCaller
|
||||
if(!ckey)
|
||||
CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]")
|
||||
if(current_caller && current_caller != ckey)
|
||||
if(!GLOB.AdminProcCallSpamPrevention[ckey])
|
||||
to_chat(usr, "<span class='adminnotice'>Another set of admin called procs are still running, your proc will be run after theirs finish.</span>")
|
||||
GLOB.AdminProcCallSpamPrevention[ckey] = TRUE
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
to_chat(usr, "<span class='adminnotice'>Running your proc</span>")
|
||||
GLOB.AdminProcCallSpamPrevention -= ckey
|
||||
else
|
||||
UNTIL(!GLOB.AdminProcCaller)
|
||||
GLOB.LastAdminCalledProc = procname
|
||||
if(target != GLOBAL_PROC)
|
||||
GLOB.LastAdminCalledTargetUID = target.UID()
|
||||
GLOB.AdminProcCaller = ckey //if this runtimes, too bad for you
|
||||
++GLOB.AdminProcCallCount
|
||||
. = world.WrapAdminProcCall(target, procname, arguments)
|
||||
if(--GLOB.AdminProcCallCount == 0)
|
||||
GLOB.AdminProcCaller = null
|
||||
|
||||
//adv proc call this, ya nerds
|
||||
/world/proc/WrapAdminProcCall(datum/target, procname, list/arguments)
|
||||
if(target == GLOBAL_PROC)
|
||||
return call(procname)(arglist(arguments))
|
||||
else if(target != world)
|
||||
return call(target, procname)(arglist(arguments))
|
||||
else
|
||||
to_chat(usr, "<span class='boldannounce'>Call to world/proc/[procname] blocked: Advanced ProcCall detected.</span>")
|
||||
message_admins("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]")
|
||||
log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]l")
|
||||
|
||||
/proc/IsAdminAdvancedProcCall()
|
||||
#ifdef TESTING
|
||||
@@ -131,7 +193,7 @@ GLOBAL_PROTECT(AdminProcCaller)
|
||||
log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]")
|
||||
|
||||
spawn()
|
||||
var/returnval = call(A,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc
|
||||
to_chat(src, "<span class='notice'>[procname] returned: [!isnull(returnval) ? returnval : "null"]</span>")
|
||||
|
||||
feedback_add_details("admin_verb","DPC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -428,7 +490,7 @@ GLOBAL_PROTECT(AdminProcCaller)
|
||||
id.icon_state = "gold"
|
||||
id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
||||
else
|
||||
var/obj/item/card/id/id = new/obj/item/card/id(M);
|
||||
var/obj/item/card/id/id = new/obj/item/card/id(M)
|
||||
id.icon_state = "gold"
|
||||
id:access = get_all_accesses()+get_all_centcom_access()+get_all_syndicate_access()
|
||||
id.registered_name = H.real_name
|
||||
|
||||
@@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(sounds_cache)
|
||||
set name = "Play Server Sound"
|
||||
if(!check_rights(R_SOUNDS)) return
|
||||
|
||||
var/list/sounds = file2list("sound/serversound_list.txt");
|
||||
var/list/sounds = file2list("sound/serversound_list.txt")
|
||||
sounds += GLOB.sounds_cache
|
||||
|
||||
var/melody = input("Select a sound from the server to play", "Server sound list") as null|anything in sounds
|
||||
@@ -71,7 +71,7 @@ GLOBAL_LIST_EMPTY(sounds_cache)
|
||||
var/A = alert("This will play a sound at every intercomm, are you sure you want to continue? This works best with short sounds, beware.","Warning","Yep","Nope")
|
||||
if(A != "Yep") return
|
||||
|
||||
var/list/sounds = file2list("sound/serversound_list.txt");
|
||||
var/list/sounds = file2list("sound/serversound_list.txt")
|
||||
sounds += GLOB.sounds_cache
|
||||
|
||||
var/melody = input("Select a sound from the server to play", "Server sound list") as null|anything in sounds
|
||||
|
||||
@@ -627,7 +627,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
print_command_report(input, "[command_name()] Update")
|
||||
if("No")
|
||||
//same thing as the blob stuff - it's not public, so it's classified, dammit
|
||||
GLOB.command_announcer.autosay("A classified message has been printed out at all communication consoles.");
|
||||
GLOB.command_announcer.autosay("A classified message has been printed out at all communication consoles.")
|
||||
print_command_report(input, "Classified [command_name()] Update")
|
||||
else
|
||||
return
|
||||
|
||||
@@ -9,39 +9,6 @@ GLOBAL_LIST_EMPTY(gear_datums)
|
||||
category = cat
|
||||
..()
|
||||
|
||||
/hook/startup/proc/populate_gear_list()
|
||||
//create a list of gear datums to sort
|
||||
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)
|
||||
return 1
|
||||
|
||||
/datum/gear
|
||||
var/display_name //Name/index. Must be unique.
|
||||
var/description //Description of this gear. If left blank will default to the description of the pathed item.
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
//placeholder for holiday stuff
|
||||
@@ -1,61 +0,0 @@
|
||||
/proc/Christmas_Game_Start()
|
||||
for(var/obj/structure/flora/tree/pine/xmas in world)
|
||||
if(!is_station_level(xmas.z)) continue
|
||||
for(var/turf/simulated/floor/T in orange(1,xmas))
|
||||
for(var/i=1,i<=rand(1,5),i++)
|
||||
new /obj/item/a_gift(T)
|
||||
for(var/mob/living/simple_animal/corgi/Ian/Ian in GLOB.mob_list)
|
||||
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
|
||||
|
||||
/proc/ChristmasEvent()
|
||||
for(var/obj/structure/flora/tree/pine/xmas in world)
|
||||
var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc)
|
||||
evil_tree.icon_state = xmas.icon_state
|
||||
evil_tree.icon_living = evil_tree.icon_state
|
||||
evil_tree.icon_dead = evil_tree.icon_state
|
||||
evil_tree.icon_gib = evil_tree.icon_state
|
||||
qdel(xmas)
|
||||
|
||||
/obj/item/toy/xmas_cracker
|
||||
name = "xmas cracker"
|
||||
icon = 'icons/obj/christmas.dmi'
|
||||
icon_state = "cracker"
|
||||
desc = "Directions for use: Requires two people, one to pull each end."
|
||||
var/cracked = 0
|
||||
|
||||
/obj/item/toy/xmas_cracker/New()
|
||||
..()
|
||||
|
||||
/obj/item/toy/xmas_cracker/attack(mob/target, mob/user)
|
||||
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
|
||||
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
|
||||
var/obj/item/paper/Joke = new /obj/item/paper(user.loc)
|
||||
Joke.name = "[pick("awful","terrible","unfunny")] joke"
|
||||
Joke.info = pick("What did one snowman say to the other?\n\n<i>'Is it me or can you smell carrots?'</i>",
|
||||
"Why couldn't the snowman get laid?\n\n<i>He was frigid!</i>",
|
||||
"Where are santa's helpers educated?\n\n<i>Nowhere, they're ELF-taught.</i>",
|
||||
"What happened to the man who stole advent calanders?\n\n<i>He got 25 days.</i>",
|
||||
"What does Santa get when he gets stuck in a chimney?\n\n<i>Claus-trophobia.</i>",
|
||||
"Where do you find chili beans?\n\n<i>The north pole.</i>",
|
||||
"What do you get from eating tree decorations?\n\n<i>Tinsilitis!</i>",
|
||||
"What do snowmen wear on their heads?\n\n<i>Ice caps!</i>",
|
||||
"Why is Christmas just like life on ss13?\n\n<i>You do all the work and the fat guy gets all the credit.</i>",
|
||||
"Why doesn�t Santa have any children?\n\n<i>Because he only comes down the chimney.</i>")
|
||||
new /obj/item/clothing/head/festive(target.loc)
|
||||
user.update_icons()
|
||||
cracked = 1
|
||||
icon_state = "cracker1"
|
||||
var/obj/item/toy/xmas_cracker/other_half = new /obj/item/toy/xmas_cracker(target)
|
||||
other_half.cracked = 1
|
||||
other_half.icon_state = "cracker2"
|
||||
target.put_in_active_hand(other_half)
|
||||
playsound(user, 'sound/effects/snap.ogg', 50, 1)
|
||||
return 1
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/festive
|
||||
name = "festive paper hat"
|
||||
icon_state = "xmashat"
|
||||
desc = "A crappy paper hat that you are REQUIRED to wear."
|
||||
flags_inv = 0
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
@@ -1 +0,0 @@
|
||||
//placeholder for holiday stuff
|
||||
@@ -1,183 +0,0 @@
|
||||
//Uncommenting ALLOW_HOLIDAYS in config.txt will enable Holidays
|
||||
GLOBAL_VAR_INIT(Holiday) // I didnt update the rest of this code because this file hasnt been ticked in years, and holiday code got overhauled
|
||||
// If it really needs fixing, yell at me, -aa
|
||||
|
||||
//Just thinking ahead! Here's the foundations to a more robust Holiday event system.
|
||||
//It's easy as hell to add stuff. Just set Holiday to something using the switch(or something else)
|
||||
//then use if(Holiday == "MyHoliday") to make stuff happen on that specific day only
|
||||
//Please, Don't spam stuff up with easter eggs, I'd rather somebody just delete this than people cause
|
||||
//the game to lag even more in the name of one-day content.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//ALSO, MOST IMPORTANTLY: Don't add stupid stuff! Discuss bonus content with Project-Heads first please!//
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// ~Carn
|
||||
|
||||
/hook/startup/proc/updateHoliday()
|
||||
Get_Holiday()
|
||||
return 1
|
||||
|
||||
//sets up the Holiday global variable. Shouldbe called on game configuration or something.
|
||||
/proc/Get_Holiday()
|
||||
if(!Holiday) return // Holiday stuff was not enabled in the config!
|
||||
|
||||
Holiday = null // reset our switch now so we can recycle it as our Holiday name
|
||||
|
||||
var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year
|
||||
var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month
|
||||
var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day
|
||||
|
||||
//Main switch. If any of these are too dumb/inappropriate, or you have better ones, feel free to change whatever
|
||||
switch(MM)
|
||||
if(1) //Jan
|
||||
switch(DD)
|
||||
if(1) Holiday = "New Year's Day"
|
||||
|
||||
if(2) //Feb
|
||||
switch(DD)
|
||||
if(2) Holiday = "Groundhog Day"
|
||||
if(14) Holiday = "Valentine's Day"
|
||||
if(17) Holiday = "Random Acts of Kindness Day"
|
||||
|
||||
if(3) //Mar
|
||||
switch(DD)
|
||||
if(14) Holiday = "Pi Day"
|
||||
if(17) Holiday = "St. Patrick's Day"
|
||||
if(27)
|
||||
if(YY == 16)
|
||||
Holiday = "Easter"
|
||||
if(31)
|
||||
if(YY == 13)
|
||||
Holiday = "Easter"
|
||||
|
||||
if(4) //Apr
|
||||
switch(DD)
|
||||
if(1)
|
||||
Holiday = "April Fool's Day"
|
||||
if(YY == 18 && prob(50)) Holiday = "Easter"
|
||||
if(5)
|
||||
if(YY == 15) Holiday = "Easter"
|
||||
if(16)
|
||||
if(YY == 17) Holiday = "Easter"
|
||||
if(20)
|
||||
Holiday = "Four-Twenty"
|
||||
if(YY == 14 && prob(50)) Holiday = "Easter"
|
||||
if(22) Holiday = "Earth Day"
|
||||
|
||||
if(5) //May
|
||||
switch(DD)
|
||||
if(1) Holiday = "Labour Day"
|
||||
if(4) Holiday = "FireFighter's Day"
|
||||
if(12) Holiday = "Owl and Pussycat Day" //what a dumb day of observence...but we -do- have costumes already :3
|
||||
|
||||
if(6) //Jun
|
||||
|
||||
if(7) //Jul
|
||||
switch(DD)
|
||||
if(1) Holiday = "Doctor's Day"
|
||||
if(2) Holiday = "UFO Day"
|
||||
if(8) Holiday = "Writer's Day"
|
||||
if(30) Holiday = "Friendship Day"
|
||||
|
||||
if(8) //Aug
|
||||
switch(DD)
|
||||
if(5) Holiday = "Beer Day"
|
||||
|
||||
if(9) //Sep
|
||||
switch(DD)
|
||||
if(19) Holiday = "Talk-Like-a-Pirate Day"
|
||||
if(28) Holiday = "Stupid-Questions Day"
|
||||
|
||||
if(10) //Oct
|
||||
switch(DD)
|
||||
if(4) Holiday = "Animal's Day"
|
||||
if(7) Holiday = "Smiling Day"
|
||||
if(16) Holiday = "Boss' Day"
|
||||
if(31) Holiday = "Halloween"
|
||||
|
||||
if(11) //Nov
|
||||
switch(DD)
|
||||
if(1) Holiday = "Vegan Day"
|
||||
if(13) Holiday = "Kindness Day"
|
||||
if(19) Holiday = "Flowers Day"
|
||||
if(21) Holiday = "Saying-'Hello' Day"
|
||||
|
||||
if(12) //Dec
|
||||
switch(DD)
|
||||
if(10) Holiday = "Human-Rights Day"
|
||||
if(14) Holiday = "Monkey Day"
|
||||
if(21) if(YY==12) Holiday = "End of the World"
|
||||
if(22) Holiday = "Orgasming Day" //lol. These all actually exist
|
||||
if(24) Holiday = "Christmas Eve"
|
||||
if(25) Holiday = "Christmas"
|
||||
if(26) Holiday = "Boxing Day"
|
||||
if(31) Holiday = "New Year's Eve"
|
||||
|
||||
if(!Holiday)
|
||||
//Friday the 13th
|
||||
if(DD == 13)
|
||||
if(time2text(world.timeofday, "DDD") == "Fri")
|
||||
Holiday = "Friday the 13th"
|
||||
|
||||
//Allows GA and GM to set the Holiday variable
|
||||
/client/proc/Set_Holiday(T as text|null)
|
||||
set name = ".Set Holiday"
|
||||
set category = "Event"
|
||||
set desc = "Force-set the Holiday variable to make the game think it's a certain day."
|
||||
if(!check_rights(R_SERVER)) return
|
||||
|
||||
Holiday = T
|
||||
//get a new station name
|
||||
station_name = null
|
||||
station_name()
|
||||
//update our hub status
|
||||
world.update_status()
|
||||
Holiday_Game_Start()
|
||||
|
||||
message_admins("<span class='notice'>ADMIN: Event: [key_name_admin(src)] force-set Holiday to \</span>"[Holiday]\"")
|
||||
log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"")
|
||||
|
||||
|
||||
//Run at the start of a round
|
||||
/proc/Holiday_Game_Start()
|
||||
if(Holiday)
|
||||
to_chat(world, "<font color='blue'>and...</font>")
|
||||
to_chat(world, "<h4>Happy [Holiday] Everybody!</h4>")
|
||||
switch(Holiday) //special holidays
|
||||
if("Easter")
|
||||
//do easter stuff
|
||||
if("Christmas Eve","Christmas")
|
||||
Christmas_Game_Start()
|
||||
|
||||
return
|
||||
|
||||
//Nested in the random events loop. Will be triggered every 2 minutes
|
||||
/proc/Holiday_Random_Event()
|
||||
switch(Holiday) //special holidays
|
||||
|
||||
if("",null) //no Holiday today! Back to work!
|
||||
return
|
||||
|
||||
if("Easter") //I'll make this into some helper procs at some point
|
||||
/* var/list/turf/simulated/floor/Floorlist = list()
|
||||
for(var/turf/simulated/floor/T)
|
||||
if(T.contents)
|
||||
Floorlist += T
|
||||
var/turf/simulated/floor/F = Floorlist[rand(1,Floorlist.len)]
|
||||
Floorlist = null
|
||||
var/obj/structure/closet/C = locate(/obj/structure/closet) in F
|
||||
var/obj/item/reagent_containers/food/snacks/chocolateegg/wrapped/Egg
|
||||
if( C ) Egg = new(C)
|
||||
else Egg = new(F)
|
||||
*/
|
||||
/* var/list/obj/containers = list()
|
||||
for(var/obj/item/storage/S in world)
|
||||
if(!is_station_level(S.z)) continue
|
||||
containers += S
|
||||
|
||||
message_admins("<span class='notice'>DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])</span>")*/
|
||||
if("End of the World")
|
||||
if(prob(eventchance)) GameOver()
|
||||
|
||||
if("Christmas","Christmas Eve")
|
||||
if(prob(eventchance)) ChristmasEvent()
|
||||
@@ -38,7 +38,7 @@ GLOBAL_VAR_INIT(account_hack_attempted, 0)
|
||||
if(!isnull(affected_account) && !affected_account.suspended)
|
||||
message = "The hack attempt has succeeded."
|
||||
|
||||
var/lost = affected_account.money * (MINIMUM_PERCENTAGE_LOSS + rand(0,VARIABLE_LOSS) / 10);
|
||||
var/lost = affected_account.money * (MINIMUM_PERCENTAGE_LOSS + rand(0,VARIABLE_LOSS) / 10)
|
||||
|
||||
affected_account.phantom_charge(lost)
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream/update_icon()
|
||||
overlays.Cut()
|
||||
var/image/filling = image('icons/obj/kitchen.dmi', src, "icecream_color")
|
||||
filling.icon += mix_color_from_reagents(reagents.reagent_list)
|
||||
overlays += filling
|
||||
cut_overlays()
|
||||
var/mutable_appearance/filling = mutable_appearance('icons/obj/kitchen.dmi', "icecream_color")
|
||||
filling.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(filling)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream/icecreamcone
|
||||
name = "ice cream cone"
|
||||
|
||||
@@ -43,10 +43,9 @@
|
||||
return
|
||||
if(istype(I, /obj/item/reagent_containers/food/snacks/icecream))
|
||||
if(!I.reagents.has_reagent("sprinkles"))
|
||||
if(I.reagents.total_volume > 29) I.reagents.remove_any(1)
|
||||
I.reagents.add_reagent("sprinkles",1)
|
||||
var/image/sprinkles = image('icons/obj/kitchen.dmi', src, "sprinkles")
|
||||
I.overlays += sprinkles
|
||||
if(I.reagents.total_volume > 29)
|
||||
I.reagents.remove_any(1)
|
||||
I.reagents.add_reagent("sprinkles", 1)
|
||||
I.name += " with sprinkles"
|
||||
I.desc += ". This also has sprinkles."
|
||||
else
|
||||
|
||||
@@ -1,256 +0,0 @@
|
||||
#define ICECREAM_VANILLA 1
|
||||
#define FLAVOUR_CHOCOLATE 2
|
||||
#define FLAVOUR_STRAWBERRY 3
|
||||
#define FLAVOUR_BLUE 4
|
||||
#define CONE_WAFFLE 5
|
||||
#define CONE_CHOC 6
|
||||
#define INGR_MILK 7
|
||||
#define INGR_FLOUR 8
|
||||
#define INGR_SUGAR 9
|
||||
#define INGR_ICE 10
|
||||
#define MUCK 11
|
||||
|
||||
GLOBAL_LIST_INIT(ingredients_source, list(
|
||||
"berryjuice" = FLAVOUR_STRAWBERRY,\
|
||||
"cocoa" = FLAVOUR_CHOCOLATE,\
|
||||
"singulo" = FLAVOUR_BLUE,\
|
||||
"milk" = INGR_MILK,\
|
||||
"soymilk" = INGR_MILK,\
|
||||
"ice" = INGR_ICE,\
|
||||
"flour" = INGR_FLOUR,\
|
||||
"sugar" = INGR_SUGAR,\
|
||||
))
|
||||
|
||||
/proc/get_icecream_flavour_string(var/flavour_type)
|
||||
switch(flavour_type)
|
||||
if(FLAVOUR_CHOCOLATE)
|
||||
return "chocolate"
|
||||
if(FLAVOUR_STRAWBERRY)
|
||||
return "strawberry"
|
||||
if(FLAVOUR_BLUE)
|
||||
return "blue"
|
||||
if(CONE_WAFFLE)
|
||||
return "waffle"
|
||||
if(CONE_CHOC)
|
||||
return "chocolate"
|
||||
if(INGR_MILK)
|
||||
return "milk"
|
||||
if(INGR_FLOUR)
|
||||
return "flour"
|
||||
if(INGR_SUGAR)
|
||||
return "sugar"
|
||||
if(INGR_ICE)
|
||||
return "ice"
|
||||
if(MUCK)
|
||||
return "muck"
|
||||
else
|
||||
return "vanilla"
|
||||
|
||||
/obj/machinery/icecream_vat
|
||||
name = "icecream vat"
|
||||
desc = "Ding-aling ding dong. Get your Nanotrasen-approved ice cream!"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "icecream_vat"
|
||||
density = 1
|
||||
anchored = 0
|
||||
max_integrity = 300
|
||||
var/list/ingredients = list()
|
||||
var/dispense_flavour = 1
|
||||
var/obj/item/reagent_containers/glass/held_container
|
||||
|
||||
/obj/machinery/icecream_vat/New()
|
||||
..()
|
||||
create_reagents(50)
|
||||
while(ingredients.len < 11)
|
||||
ingredients.Add(5)
|
||||
|
||||
/obj/machinery/icecream_vat/attack_hand(mob/user)
|
||||
user.set_machine(src)
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/icecream_vat/interact(mob/user)
|
||||
var/dat
|
||||
dat += "<a href='?src=[UID()];dispense=[ICECREAM_VANILLA]'><b>Dispense vanilla icecream</b></a> There is [ingredients[ICECREAM_VANILLA]] scoops of vanilla icecream left (made from milk and ice).<br>"
|
||||
dat += "<a href='?src=[UID()];dispense=[FLAVOUR_STRAWBERRY]'><b>Dispense strawberry icecream</b></a> There is [ingredients[FLAVOUR_STRAWBERRY]] dollops of strawberry flavouring left (obtained from berry juice.<br>"
|
||||
dat += "<a href='?src=[UID()];dispense=[FLAVOUR_CHOCOLATE]'><b>Dispense chocolate icecream</b></a> There is [ingredients[FLAVOUR_CHOCOLATE]] dollops of chocolate flavouring left (obtained from cocoa powder).<br>"
|
||||
dat += "<a href='?src=[UID()];dispense=[FLAVOUR_BLUE]'><b>Dispense blue icecream</b></a> There is [ingredients[FLAVOUR_BLUE]] dollops of blue flavouring left (obtained from bluespace tomato singulo).<br>"
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=[UID()];cone=[CONE_WAFFLE]'><b>Dispense waffle cones</b></a> There are [ingredients[CONE_WAFFLE]] waffle cones left. <br>"
|
||||
dat += "<a href='?src=[UID()];cone=[CONE_CHOC]'><b>Dispense chocolate cones</b></a> There are [ingredients[CONE_CHOC]] chocolate cones left.<br>"
|
||||
dat += "<br>"
|
||||
dat += "<a href='?src=[UID()];make=[CONE_WAFFLE]'><b>Make waffle cones</b></a> There is [ingredients[INGR_FLOUR]]/[ingredients[INGR_SUGAR]] of flour and sugar left.<br>"
|
||||
dat += "<a href='?src=[UID()];make=[CONE_CHOC]'><b>Make chocolate cones</b></a> There is [ingredients[FLAVOUR_CHOCOLATE]]/[ingredients[CONE_WAFFLE]] of chocolate flavouring and waffle cones left.<br>"
|
||||
dat += "<a href='?src=[UID()];make=[ICECREAM_VANILLA]'><b>Make vanilla icecream</b></a> There is [ingredients[INGR_MILK]]/[ingredients[INGR_ICE]] of milk and ice left.<br>"
|
||||
dat += "<br>"
|
||||
if(held_container)
|
||||
dat += "<a href='?src=[UID()];eject=1'>Eject [held_container]</a> "
|
||||
else
|
||||
dat += "No beaker inserted. "
|
||||
dat += "<a href='?src=[UID()];refresh=1'>Refresh</a> <a href='?src=[UID()];close=1'>Close</a>"
|
||||
|
||||
var/datum/browser/popup = new(user, "icecreamvat", name, 600, 400)
|
||||
popup.set_content(dat)
|
||||
popup.open(0)
|
||||
|
||||
/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params)
|
||||
if(istype(O, /obj/item/reagent_containers))
|
||||
if(istype(O, /obj/item/reagent_containers/food/snacks/icecream))
|
||||
var/obj/item/reagent_containers/food/snacks/icecream/I = O
|
||||
if(!I.ice_creamed)
|
||||
if(ingredients[ICECREAM_VANILLA] > 0)
|
||||
var/flavour_name = get_icecream_flavour_string(dispense_flavour)
|
||||
if(dispense_flavour < 11 && ingredients[dispense_flavour] > 0)
|
||||
visible_message("[bicon(src)] <span class='info'>[user] scoops delicious [flavour_name] flavoured icecream into [I].</span>")
|
||||
ingredients[dispense_flavour] -= 1
|
||||
ingredients[ICECREAM_VANILLA] -= 1
|
||||
|
||||
I.add_ice_cream(dispense_flavour)
|
||||
if(held_container)
|
||||
held_container.reagents.trans_to(I, 10)
|
||||
if(I.reagents.total_volume < 10)
|
||||
I.reagents.add_reagent("sugar", 10 - I.reagents.total_volume)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is not enough [flavour_name] flavouring left! Insert more of the required ingredients.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There is not enough icecream left! Insert more milk and ice.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[O] already has icecream in it.</span>")
|
||||
else if(istype(O, /obj/item/reagent_containers/glass))
|
||||
if(held_container)
|
||||
to_chat(user, "<span class='notice'>You must remove [held_container] from [src] first.</span>")
|
||||
else
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>\The [O] is stuck to your hand!</span>")
|
||||
return
|
||||
O.forceMove(src)
|
||||
to_chat(user, "<span class='info'>You insert [O] into [src].</span>")
|
||||
held_container = O
|
||||
else
|
||||
var/obj/item/reagent_containers/R = O
|
||||
if(R.reagents)
|
||||
visible_message("<span class='info'>[user] has emptied all of [R] into [src].</span>")
|
||||
for(var/datum/reagent/current_reagent in R.reagents.reagent_list)
|
||||
if(GLOB.ingredients_source[current_reagent.id])
|
||||
add(GLOB.ingredients_source[current_reagent.id], current_reagent.volume / 2)
|
||||
else
|
||||
add(MUCK, current_reagent.volume / 5)
|
||||
R.reagents.clear_reagents()
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/icecream_vat/proc/add(var/add_type, var/amount)
|
||||
if(add_type <= ingredients.len)
|
||||
ingredients[add_type] += amount
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/icecream_vat/proc/make(var/mob/user, var/make_type)
|
||||
switch(make_type)
|
||||
if(CONE_WAFFLE)
|
||||
if(ingredients[INGR_FLOUR] > 0 && ingredients[INGR_SUGAR] > 0)
|
||||
var/amount = max( min(ingredients[INGR_FLOUR], ingredients[INGR_SUGAR]), 5)
|
||||
ingredients[INGR_FLOUR] -= amount
|
||||
ingredients[INGR_SUGAR] -= amount
|
||||
ingredients[CONE_WAFFLE] += amount
|
||||
visible_message("<span class='info'>[user] cooks up some waffle cones.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You require sugar and flour to make waffle cones.</span>")
|
||||
if(CONE_CHOC)
|
||||
if(ingredients[FLAVOUR_CHOCOLATE] > 0 && ingredients[CONE_WAFFLE] > 0)
|
||||
var/amount = min(ingredients[CONE_WAFFLE], ingredients[FLAVOUR_CHOCOLATE])
|
||||
ingredients[CONE_WAFFLE] -= amount
|
||||
ingredients[FLAVOUR_CHOCOLATE] -= amount
|
||||
ingredients[CONE_CHOC] += amount
|
||||
visible_message("<span class='info'>[user] cooks up some chocolate cones.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You require waffle cones and chocolate flavouring to make chocolate cones.</span>")
|
||||
if(ICECREAM_VANILLA)
|
||||
if(ingredients[INGR_ICE] > 0 && ingredients[INGR_MILK] > 0)
|
||||
var/amount = min(ingredients[INGR_ICE], ingredients[INGR_MILK])
|
||||
ingredients[INGR_ICE] -= amount
|
||||
ingredients[INGR_MILK] -= amount
|
||||
ingredients[ICECREAM_VANILLA] += amount
|
||||
visible_message("<span class='info'>[user] whips up some vanilla icecream.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You require milk and ice to make vanilla icecream.</span>")
|
||||
updateDialog()
|
||||
|
||||
/obj/machinery/icecream_vat/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if(href_list["dispense"])
|
||||
dispense_flavour = text2num(href_list["dispense"])
|
||||
visible_message("<span class='notice'>[usr] sets [src] to dispense [get_icecream_flavour_string(dispense_flavour)] flavoured icecream.</span>")
|
||||
|
||||
if(href_list["cone"])
|
||||
var/dispense_cone = text2num(href_list["cone"])
|
||||
if(ingredients[dispense_cone] <= ingredients.len)
|
||||
var/cone_name = get_icecream_flavour_string(dispense_cone)
|
||||
if(ingredients[dispense_cone] >= 1)
|
||||
ingredients[dispense_cone] -= 1
|
||||
var/obj/item/reagent_containers/food/snacks/icecream/I = new(loc)
|
||||
I.cone_type = cone_name
|
||||
I.icon_state = "icecream_cone_[cone_name]"
|
||||
I.desc = "Delicious [cone_name] cone, but no ice cream."
|
||||
visible_message("<span class='info'>[usr] dispenses a crunchy [cone_name] cone from [src].</span>")
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There are no [cone_name] cones left!</span>")
|
||||
updateDialog()
|
||||
|
||||
if(href_list["make"])
|
||||
make( usr, text2num(href_list["make"]) )
|
||||
updateDialog()
|
||||
|
||||
if(href_list["eject"])
|
||||
if(held_container)
|
||||
held_container.forceMove(loc)
|
||||
held_container = null
|
||||
updateDialog()
|
||||
|
||||
if(href_list["refresh"])
|
||||
updateDialog()
|
||||
|
||||
if(href_list["close"])
|
||||
usr.unset_machine()
|
||||
usr << browse(null,"window=icecreamvat")
|
||||
return
|
||||
|
||||
/obj/machinery/icecream_vat/deconstruct(disassembled = TRUE)
|
||||
if(!(flags & NODECONSTRUCT))
|
||||
new /obj/item/stack/sheet/metal(loc, 4)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream
|
||||
name = "ice cream cone"
|
||||
desc = "Delicious waffle cone, but no ice cream."
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "icecream_cone"
|
||||
layer = 3.1
|
||||
var/ice_creamed = 0
|
||||
var/cone_type
|
||||
bitesize = 3
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream/New()
|
||||
..()
|
||||
create_reagents(20)
|
||||
reagents.add_reagent("nutriment", 5)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(var/flavour)
|
||||
var/flavour_name = get_icecream_flavour_string(flavour)
|
||||
name = "[flavour_name] icecream"
|
||||
overlays += "icecream_[flavour_name]"
|
||||
desc = "Delicious [cone_type] cone with a dollop of [flavour_name] ice cream."
|
||||
ice_creamed = 1
|
||||
|
||||
#undef ICECREAM_VANILLA
|
||||
#undef FLAVOUR_CHOCOLATE
|
||||
#undef FLAVOUR_STRAWBERRY
|
||||
#undef FLAVOUR_BLUE
|
||||
#undef CONE_WAFFLE
|
||||
#undef CONE_CHOC
|
||||
#undef INGR_MILK
|
||||
#undef INGR_FLOUR
|
||||
#undef INGR_SUGAR
|
||||
#undef INGR_ICE
|
||||
#undef MUCK
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user